我希望在TensorFlow中实现类似于2D卷积的操作。根据我的理解,实现卷积的最常见方法是首先对图像应用
换句话说,上面链接资源中的摘录很好地解释了
[...]例如,如果输入是[227x227x3] (以高度x宽度x n_channels格式),并且要以11x11x3过滤器进行卷积,步长为4,则会在输入中取[11x11x3]像素块,并将每个块拉伸成大小为11 * 11 * 3 = 363的列向量。在步幅为4的输入中迭代此过程可得(227-11)/ 4 +1 = 55个沿宽度和高度的位置,导致输出矩阵
据我从TensorFlow文档中了解到,这也是
现在,我想在TensorFlow中单独实现
im2col
操作(请参阅此处 - 子节“作为矩阵乘法的实施”)- 这是一种将图像转换为二维矩阵的操作,其中内核应用于图像的各个“块”作为扁平列。换句话说,上面链接资源中的摘录很好地解释了
im2col
的作用:[...]例如,如果输入是[227x227x3] (以高度x宽度x n_channels格式),并且要以11x11x3过滤器进行卷积,步长为4,则会在输入中取[11x11x3]像素块,并将每个块拉伸成大小为11 * 11 * 3 = 363的列向量。在步幅为4的输入中迭代此过程可得(227-11)/ 4 +1 = 55个沿宽度和高度的位置,导致输出矩阵
X_col
的im2col
的大小为[363 x 3025],其中每列都是拉伸的感受野,总共有55 * 55 = 3025个。请注意,由于接收场重叠,因此输入卷积核中的每个数字可能会复制到多个不同的列中。据我从TensorFlow文档中了解到,这也是
tf.nn.conv2d
内部执行的操作。现在,我想在TensorFlow中单独实现
im2col
操作(因为我希望能够访问这个中间结果)。由于这涉及以非平凡方式复制值,因此如何为该操作构建相对有效的计算图?同样,如何实现反向操作?