Pytorch(筆記2)--Conv2d卷積運算

當我們安裝好pytorch的依賴環境以後,我們就可以學習pytorch了,我們首先引入依賴包如下:

import torch
import torchvision as tv
import torch.nn as nn

 接下來我們主要講述nn.Conv2d 的卷積運算函數,nn.Conv2d的功能是:對由多個輸入平面組成的輸入信號進行二維卷積,以最簡單的例子進行說明:

layer = nn.Conv2d(in_channels=1,out_channels=3,kernel_size=3,stride=1,padding=0)

參數理解:(畫重點!)

in_channels:個人認爲有兩種理解

                     1)輸入通道數,對於圖片層一般爲1(灰度)3(RGB)

                     2)定義一種輸入規則,要求上一層的輸出必須和這個輸入一致,也可以理解爲併發in_channels個channel在上一層                    .                    feature_map(特徵映射)上進行卷積運算

out_channels:

                    1)直觀理解是輸出層通道數,

                    2)換一種理解是kernels(卷積核)個數,其中,每個卷積核會輸出局部特徵,比如下圖中

                    面部中有頭髮feature,衣服顏色的feature都是由不同的kernel進行卷積運算得到的。

             看了上面的內容,你或許會有這個疑問如果in_channels也就是說輸入的feature也要包含3個channel的tensor(ndarray)對的   或許你會問,那如果out_channels是2,那怎麼從3-->變成2的?

     

下圖是詳細的原理圖:

(補充:上述說的是kernel1的運算,有多少個kernel就有多少個相同的運算,最終會輸出[b,out_channels,w,h],其中w和h是輸出的shape,下文有講計算方法)

stride(步長):控制cross-correlation的步長,可以設爲1個int型數或者一個(int, int)型的tuple。

padding(補0):控制zero-padding的數目。

dilation(擴張):控制kernel點(卷積核點)的間距; 也被稱爲 "à trous"算法. 可以在此github地址查看:Dilated convolution animations

groups(卷積核個數):這個比較好理解,通常來說,卷積個數唯一,但是對某些情況,可以設置範圍在1 —— in_channels中數目的卷積核:

output_size 運算

1)試想,在沒有padding(邊緣填充)的情況下,有卷積操作如下

layer = nn.Conv2d(in_channels=1,out_channels=3,kernel_size=3,stride=1,padding=0)

如果輸入的圖像是1張大小是28*28的灰度圖像

x = torch.rand(1,1,28,28)

卷積核每次移動1(stride=1)最大可以移動26個值到達邊緣,因此輸出是1張3通道的26*26的圖像1*3*26*26

2)如果每次移動2(stride= 2),是不是隻要經過13次運算就到了邊緣所以輸出結果是 1*3*13*13

layer = nn.Conv2d(in_channels=1,out_channels=3,kernel_size=3,stride=2,padding=0)

3)如果增加了邊緣補充(padding=1)

layer = nn.Conv2d(in_channels=1,out_channels=3,kernel_size=3,stride=1,padding=1)

原始圖像可以理解爲30*30的大小,圖像需要移動30-(kernelsize-1)=28 步輸出是1*3*28*28 相同大小的圖像

如果每次移動兩步(stride=2)

layer = nn.Conv2d(in_channels=1,out_channels=3,kernel_size=3,stride=2,padding=1)

需要移動((28+1*2)-(3-1))/2 =14 也就是輸出大小是1*3*28*28 ,哈哈哈是不是發現了什麼規律呢?

大家可以根據我運算的過程總結如下公式:

       

 接下來請推導下經典網絡的卷積過程!

   堅持一件事情或許很難,但堅持下來一定很酷!^_^

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章