对于求解第二卷积层输出的数学,我有点困惑。我有第一个形状的卷积层的输出(11,11, 64 ),现在我有了第二个卷积层,其中内核规范是64个3x3大小的过滤器,步幅是1,填充是‘相同的’。当我检查模型摘要和所有,它显示第二卷积层的核具有一个形状(3,3,64,64),但是第二卷积层的输出形状是(11,11,64)。所以我对如何得到(11,11,64)感到困惑。我查看了互联网,他们说卷积会因为叠加而形成11x11x1的形状,对于64张图片,它将是11,11,64。那么,得到11x11x1形状的数学是什么呢?我只能理解这个形状应该会导致11,11,64,64。请帮助我理解,因为我需要为硬件编码这个算法。
发布于 2022-08-08 18:01:28
从64幅图像开始(更准确地说,有64个通道的1个“图像”,但为了简单起见,我们将坚持使用64个图像),每个图像的大小为11 * 11:
I1 :: 11 * 11
I2 :: 11 * 11
...
I64 :: 11 * 11那么我们就有卷积核了。假设内核形状为1* 64 * 11 * 11,那么对于每个输入映像(同样,在技术上应该是“通道”),有一个相应的内核:
K1 :: 3 * 3
...
K64 :: 3 * 3然后计算I1与K1、I2与K2、.、I64与K64之间的卷积。现在看来,我们有64个11 * 11的结果,但实际上,我们把把加到一个单独的结果中: O1 = K1 * I1 +.+ K64 * I64,其中*表示卷积。这就是1* 11 * 11的来历。
最后,由于实际内核形状为64 * 64 * 11 * 11,输出的形状为64 * 11 * 11:
O1 = K1_1 * I1 + ... + K64_1 * I64
O2 = K1_2 * I1 + ... + K64_2 * I64
...
O64 = K1_64 * I1 + ... + K64_64 * I64我希望它能使事情更清楚一些。巧合的是,我也在硬件上做一些编码,上个月我也在学习这些。
发布于 2022-08-08 18:17:05
这可能对你有帮助
input_layer2.shape == (11, 11, 64)
kernel_layer2.shape == (3, 3, 64, 64)
input_layer2[:3, :3].shape == (3, 3, 64)
kernel_layer2[:,:,:,0].shape == (3, 3, 64)它只适用于output_layer20,0
for i in range(64):
output_layer2[0, 0, i] = np.sum(np.dot(input_layer2[:3, :3], kernel_layer2[:,:,:,i]))最后,为所有的大步:
output_layer2.shape == (11, 11, 64)https://stackoverflow.com/questions/73282131
复制相似问题