我有一个训练有素的前馈CNN。滤镜的形状是[height,width,in_channels,out_channels]。我想使用那些过滤器进行deconv,我们知道deconv过程需要过滤器的转置。我需要移植过滤器,或TF
将在tf.nn.conv2d_transpose
内进行转换我们需要做的就是将训练过的过滤器传递给tf.nn.conv2d_transpose
?
答案 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过程中使用的filter
和stride
与在转化过程中使用的filter
和stride
相同。
答案 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张量