tf.nn.conv2d_transpose是否会转置过滤器?

时间:2017-01-10 01:21:08

标签: tensorflow

我有一个训练有素的前馈CNN。滤镜的形状是[height,width,in_channels,out_channels]。我想使用那些过滤器进行deconv,我们知道deconv过程需要过滤器的转置。我需要移植过滤器,或TF将在tf.nn.conv2d_transpose内进行转换我们需要做的就是将训练过的过滤器传递给tf.nn.conv2d_transpose

2 个答案:

答案 0 :(得分:2)

我们不需要手动转置过滤器。通常,我们会按照以下方式组织我们的代码。

stride = [1,1,1,1]
conv1W = tf.Variable(tf.random.normal[4,4,3,20])
conv1 = tf.nn.conv2d(input, conv1W, strides=stride, padding='SAME')
conv1 = tf.nn.relu(conv1)

然后,进行deconv过程

deconv1 = tf.nn.conv2d_transpose(conv1, conv1W, output_shape=[batch_size,output_height, output_width, output_channels],strides=stride)
res = tf.nn.relu(deconv1)

res是deconv过程的结果。

总之,在deconv过程中使用的filterstride与在转化过程中使用的filterstride相同。

答案 1 :(得分:0)

根据tensorflow文档,您必须更改过滤器形状。在这里,我将介绍这个事实在最新的TF文档1.9中的描述。

对于tf.nn.conv_2d,过滤器变量应为-形状为[strong>形状[filter_height,filter_width, in_channels,out_channels ]

的4维张量

对于tf.nn.conv_2d_transpose,过滤器变量应为-形状为形状[filter_height,filter_width, out_channels,in_channels ]

的4-D张量
  • 很明显,我们可以看到我们需要针对out_channels更改更改形状