2017-01-10 55 views
2

我有一个训练有素的前馈CNN。过滤器的形状是[高度,宽度,in_channels,out_channels]。我想使用这些过滤器进行去卷积,我们知道去卷积过程需要滤波器的转置。我是否需要转置过滤器mannuly,或者会在tf.nn.conv2d_transpose内部完成,我们需要做的就是通过训练有素的过滤器tf.nn.conv2d_transposetf.nn.conv2d_transpose转置过滤器吗?

回答

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与在conv过程中使用的filterstride相同。