Pau*_*Mag 14 python deep-learning keras
我遵循了"在Keras中构建自动编码器"教程:https://blog.keras.io/building-autoencoders-in-keras.html
第一个简单的解决方案工作正常.但是在"深度自动编码器"一节中,教程中提供的代码似乎并不完全正常.
这是我的代码(直到出现问题的地方),这只是从turorial中复制的:
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.
Run Code Online (Sandbox Code Playgroud)
我收到此错误:
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)
Run Code Online (Sandbox Code Playgroud)
我猜这decoder是连接到错误的解码层和/或其输入或输出的形状是错误的.但我该怎么办呢?
这decoder不是autoencoder工作所必需的.我可以按照本教程的其余部分进行学习并对图像进行编码.但是,如果没有decoder我无法将图像解码回原始格式,看看它们是否真的很好看.本教程没有提及任何相关内容,只是简单地显示解码后的图像.我想作者假设他所做的任何改变都是decoder为了实现这一点是微不足道的.
为了澄清:单层版本工作正常,而不是我们只有3个编码和3个解码层
encoded = Dense(32, activation='relu')(input_img)
decoded = Dense(784, activation='sigmoid')(encoded)
Run Code Online (Sandbox Code Playgroud)
其他一切与上述相同.然后没有错误,我可以decoder用来重新创建图像.
小智 24
decoder_layer = autoencoder.layers[-1]
decoder = Model(encoded_input, decoder_layer(encoded_input))
Run Code Online (Sandbox Code Playgroud)
此代码适用于单层,因为在这种情况下只有最后一层是解码器
decoder_layer = autoencoder.layers[-1]
Run Code Online (Sandbox Code Playgroud)
这一行需要最后一层.
对于3层编码器和解码器,您必须调用所有3层来定义解码器.我正在做相同的教程,所以我写了这样的代码.
encoded_input = Input(shape=(encoding_dim,))
deco = autoencoder.layers[-3](encoded_input)
deco = autoencoder.layers[-2](deco)
deco = autoencoder.layers[-1](deco)
# create the decoder model
decoder = Model(encoded_input, deco).
Run Code Online (Sandbox Code Playgroud)
它现在工作正常.
| 归档时间: |
|
| 查看次数: |
3133 次 |
| 最近记录: |