我的问题是关于转置卷积运算(也通常称为反褶积或上卷积)。例如,在TensorFlow中,我指的是这层。
我的问题是,在应用这一层时,我们如何/何时添加偏置(拦截)项?
当使用“常规”卷积时,我们会这样做:
conv_output = tf.nn.conv2d(input, kernel, strides, padding='VALID')
conv_output = tf.nn.bias_add(conv_output, bias)在应用反褶积层时,我们如何做到这一点?我的困惑产生了,因为我的导师告诉我把上卷积想象成一个伪逆卷积层(逆的意思是卷积降低了输入的样本,而转置卷积则是向上的)。我知道它们不是数学上的逆。)
据他说:
正则卷积:conv = x.w + b
转置卷积:x = (conv - b).W (其中w和W不相同)。
上面的方程式对吗?它的某些地方让我感到不安。
在这种情况下,既然我们正在“倒退”,我们是否应该这样做:
deconv_output = tf.nn.bias_add(input, -1 * bias)
deconv_output = tf.nn.conv2d_transpose(deconv_output, kernel, strides, padding='VALID')或者我们应该在应用转置卷积后加上偏置,就像我们在“规则”卷积中所做的那样?
发布于 2018-06-25 21:24:35
我们在倒退,就像你说的,我们是在重采样,和标准的conv层相反,但是我们仍然在神经网络中向前迈进。因此,我要在卷积运算之后加上偏置。这是标准做法:首先应用矩阵点积(即仿射变换),然后在最后应用非线性之前增加偏差。
对于转置卷积,我们并不是完全反向正(下采样)卷积-这样的操作将被称为逆卷积,或数学中的反褶积。我们正在执行(转置)卷积操作,返回产生激活映射的相同输入维,但不能保证实际值与原始输入相同。
您可以从各种卷积运算的动画中看到,转置卷积基本上是一个正常卷积,但是增加了膨胀/填充以获得所需的输出维数。诀窍是保留像素之间的定位映射。
在取材于这些动画的纸中,它们解释了转置卷积实际上是反向执行的卷积步骤:
.虽然内核w定义了一个卷积,其向前和向后通过分别与$\textbf{C}$和$\textbf{C}^T$相乘来计算,但它也定义了一个转置卷积,其向前和向后通过分别乘以$\textbf{C}^T$和$(textbf{C}^T)^T=textbf{C}$来计算。
支持我观点的另一个来源是:在PyTorch实现中,偏置似乎是增加了卷积结果的输出。
https://datascience.stackexchange.com/questions/33614
复制相似问题