在上一篇文章里研究了tensorflow中的conv2d的一些细节问题,在这篇文章中,就来看看tensorflow中的反卷积是如何实现的。
在tensorflow中,反卷积是使用了conv2d_transpose这条函数来实现,跟卷积操作的conv2d的参数一样,严格意义上来讲,其实反卷积的运算本身应该不能算是卷积操作了,它所作的运算只是为了把卷积的输入跟输出反过来。所以,conv2d_transpose有以下几个细节:
1、反卷积需要指定反卷积的输出尺寸,因为根据上篇文章中卷积操作的公式可以看到,因为存在着向上取整或是向下取整这一个操作,所以在卷积操作中,不同的输入尺寸可以对应相同的输出。
kernel = tf.constant(1.0, shape=[5,5,3,1])
x3 = tf.constant(1.0, shape=[1,10,10,3])
y = tf.nn.conv2d(x3, kernel, strides=[1,2,2,1], padding="VALID")
根据公式
此时的输出y的大小是:(1, 3, 3, 1)
那么输入尺寸x3从[1,10,10,3]更改到[1,9,9,3],对应的输出y的尺寸仍然不变。
因此,如果对卷积进行逆操作的话,需要对输出的尺寸进行指定,不然tensorflow不知道应该属输出[1,10,10,3]还是[1,9,9,3]。
2、反卷积中的步长是1,反卷积中的参数也指定了一个stride,但是这个stride只是用