假设您有一个 200x200 像素的彩色图像。标准是输入矩阵是一个具有 3 个通道的 200x200 矩阵。第一个卷积层将有一个大小为ñ×米× 3, 在哪里ñ,米< 200(我认为它们通常设置为 3 或 5)。
是否有可能以不同的方式构造输入数据,使得通道数现在变成图像的宽度或高度?即,通道数为 200,输入矩阵为 200x3 或 3x200。与标准(通道数 = 3)相比,此公式的优点/缺点是什么?显然,这会限制过滤器的空间大小,但会在深度方向上显着增加它。
不同的维度(宽度、高度和通道数)确实有不同的含义,它们背后的直觉是不同的,这很重要。您可以重新排列您的数据,但如果您随后将其插入到预期数据为原始格式的 CNN 实现中,它的性能可能会很差。
需要注意的重要一点是,CNN 背后的直觉是它们对位置不变性的“先验”假设或知识、“启发式”、“经验法则”进行编码。直觉是,在查看图像时,我们经常希望我们的神经网络能够始终如一地(以相同的方式)检测特征(可能是边缘、角落等低级特征,或者可能是完整等高级特征面孔),无论他们在哪里。人脸是位于图像的左上角还是右下角无关紧要,检测到它在那里仍然应该以相同的方式执行(即可能需要完全相同的学习权重组合)我们的网络)。这就是我们所说的位置不变性。
这种位置不变性的直觉是通过使用我们沿着整个图像“滑动”的“过滤器”或“特征检测器”来实现的。这些是你提到的有维度的东西ñ×米× 3. 位置不变性的直觉是通过采用完全相同的过滤器并将其重新应用到图像的不同位置来实现的。
如果您更改显示数据的顺序,您将破坏位置不变性的这一特性。相反,您将用一个相当奇怪的属性替换它......例如,“宽度颜色”不变性。您可能会得到一个过滤器,它可以检测到相同类型的特征,而不管它X- 图像中的坐标,不管它是用什么颜色绘制的,但是是的- 坐标会突然变得相关;您的过滤器可能能够检测图像底部任何颜色的边缘,但无法识别图像顶部的相同边缘。这不是我期望在大多数图像识别任务中成功工作的直觉。
请注意,以某种方式对数据进行排序在计算时间方面也可能有优势,具体取决于您之后将使用该数据执行的计算(通常是大量矩阵乘法)。最好将数据存储在 RAM 中,使使用数据(矩阵乘法)的算法的最内层循环按与存储数据相同的顺序顺序访问数据。这是最有效的方式在其中从 RAM 访问数据,并将导致最快的计算。您通常可以放心地期望在大型框架(如 Tensorflow 和 PyTorch)中的实现已经要求您以默认情况下最有效的任何格式提供数据。