Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 卷积自动编码器的Keras值误差_Python_Tensorflow_Keras_Autoencoder_Convolutional Neural Network - Fatal编程技术网

Python 卷积自动编码器的Keras值误差

Python 卷积自动编码器的Keras值误差,python,tensorflow,keras,autoencoder,convolutional-neural-network,Python,Tensorflow,Keras,Autoencoder,Convolutional Neural Network,我试图建立一个卷积自动编码器,但我有问题的解码器部分。我的输入图像是32×32×3(RGB) 我假设我的解码器应该以16*16开始,因为我的编码器末尾的密集网络有256个节点。但是当我跑的时候 编码器,解码器=deep\u自动编码器(IMG\u形状,code\u大小=32) 我得到一个错误: ---> 34 decoder.add(keras.layers.Reshape([16,16])) . . . ValueError: total size of new array mus

我试图建立一个卷积自动编码器,但我有问题的解码器部分。我的输入图像是32×32×3(RGB)

我假设我的解码器应该以16*16开始,因为我的编码器末尾的密集网络有256个节点。但是当我跑的时候
编码器,解码器=deep\u自动编码器(IMG\u形状,code\u大小=32)
我得到一个错误:

---> 34     decoder.add(keras.layers.Reshape([16,16]))
.
.
.
ValueError: total size of new array must be unchanged
如果有帮助的话,我可以添加完整的错误代码,但是我觉得我犯了一些非常基本的错误。为了应用反褶积滤波器,我需要将编码器的平坦输出转换为矩阵

为了便于阅读网络,我添加了编码器部分的模型摘要-如果我注释掉解码器部分并运行
encoder.summary()


你的模型让我烦恼的主要是两件事:第一,你的自动编码器的不对称性。在编码过程中使用conv和pool层,但省略了上采样(反向池)层的使用。这已经在keras中实现为
UpSampling2D
。此外,您还应该在conv和deconv层中使用相同的步幅

第二,在第四次池化之后,您将得到1x1x256的压缩表示。为什么要尝试将其转换为解码部分的16x16x1表示?这也是关于对称性的。无需展平编码层,只需使用1x1x256表示作为解码模型的输入。当您将编码器和解码器作为单独的模型创建时,可以按如下方式堆叠它们:

encoder = Sequential()
encoder.add ...
...

decoder = Sequential()
decoder.add(encoder)
decoder.add ...
还有一个由Francois Chollet()编写的关于如何创建自动编码器的教程。它可能会帮助您实现

_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
input_1 (InputLayer)         (None, 32, 32, 3)         0         
_________________________________________________________________
conv2d_1 (Conv2D)            (None, 32, 32, 32)        896       
_________________________________________________________________
max_pooling2d_1 (MaxPooling2 (None, 11, 11, 32)        0         
_________________________________________________________________
conv2d_2 (Conv2D)            (None, 11, 11, 64)        18496     
_________________________________________________________________
max_pooling2d_2 (MaxPooling2 (None, 4, 4, 64)          0         
_________________________________________________________________
conv2d_3 (Conv2D)            (None, 4, 4, 128)         73856     
_________________________________________________________________
max_pooling2d_3 (MaxPooling2 (None, 2, 2, 128)         0         
_________________________________________________________________
conv2d_4 (Conv2D)            (None, 2, 2, 256)         295168    
_________________________________________________________________
max_pooling2d_4 (MaxPooling2 (None, 1, 1, 256)         0         
_________________________________________________________________
flatten_1 (Flatten)          (None, 256)               0         
_________________________________________________________________
dense_1 (Dense)              (None, 32)                8224      
=================================================================
encoder = Sequential()
encoder.add ...
...

decoder = Sequential()
decoder.add(encoder)
decoder.add ...