簡體   English   中英

在 CNN 網絡中,第二個卷積層 output 背后的數學原理是什么?

[英]In CNN network, what is the mathematics behind second convolutional layer output?

我對求解第二個卷積層的 output 的數學有點困惑。 我有一個形狀為 (11,11,64) 的第一個卷積層的 output,現在我有第二個卷積層,其中 kernel 規格是 64 個 3x3 大小的過濾器,步幅為 1,填充“相同”。 當我檢查 model 摘要和所有內容時,它顯示第二個卷積層的 kernel 具有形狀(3、3、64、64),但 Z78E6221F6393D13566811、DB398F14CE、第二個卷積層的形狀是(11DZ)。 所以我在這里對如何獲得(11,11,64)感到困惑。 我查了互聯網,他們說卷積會因為堆疊而產生 11x11x1 的形狀,對於 64 張圖像,它將是 11、11、64。 那么得到 11x11x1 形狀背后的數學原理是什么? 我只能理解形狀應該是 11,11,64,64。 請幫助我理解,因為我需要為硬件編寫這個算法。

你從 64 個圖像開始(更准確地說,1 個具有 64 個通道的“圖像”,但為簡單起見,我們將堅持使用 64 個圖像),每個圖像的大小為 11 * 11:

I1 :: 11 * 11
I2 :: 11 * 11
...
I64 :: 11 * 11

然后我們有卷積 kernel。 假設 kernel 的形狀是 1 * 64 * 11 * 11,那么對於每個輸入圖像(同樣,從技術上講,它應該是“通道”),都有一個對應的 kernel:

K1 :: 3 * 3
...
K64 :: 3 * 3

然后我們計算 I1 和 K1、I2 和 K2、...、I64 和 K64 之間的卷積。 現在看起來我們有 64 個 11 * 11 結果,但實際上,我們將它們相加成一個:O1 = K1 * I1 +... + K64 * I64 其中 * 表示卷積。 這就是 1 * 11 * 11 的來源。

最后,由於實際的 kernel 形狀為 64 * 64 * 11 * 11,因此 output 的形狀為 64 * 11 * 11:

O1 = K1_1 * I1 + ... + K64_1 * I64
O2 = K1_2 * I1 + ... + K64_2 * I64
...
O64 = K1_64 * I1 + ... + K64_64 * I64

我希望它能讓事情變得更清楚一些。 巧合的是,我也在做一些硬件編碼,上個月我正在學習這些。

這可能會幫助你


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_layer2[0, 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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM