Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/332.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 三维卷积自动编码器不';t将输出层与输入层匹配_Python_Tensorflow_Keras_Conv Neural Network - Fatal编程技术网

Python 三维卷积自动编码器不';t将输出层与输入层匹配

Python 三维卷积自动编码器不';t将输出层与输入层匹配,python,tensorflow,keras,conv-neural-network,Python,Tensorflow,Keras,Conv Neural Network,我正在尝试创建一个三维卷积神经网络自动编码器。我无法将张量的输入维度与输出维度匹配 我尝试过改变图层形状,并使用Keras自动编码器 padding='SAME' 步幅=[1,1,1] self.inputs=tf.placeholder(tf.float32,input\u shape,name='inputs') self.targets=tf.placeholder(tf.float32,input_shape,name='targets') conv1=tf.layers.conv3d(

我正在尝试创建一个三维卷积神经网络自动编码器。我无法将张量的输入维度与输出维度匹配

我尝试过改变图层形状,并使用Keras自动编码器

padding='SAME'
步幅=[1,1,1]
self.inputs=tf.placeholder(tf.float32,input\u shape,name='inputs')
self.targets=tf.placeholder(tf.float32,input_shape,name='targets')
conv1=tf.layers.conv3d(inputs=self.inputs,filters=16,kernel\u size=(3,3,3),padding=padding,strips=stride,activation=tf.nn.relu)
maxpool1=tf.layers.max_poolg3d(conv1,pool_size=(2,2,2),步长=(2,2,2),填充=填充)
conv2=tf.layers.conv3d(输入=maxpool1,过滤器=32,内核大小=(3,3,3),填充=padding,步幅=stride,激活=tf.nn.relu)
maxpool2=tf.layers.max_poolg3d(conv2,pool_size=(3,3,3),步长=(3,3,3),填充=填充)
conv3=tf.layers.conv3d(输入=maxpool2,过滤器=96,内核大小=(2,2,2),填充=padding,步幅=stride,激活=tf.nn.relu)
maxpool3=tf.layers.max_poolg3d(conv3,pool_size=(2,2,2),步长=(2,2,2),填充=填充)
#潜在内部表征
#译码器
#tf.keras.layers.UpSampling3D()
unpool1=K.调整卷大小(maxpool3,2,2,“最后一个通道”)
deconv1=tf.layers.conv3d_转置(输入=unpol1,过滤器=96,内核大小=(2,2,2),填充=padding,步幅=stride,激活=tf.nn.relu)
unpool2=K.调整卷大小(1,3,3,“最后一个通道”)
deconv2=tf.layers.conv3d_转置(输入=unpol2,过滤器=32,内核大小=(3,3,3),填充=padding,步幅=stride,激活=tf.nn.relu)
unpool3=K.调整卷大小(取消2,2,2,“最后一个通道”)
deconv3=tf.layers.conv3d_转置(输入=unpol3,过滤器=16,内核大小=(3,3,3),填充=padding,步幅=stride,激活=tf.nn.relu)
self.output=tf.layers.dense(输入=v3,单位=3)
self.output=tf.重塑(self.output,self.input\u形状)

ValueError:无法将包含1850688个元素的张量重塑为[1,31,73201,3](1364589个元素)的形状,以便使用输入形状[1,36,84204,3],[5]和计算为部分形状的输入张量进行“重塑”(op:“重塑”):输入[1]=[1,31,73201,3]。

您的输入形状是
[1,31,73,201,3]
。在转置卷积期间,您正在三个
调整卷大小
层中执行
[2,2,2]
[3,3,3]
[2,2,2]
的放大。如果将这些数字在轴上相乘,则为
[12,12,12]
(每个数字为2*3*2)。因此,解码器的输出将是每个维度中12的倍数

但是
[x,31,73,201,x]
的输入维度形状不是12的倍数。大于这些尺寸的最近倍数是
[x,36,84,204,x]
。因此,解决方案是在解码部分之后,去掉多余的尺寸,并将其与原始尺寸匹配,或者更好的解决方案是用零填充原始形状,使其为12的倍数。在遵循第二个解决方案之后,您将不得不考虑输入的新维度。

更新代码(仅更改部分)

最后,

self.output = tf.reshape(self.output, pad_inputs.shape)

您的输入形状是
[1,31,73,201,3]
。在转置卷积期间,您正在三个
调整卷大小
层中执行
[2,2,2]
[3,3,3]
[2,2,2]
的放大。如果将这些数字在轴上相乘,则为
[12,12,12]
(每个数字为2*3*2)。因此,解码器的输出将是每个维度中12的倍数

但是
[x,31,73,201,x]
的输入维度形状不是12的倍数。大于这些尺寸的最近倍数是
[x,36,84,204,x]
。因此,解决方案是在解码部分之后,去掉多余的尺寸,并将其与原始尺寸匹配,或者更好的解决方案是用零填充原始形状,使其为12的倍数。在遵循第二个解决方案之后,您将不得不考虑输入的新维度。

更新代码(仅更改部分)

最后,

self.output = tf.reshape(self.output, pad_inputs.shape)