Классификация с автоэнкодерами Keras
Я пытаюсь взять ванильный автоэнкодер с помощью Keras (с бэкэндом Tensorflow) и остановить его, когда значение потерь сходится к определенному значению. После последней эпохи я хочу использовать сигмовидную функцию для выполнения классификации. Вы бы знали, как это сделать (или хотя бы указали мне правильное направление)?
Приведенный ниже код очень похож на ванильный автоэнкодер по адресу http://wiseodd.github.io/techblog/2016/12/03/autoencoders/. (Я использую свои собственные данные, но не стесняйтесь использовать пример MNIST в ссылке, чтобы продемонстрировать, о чем вы говорите.)
NUM_ROWS = len(x_train)
NUM_COLS = len(x_train[0])
inputs = Input(shape=(NUM_COLS, ))
h = Dense(64, activation='sigmoid')(inputs)
outputs = Dense(NUM_COLS)(h)
# trying to add last sigmoid layer
outputs = Dense(1)
outputs = Activation('sigmoid')
model = Model(input=inputs, output=outputs)
model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])
model.fit(x_train, y_train,
batch_size=batch,
epochs=epochs,
validation_data=(x_test, y_test))
1 ответ
У меня есть толкование того, к чему вы стремитесь, однако у вас, похоже, нет четкого представления о себе. Я думаю, вы можете уточнить, подготовите ли вы необходимый набор данных самостоятельно.
Одно из возможных решений будет следующим:
NUM_ROWS = len(x_train)
NUM_COLS = len(x_train[0])
inputs = Input(shape=(NUM_COLS, ))
h = Dense(64, activation='sigmoid')(inputs)
outputs = Dense(NUM_COLS)(h)
model = Model(input=inputs, output=outputs)
model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])
model.fit(x_train, x_train,
batch_size=batch,
epochs=epochs,
validation_data=(x_test, y_test))
h.trainable=False
# trying to add last sigmoid layer
outputs = Dense(1)(h)
outputs = Activation('sigmoid')
model2.fit(x_train, y_train,
batch_size=batch,
epochs=epochs,
validation_data=(x_test, y_test))