Tensorflow conv2d_transpose(deconv)out_backprop的行数与计算的不匹配

Kendall Weihe

编辑我的问题是我的过滤器的宽度和高度,我误解了API文档...正在修正

解决方案:此处开始反卷积幻灯片53


我有一个与这里类似的问题,但这有点时髦。

我的错误是Conv2DBackpropInput: Number of rows of out_backprop doesn't match computed: actual = 25, computed = 26在优化程序初始化时。

...所以它减了1?

一些背景...

我有一个转换层的尺寸 <tf.Tensor 'MaxPool_2:0' shape=(?, 25, 25, 128) dtype=float32>

输入图像为200x200,我有3个maxpool层-因此h = w =25。我想添加3个deconv层,以便返回原始分辨率(我正在进行图像分割)。

deconv代码如下所示:

temp_batch_size = tf.shape(x)[0]
# output_shape = tf.pack([temp_batch_size, 50, 50, 64])
output_shape = [temp_batch_size, 50, 50, 64]
conv4 = tf.nn.conv2d_transpose(conv3, weights['wdc1'], output_shape=output_shape, strides=[1,1,1,1], padding="VALID")
# conv4 = tf.nn.local_response_normalization(conv4)

# output_shape = tf.pack([temp_batch_size, 100, 100, 32])
output_shape = [temp_batch_size, 100, 100, 32]
conv5 = tf.nn.conv2d_transpose(conv4, weights['wdc2'], output_shape=output_shape, strides=[1,1,1,1], padding="VALID")
# conv5 = tf.nn.local_response_normalization(conv5)

# output_shape = tf.pack([temp_batch_size, 200, 200, 1])
output_shape = [temp_batch_size, 200, 200, 1]
conv6 = tf.nn.conv2d_transpose(conv5, weights['wdc3'], output_shape=output_shape, strides=[1,1,1,1], padding="VALID")
# conv6 = tf.nn.local_response_normalization(conv6)

(你可以看到我尝试tf.pack()没有成功-如建议在这里),其中,权重分别是:

'wdc1' : tf.Variable(tf.random_normal([25, 25, 64,128])),

'wdc2' : tf.Variable(tf.random_normal([50, 50, 32,64])),

'wdc3' : tf.Variable(tf.random_normal([100, 100, 1,32])),

一些调试如下所示:

(Pdb) conv3
<tf.Tensor 'MaxPool_2:0' shape=(?, 25, 25, 128) dtype=float32>
(Pdb) conv4
<tf.Tensor 'conv2d_transpose:0' shape=(?, ?, ?, ?) dtype=float32>
(Pdb) conv5
<tf.Tensor 'conv2d_transpose_1:0' shape=(?, ?, ?, ?) dtype=float32>
(Pdb) conv6
<tf.Tensor 'conv2d_transpose_2:0' shape=(?, ?, ?, ?) dtype=float32>

我觉得很奇怪,因为我也行temp_batch_size = tf.shape(x)[0](建议在这里),最后3个维度也是问号?如果将第一个维度更改为常数(例如10),我将得到<tf.Tensor 'conv2d_transpose:0' shape=(10, 50, 50, 64) dtype=float32>

也许那是我的问题的一部分?如果将其更改回常量,batch_sizeValueError: Shapes (10, 101, 101, 32) and (10, 100, 100, 32) are not compatible在优化程序初始化时会收到错误消息再一次,由一个。

使用此配置进行调试...

(Pdb) conv4
<tf.Tensor 'conv2d_transpose:0' shape=(10, 50, 50, 64) dtype=float32>
(Pdb) conv5
<tf.Tensor 'conv2d_transpose_1:0' shape=(10, 100, 100, 32) dtype=float32>
(Pdb) conv6
<tf.Tensor 'conv2d_transpose_2:0' shape=(10, 200, 200, 1) dtype=float32>

问题是我的大步前进吗?它们应该是什么(我尝试了不同的变体而没有成功)

奥利维尔·莫恩德罗特(Olivier Moindrot)

使用卷积换位,你需要向后想:你如何让你的输入(conv3形状[batch_size, 25, 25, 128])给出的(形状的输出[batch_size, 200, 200, 1])?

您将连续进行3x3卷积和最大池化。不幸的是,在TensorFlow中尚未提供解池功能,因此您只需进行转置卷积即可。

滤镜应具有正常的CNN形状:例如3x3卷积或5x5。如果要增加输出大小,则需要使用跨步转置卷积。

weights = {
  'wdc1' : tf.Variable(tf.random_normal([3, 3, 64, 128])),
  'wdc2' : tf.Variable(tf.random_normal([3, 3, 32, 64])),
  'wdc3' : tf.Variable(tf.random_normal([3, 3, 1, 32]))
}

和代码(不要忘了大步= 2):

temp_batch_size = 10

conv3 = tf.zeros([temp_batch_size, 25, 25, 128])
output_shape = [temp_batch_size, 50, 50, 64]
conv4 = tf.nn.conv2d_transpose(conv3, weights['wdc1'], output_shape=output_shape, strides=[1,2,2,1], padding="SAME")

output_shape = [temp_batch_size, 100, 100, 32]
conv5 = tf.nn.conv2d_transpose(conv4, weights['wdc2'], output_shape=output_shape, strides=[1,2,2,1], padding="SAME")

output_shape = [temp_batch_size, 200, 200, 1]
conv6 = tf.nn.conv2d_transpose(conv5, weights['wdc3'], output_shape=output_shape, strides=[1,2,2,1], padding="SAME")

编辑:

刚刚看到您的修改。CS231n幻灯片很好地说明了如何使用转置卷积,视频中的效果更好

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

TensorFlow MLP不训练XOR

来自分类Dev

TensorFlow中的缓存计算

来自分类Dev

TensorFlow中的异步计算

来自分类Dev

Tensorflow中的同步与异步计算

来自分类Dev

Tensorflow不共享变量

来自分类Dev

对conv2d_transpose感到困惑

来自分类Dev

Tensorflow:tf.nn.separable_conv2d做什么?

来自分类Dev

如何堆叠Tensorflow的conv2d_transpose()的多层

来自分类Dev

将Tensorflow 1.5转换为Tensorflow 2

来自分类Dev

Tensorflow 2.0中的梯度计算

来自分类Dev

TensorFlow SparseCategoricalAccuracy度量标准计算

来自分类Dev

在TensorFlow中编写类似Conv2D的操作

来自分类Dev

如何理解张量流中的conv2d_transpose

来自分类Dev

List(vector)与tensorflow要求的形状不匹配

来自分类Dev

Tensorflow Keras Conv2D多个过滤器

来自分类Dev

Tensorflow Keras形状不匹配

来自分类Dev

Tensorflow输入形状不兼容

来自分类Dev

Tensorflow2关于形状不匹配的警告,仍在培训

来自分类Dev

python中的tensorflow版本控制不匹配

来自分类Dev

tensorflow conv2d参数数量

来自分类Dev

Tensorflow 2:嵌套TensorArray

来自分类Dev

tensorflow tf.nn.conv2d 中的特征数

来自分类Dev

tensorflow conv2d_transpose 梯度

来自分类Dev

Tensorflow:无效的计算

来自分类Dev

Tensorflow 中的 Logits 和标签不匹配

来自分类Dev

安装 Tensorflow:Python - Tensorflow 版本不匹配警告

来自分类Dev

tensorflow中conv2d的顺序输出是什么?

来自分类Dev

tensorflow-如何使用可变图像的大小进行 conv2d_transpose?

来自分类Dev

在 Tensorflow 中查找 conv2d 层的权重