autoencodeur输出和特征向量不正确

时间:2019-07-16 09:04:39

标签: python keras autoencoder

我正在使用autoencodeur对图像进行特征提取。我的图像是位图=>像素值= 0或1

我使用以下代码:

X_train_autoencodeur = X_train.reshape(-1, 96*96)
X_valid_autoencodeur=X_valid.reshape(-1,96*96)

input_img = Input(shape=(96*96,))
encoded = Dense(1024, activation='relu')(input_img)
encoded = Dense(512, activation='relu')(encoded)
encoded = Dense(256, activation='relu')(encoded)
encoded = Dense(128, activation='relu')(encoded)



decoded = Dense(256, activation='relu')(encoded)
decoded = Dense(512, activation='relu')(decoded)
decoded = Dense(1024, activation='relu')(decoded)
decoded = Dense(96*96, activation='sigmoid')(decoded)

autoencoder = Model(input_img, decoded)
autoencoder.compile(optimizer='adam', loss='binary_crossentropy')

autoencoder.fit(X_train_autoencodeur, X_train_autoencodeur,
                epochs=100,
                batch_size=256,
                shuffle=True,
                validation_data=(X_valid_autoencodeur, X_valid_autoencodeur))


然后我用

绘制重建的图像
decoded_imgs = autoencoder.predict(X_valid_autoencodeur)
plt.imshow(decoded_imgs[7].reshape(96,96))

经过3个时期的验证和训练损失后,损失非常低且没有变化

重建的图像充满黑色,特征向量都相同。

我已经将autoencodeur训练了100个时期,我应该训练更多吗? 我在代码上是否犯了错误,可以解释不良的重构?

3 个答案:

答案 0 :(得分:2)

您的代码似乎正确。我相信问题出在数据本身。您是否对图像进行了预处理,以使其在0-1之间归一化,如下所示:

x_train = x_train.astype('float32') / 255.
x_test = x_test.astype('float32') / 255.

答案 1 :(得分:2)

仅凭经验,我知道即使使用卷积神经网络,自动编码器通常也需要很长时间才能训练(更像是1000个纪元)。

但是,您正在尝试使用完全连接的NN(以及相当大的NN),这将花费更长的时间来学习一些知识。

我的建议是:尝试使用CNN和更多的训练纪元。

答案 2 :(得分:1)

首先,您的网络非常大(不必要),并且具有许多参数,因此需要大量数据进行训练。因此,我建议尝试在编码器和解码器结构的每个结构中仅使用2层。 非常重要的一点是,对图像进行卷积自动编码器编码肯定会获得更好的结果,因此请尝试一下。 最后,为什么将二元互熵用于损失函数?尝试mse。

祝你好运!