Tensorflow 如果使用匹配的内核大小和步长,为什么Conv2DTranspose会输出棋盘格图像?

Tensorflow 如果使用匹配的内核大小和步长,为什么Conv2DTranspose会输出棋盘格图像?,tensorflow,keras,conv-neural-network,Tensorflow,Keras,Conv Neural Network,我已经读过很多次著名的蒸馏纸,其中涉及为什么Conv2DTranspose会产生棋盘人工制品 但是,我从中了解到,如果内核大小和步幅都匹配,就不会有任何问题。我正在使用Conv2D和kernel=(2,2)和strips=(2,2)进行下采样。我正在用完全相同的值使用conv2dtranpse进行上采样。但是,如果我将conv2dtranpse层的输出可视化,它们的检查负载非常大。没有下一个conv层无法修复的东西,但是。。。为什么呢?顺便说一下,我在最终输出中看不到人工制品(同时,我正在分割,

我已经读过很多次著名的蒸馏纸,其中涉及为什么Conv2DTranspose会产生棋盘人工制品

但是,我从中了解到,如果内核大小和步幅都匹配,就不会有任何问题。我正在使用
Conv2D
kernel=(2,2)
strips=(2,2)
进行下采样。我正在用完全相同的值使用
conv2dtranpse
进行上采样。但是,如果我将
conv2dtranpse
层的输出可视化,它们的检查负载非常大。没有下一个conv层无法修复的东西,但是。。。为什么呢?顺便说一下,我在最终输出中看不到人工制品(同时,我正在分割,所以在最终的准二元掩模中看不到小强度噪声)


conv2dtranpse
的确切定义是什么?当使用匹配的内核和步幅时,我希望这样一个层的输出是非“网格式”的(如上面提取链接中的示例所示),但是在文档中没有关于它的确切数学定义。为什么我错了?

Conv2Transpose数学运算与
卷积运算正好相反。请注意,
反褶积
或其他术语的使用在数学上是不正确的

这是一个很好的例子,因为它正好使用了两步。您可以看到初始图像大小是2x2,白色正方形是0填充,最终输出张量尺寸是4x4


尽管不再使用,theano文档漂亮地解释了
conv2dtranpse
背后的数学原理。您应该查看文档以更好地理解。

我不会使用“精确逆”一词,因为卷积和矩阵乘法通常不是可逆函数。也许“对立面”是一个更好的术语?事实上,对立面是一个更合适的词。我修改了答案以反映正确的数学术语。我仍然没有得到一件事。。。内核在这里做什么?我希望您在输入中取1个像素的值,在输出中取3x3平方的值(像素值乘以每个内核值)。相反,在这个链接中,它显示您在输入中获得1个像素,在输出中获得1个像素,而其他像素保持为零(例如:关系10,非单位步幅)