自动编码器的准确率约为 0% / 根本不训练

数据挖掘 神经网络 深度学习 喀拉斯 自动编码器
2022-03-12 10:29:08

所以我想进入“自动编码器”的主题,并测试了它在大小为 200 的随机向量上的工作情况。

model = keras.models.Sequential()
model.add(keras.layers.Dense(50, activation='tanh'))
model.add(keras.layers.Dense(200))


model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['acc'])
model.fit(vectors, vectors, epochs=50, batch_size=100)

损失在某种程度上是负的,并且不断减少。准确度几乎为 0%,值看起来像x.xxxxxxxe-07

架构应该是输入=200,隐藏层=50,输出=200。

真的什么都学不来。我忽略了什么,或者这里实际正确的方法是什么?

1个回答

一些东西。首先,我认为您尝试做的事情没有多大意义。自动编码器尝试在您的数据中找到模式并利用它们来压缩和重建数据。您正在尝试将它与随机数据一起使用,这意味着自动编码器不会学习任何模式。我建议您尝试使用 MNIST 或其他数据集。

另一件事是你的最后一个激活函数、你的损失函数、你的度量和可能你的数据不能一起工作。很难说什么是对的,因为我不知道你生成了什么随机数。可能你的数字不是二进制的,你会想要:

model.add(keras.layers.Dense(200))


model.compile(optimizer='adam', loss='mse')

或者,如果你的随机数是二进制的,那么你会想要:

model.add(keras.layers.Dense(200), activation='sigmoid')


model.compile(optimizer='adam', loss='binary_crossentropy')

最后,使用准确度作为指标对自动编码器没有意义。准确性仅在您执行分类时才有用。