python - 3d 内核和 3d 图像(例如 RGB)的矩阵乘法到底是如何产生 2d 输出的?

标签 python arrays matrix conv-neural-network convolution

我一直在研究卷积神经网络架构。我对 3d 内核作用于 3d 输入图像的部分感到非常困惑(好吧,考虑到我们有这些图像的堆栈,它是 4d,但只是为了使解释更容易一些)。我知道互联网上充满了这样的东西。但我找不到矩阵乘法部分的确切答案。

为了让每个人都更容易理解,有人可以向我展示 (5,5,3) 矩阵(我们的内核)与 (28,28,3) 矩阵(我们的 RGB 图像)的卷积如何发生的实际乘法,输出一个二维数组。

此外,还请展示(带有详细图片)那些众多的二维数组如何被展平并连接到单个全连接层。

我知道,池化二维数组的最后一层被展平了。但是,由于大约有 64 个 2d 数组(只要考虑一下),.. 所以即使我们将每个数组展平,我们也会有 64 个展平的一维数组。那么,这最终如何连接到下一个全连接层? (请提供图片)

最佳答案

您有多个问题合而为一。我将回答有关“卷积如何发生”的问题。简短的回答:它不是矩阵乘法。

步骤 1) 在 RGB 图像上滑动一个大小为 (5,5,3) 的窗口,雕刻出该大小的子图像。顺便说一句,这些子图像的尺寸与内核的尺寸完全相同。

第 2 步)将每个子图像值与卷积分量的值相乘。其输出再次是由内核值“缩放”的 (5,5,3) 子图像。

第 3 步)将“缩放”(5,5,3) 子图像的所有值加在一起(有效地压缩尺寸)为一个值 - 这就是我们的最终输出。

关于python - 3d 内核和 3d 图像(例如 RGB)的矩阵乘法到底是如何产生 2d 输出的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55892792/

相关文章:

c - 为什么值超出了数组的索引?

c++ - C++ 中的 3x3 矩阵旋转

python - 使用 key 的扭曲 ssh 服务器身份验证

python - Opencv-Python输入数组错误

javascript - 将数组上解析的字符串存储到另一个数组

python - 如何从 python 2.7 中的三个列表创建矩阵列表?

Matlab 输出 - 空格填充?

python - 按值排序字典python

python - 在pandas中使用groupby时如何分别求和负值和正值?

python - 创建一个列出查询集中对象类型数量的字符串