想理解转置卷积的实现过程,首先应该深入理解一下卷积的实现过程,请参考我的另一篇文章:https://blog.csdn.net/qq_37691909/article/details/89487724
接下来介绍一下转置卷积的情况。官方的函数原型如下:
tf.nn.conv2d_transpose(
value,
filter,
output_shape,
strides,
padding='SAME',
data_format='NHWC',
name=None
)
其中,第一个参数value,是输入的图像,是一个四维张量,分别对应于 【batchsize, 图像宽度,图像高度,图像深度】,数据类型也是浮点型
第二个参数filter,是卷积核的情况,也是四维张量,分别对应于 【核宽度,核高度,输出图像深度,输入图像深度】,这里和卷积中的参数顺序正好相反
第三个参数output_shape,是输出图像的尺寸,是一个四个元素的向量,分别对应于【batchsize,输出图像宽度,输出图像高度,输出图像深度】,注意到,在卷积的参数列表中是没有这一项的,为什么会有这一项见下面的分析。
第四个参数strides,表示步长,是一个向量,对应于【1,水平步长,垂直步长,1】
第五个参数是填充方式,和卷积的一样,SAME对应填充,VALID对应不填充
下面将详细地对这个函数的实现过程进行解释。
1、为什么要指定输出图像的尺寸?
针对这个问题,我们在卷积的时候就已经有所介绍。在卷积时会发现,当步长不是1后,可能出现两个输入图像尺寸不一致的图,但是使用同样的卷积核及参数配置,最终得到了相同尺寸的输出图像。 这是由于不能整除导致的,因此在进行反卷积的时候,通过指定输出图像的尺寸来进行不同的操作,从而可以得到更好的效果。
2、首先看一下当 使用SAME模式&#x