使用Keras自动编码器进行分类

时间:2017-07-09 15:07:57

标签: machine-learning neural-network deep-learning keras autoencoder

我正在尝试使用Keras(使用Tensorflow后端)获取vanilla自动编码器,并在损失值收敛到特定值时停止它。在最后一个纪元之后,我想使用sigmoid函数来执行分类。你知道如何做到这一点(或者至少指出我正确的方向)?

以下代码与http://wiseodd.github.io/techblog/2016/12/03/autoencoders/的vanilla自动编码器非常相似。 (我正在使用自己的数据,但可以在链接中使用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 个答案:

答案 0 :(得分:0)

我对你的目标有一个解释,然而,你自己似乎没有一个非常清晰的形象。 我想你可以澄清一下你是否自己准备了必要的数据集。

一种可能的解决方案如下:

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))