python - 3d 内核和 3d 图像(说 RGB)的矩阵乘法究竟是如何发生的以提供 2d 输出?
问题描述
我一直在研究卷积神经网络架构。我对此感到非常困惑,3d 内核作用于 3d 输入图像(好吧,它是 4d,因为我们有这些图像的堆栈,但只是为了让解释更容易一些)。我知道互联网上到处都是这样的东西。但我找不到那个矩阵乘法部分的确切答案。
为了让大家更容易理解,有人可以告诉我一个关于(5,5,3)矩阵(我们的内核)如何在(28,28,3)矩阵(我们的RGB图像)上发生卷积的实际乘法,输出一个二维数组。
此外,还请展示(带有详细图片),这些众多的 2d 阵列是如何变平并连接到单个全连接层的。
我知道,池化二维数组的最后一层是展平的。但是,由于有 64 个二维数组(只需考虑一下),.. 所以即使我们将每个数组展平,我们也会有 64 个展平的一维数组。那么,这最终如何连接到下一个全连接层?(请上图)
解决方案
您有多个问题合二为一。我将回答关于“卷积如何发生”的问题。简短的回答:它不是矩阵乘法。
步骤 1) 在 RGB 图像上滑动一个大小为 (5,5,3) 的窗口,雕刻出该大小的子图像。顺便说一下,这些子图像的维度与内核的维度完全相同。
第 2 步)您将每个子图像值与卷积分量的值相乘。其输出再次是 (5,5,3) 子图像由内核的值“缩放”。
第 3 步)您将“缩放”(5,5,3)子图像的所有值加在一起(有效地压缩尺寸)成一个值——这是我们的最终输出。
推荐阅读
- python - 如何使用 sklearn LassoCV,我做错了什么?
- python-3.x - 没有名为“openslide”的模块
- angularjs - 在 html 中正确使用 ng-if 指令
- python - 如果在先前的计算完成之前有新的请求到来,Tensorflow Serving 会失败
- r - FX 转换取决于 FX 交换(交叉 df 乘法)
- php - PHP 返回部分路径
- node.js - mongodb $near 提供不准确的排序
- three.js - obj在three.js objloader中缺少材料
- filter - NLMS 回声消除:我们如何估计生成远端回声的时间步长?
- git - Difftool 未打开,命令行挂起