【发布时间】:2017-11-12 08:25:42
【问题描述】:
我遵循了教程“在 Keras 中构建自动编码器”: https://blog.keras.io/building-autoencoders-in-keras.html
第一个简单的解决方案效果很好。但在“深度自动编码器”部分,教程中提供的代码似乎并不能完全正常工作。
这是我的代码(直到问题出现为止),它只是从教程中复制的:
from keras.layers import Input, Dense
from keras.models import Model
encoding_dim = 32
input_img = Input(shape=(784,))
encoded = Dense(128, activation='relu')(input_img)
encoded = Dense(64, activation='relu')(encoded)
encoded = Dense(32, activation='relu')(encoded) # Multiple encoding
decoded = Dense(64, activation='relu')(encoded) # and decoding layers.
decoded = Dense(128, activation='relu')(decoded)
decoded = Dense(784, activation='sigmoid')(decoded)
autoencoder = Model(input_img, decoded)
encoder = Model(input_img, encoded)
encoded_input = Input(shape=(encoding_dim,))
decoder_layer = autoencoder.layers[-1]
decoder = Model(encoded_input, decoder_layer(encoded_input)) # Crash happens here.
我收到此错误:
Traceback (most recent call last):
File "keras_test.py", line 20, in <module>
decoder = Model(encoded_input, decoder_layer(encoded_input)) # Crash happens here
File "/Users/paulmagnus/Library/Enthought/Canopy/edm/envs/User/lib/python2.7/site-packages/keras/engine/topology.py", line 569, in __call__
self.assert_input_compatibility(inputs)
File "/Users/paulmagnus/Library/Enthought/Canopy/edm/envs/User/lib/python2.7/site-packages/keras/engine/topology.py", line 479, in assert_input_compatibility
' but got shape ' + str(x_shape))
ValueError: Input 0 is incompatible with layer dense_6: expected axis -1 of input shape to have value 128 but got shape (None, 32)
我猜decoder 连接到错误的解码层和/或其输入或输出的形状错误。但是我该怎么办呢?
decoder 不是autoencoder 工作所必需的。我可以按照本教程的其余部分执行学习和编码图像。但是没有decoder,我无法将图像解码回原始格式,看看它们是否真的看起来不错。本教程没有提及任何关于此的内容,只显示解码后的图像而没有提及。我猜作者认为他对decoder 所做的任何更改都是微不足道的。
澄清一下:单层版本工作正常,我们只有 3 个编码层和 3 个解码层
encoded = Dense(32, activation='relu')(input_img)
decoded = Dense(784, activation='sigmoid')(encoded)
其他一切都和上面一样。然后没有错误,我可以使用decoder 重新创建图像。
【问题讨论】:
-
你好 PaulMag;我认为您的问题与代码有关,并且与调试 Keras 模型设置有关,而不是与统计数据或深度学习技术有关。如果是这样,它的主题更好地与 StackOverflow 的“使命”相关,而不是 CrossValidated。
-
@fnl 是的,你是对的。我不确定在哪个平台上问这个。我应该在 StackOverflow 上重新发布它并从 CrossValidated 中删除它吗?
-
我刚刚发现迁移是一回事。我已将此问题标记为迁移到 StackOverflow。
标签: python deep-learning keras