直接以一个简单例子描述反卷积过程。
假设输入如下:
[[1,0,1],
[0,2,1],
[1,1,0]]
反卷积卷积核如下:
[[ 1, 0, 1],
[-1, 1, 0],
[ 0,-1, 0]]
现在通过stride=2
来进行反卷积,使得尺寸由原来的3*3
变为6*6
.那么在Tensorflow框架中,反卷积的过程如下(不同框架在裁剪这步可能不一样):
反卷积实现例子
其实通过我绘制的这张图,就已经把原理讲的很清楚了。大致步奏就是,先填充0,然后进行卷积,卷积过程跟上一篇文章讲述的一致。最后一步还要进行裁剪。
在tensorflow中反卷积操作使用
tf.nn.conv2d_transpose( value, filter, # pylint: disable=redefined-builtin output_shape, strides, padding="SAME", data_format="NHWC", name=None):
今天在项目中看到使用slim调用反卷积操作,
pred_corner = slim.conv2d_transpose(x1_up, NUM_CORNERS, [5, 5], stride=2, activation_fn=None, normalizer_fn=bn_func, weights_regularizer=slim.l2_regularizer(1e-5), scope='pred_corner')
但是这个并没有指定output_shape,作为疑问之后补充吧。