Скажем, у меня есть MLP, который выглядит так:
model = models.Sequential()
model.add(layers.Dense(200, activation = "relu", input_dim=250))
model.add(layers.Dense(100, activation="relu"))
model.add(layers.Dense(75, activation="relu"))
model.add(layers.Dense(50, activation="relu"))
model.add(layers.Dense(17, activation = "softmax"))
model.compile(optimizer = optimizers.Adam(lr=0.001),
loss = "categorical_crossentropy",
metrics = ['MeanSquaredError', 'AUC' , 'accuracy',tf.keras.metrics.Precision()])
history = model.fit(X_train, y_train, epochs = 100,
validation_data = (X_val, y_val))
Теперь я хочу, на последнем уровне, добавить двоичный классификатор для каждого из 17 классов, вместо того, чтобы выводить все 17 классов вместе с softmax; Это означает, что все бинарные классификаторы должны разветвляться от до последнего уровня. Возможно ли это сделать в Керасе? Я предполагаю, что это должен быть другой тип модели, а не Sequential()
?
ИЗМЕНИТЬ:
Я понял, что не могу использовать Sequential, и изменил модель так, чтобы:
from tensorflow.keras import Input
from tensorflow.keras import Model
from tensorflow.keras.layers import Dense, Dropout
def test_model(layer_in):
dense1 = Dense(200, activation = "relu") (layer_in)
drop1 = Dropout(rate=0.02)(dense1)
dense2 = Dense(100, activation="relu")(drop1)
drop2 = Dropout(rate=0.02)(dense2)
dense3 = Dense(75, activation="relu")(drop2)
drop3 = Dropout(rate=0.02)(dense3)
dense4 = Dense(50, activation="relu")(drop3)
drop4 = Dropout(rate=0.01)(dense4)
out = Dense(17, activation= "softmax")(drop4)
return out
layer_in = Input(shape=(250,))
layer_out = test_model(layer_in)
model = Model(inputs=layer_in, outputs=layer_out)
plot_model(model, show_shapes=True)
Итак, я предполагаю, что конечная цель состоит в том, чтобы иметь 17 двоичных слоев в конце с сигмовидной функцией, каждый из которых подключен к drop4...