一句话解释:逆卷积相对于卷积在神经网络结构的正向和反向传播中作相反的运算。python
逆卷积(Deconvolution)比较容易引发误会,转置卷积(Transposed Convolution)是一个更为合适的叫法.api
举个栗子:网络
4x4的输入,卷积Kernel为3x3, 没有Padding / Stride, 则输出为2x2。输入矩阵可展开为16维向量,记做
输出矩阵可展开为4维向量,记做
卷积运算可表示为dom
平时神经网络中的正向传播就是转换成了如上矩阵运算。ide
那么当反向传播时又会如何呢?首先咱们已经有从更深层的网络中获得的. spa
回想第一句话,你猜的没错,所谓逆卷积其实就是正向时左乘,而反向时左乘
,即
的运算。.net
下图标注有误,“SAME”应为“VALID”,kernel为3,stride为1,卷积输出为(输入-核+1)/步长。orm
tf.nn.conv2d_transpose()blog
kernel = tf.random_normal(shape=[2,2,3,1]) # strides 和padding也是假想中 正向卷积的模样。固然,x是正向卷积后的模样 y = tf.nn.conv2d_transpose(x,kernel,output_shape=[1,5,5,3], strides=[1,2,2,1],padding="SAME") # 在这里,output_shape=[1,6,6,3]也能够,考虑正向过程,[1,6,6,3] # 经过kernel_shape:[2,2,3,1],strides:[1,2,2,1]也能够
注意:conv2d_transpose 中会计算 output_shape 可否经过给定的参数计算出 inputs的维度,若是不能,则报错。接口