卷積
在聽沈華偉老師講授GCN中,他回顧了卷積操作奈嘿,也讓我對卷積更深的認(rèn)識(shí)。例如他有講到吞加,卷積操作裙犹,實(shí)質(zhì)上輸入數(shù)組與卷積核作“卷積操作”尽狠,這里的卷積操作并不是我最初認(rèn)識(shí)的。即叶圃,卷積窗口從輸入數(shù)組的最左上方開始袄膏,按從左往右,從上往下的順序一次在輸入數(shù)組上滑動(dòng)掺冠,窗口中的輸入子數(shù)組與核數(shù)組按元素相乘并求和沉馆,得到輸出數(shù)組中相應(yīng)位置的元素。
經(jīng)過查閱資料呢德崭,上述操作叫做互相關(guān)運(yùn)算斥黑,即按序相乘并求和。而卷積操作又或者是沈華偉老師在講授中所提到的卷積眉厨,是由卷積公式得出锌奴,我們所利用的卷積核是與我們所定義(初始化)的卷積核不同,即上下翻轉(zhuǎn)憾股,左右翻轉(zhuǎn)缨叫,(翻轉(zhuǎn)180度)做卷積操作時(shí),輸入數(shù)組是與這樣的卷積核按序相乘并求和荔燎,應(yīng)為卷積要求對應(yīng)相乘元素耻姥,下標(biāo)和為1(將卷積核中心元素定位(0,0)),這樣就造成了老師所說的“輸入子數(shù)組中的左上角元素與卷積核右下角元素相乘”有咨。
在《動(dòng)手學(xué)深度學(xué)習(xí)》中琐簇,提到在卷積網(wǎng)絡(luò)中,我們通常使用互相關(guān)操作來代替卷積操作座享,是因?yàn)楹藬?shù)組是通過訓(xùn)練學(xué)習(xí)出來的婉商,卷積層無論使用互相關(guān)運(yùn)算還是卷積元素那都不會(huì)影響模型預(yù)測時(shí)的輸出。為了詳細(xì)證明這點(diǎn)呢渣叛,我們可以使用經(jīng)過互相關(guān)運(yùn)算學(xué)習(xí)得到的核數(shù)組丈秩,翻轉(zhuǎn)180度都,再與源輸入作卷積運(yùn)算淳衙,同樣可以得到原來互相關(guān)運(yùn)算得到的輸出數(shù)組蘑秽。因?yàn)榫矸e核是一個(gè)方塊,并且通常是關(guān)于中心對稱的箫攀,那么卷積核互相關(guān)運(yùn)算得到的結(jié)果就是一樣的肠牲。
小結(jié):1. 卷積層的核心計(jì)算是指互相關(guān)運(yùn)算,在簡單的形式下靴跛,它對輸入數(shù)據(jù)核卷積核作互相關(guān)運(yùn)算然后加上偏差缀雳。
2. 可以通過設(shè)計(jì)卷積核來檢測圖像中的邊緣。
3. 可以通過數(shù)據(jù)來學(xué)習(xí)卷積核梢睛。
填充和步幅
填充
在這之前要提到肥印,經(jīng)過卷積核輸出數(shù)組形狀為(nh-kh+1)*(nw - kw + 1)
填充是指在輸入 高和寬的兩側(cè)填充元素(通常式0元素)识椰。這里我們用ph表示在高的兩側(cè)一共填充行數(shù),在寬的兩側(cè)一共填充pw列深碱。那么輸出形狀就是(nh + ph - kh + 1)*(nw + pw - kw + 1)腹鹉。
很多情況下,我們會(huì)設(shè)置ph = kh - 1莹痢,pw = kw - 1來使輸入和輸出具有相同的寬和高。這樣方便在構(gòu)造網(wǎng)絡(luò)時(shí)推測每個(gè)層的輸出形狀墓赴。假設(shè)這里kh為技術(shù)竞膳,我們會(huì)在高的兩側(cè)分別填充ph/2行,如果kh為偶數(shù)诫硕,一種可能是在輸入的頂端一側(cè)填充ph/2(取上界)行坦辟,在底端一側(cè)填充[ph/2](取下界)行。在寬的兩側(cè)同理章办。
#輸入形狀為(8*8)
conv2d = nn.Conv2D(1, kernel_size=(5, 3), padding=(2, 1))
conv2d.shape #(8, 8)
步幅
卷積窗口從輸入數(shù)組的最左上方開始锉走,按左右,上下順序藕届,依次滑動(dòng)挪蹭,我們將每次滑動(dòng)的行數(shù)和列數(shù)成為步幅。默認(rèn)為1休偶。
這里用sh表示高上步幅梁厉,用sw表示寬上步幅。那么輸出形狀為[(nh + ph - kh + sh)/ sh]取下界 * [(nw + pw - kw + sw)/ sw]取下界踏兜。如果設(shè)置ph = kh - 1和pw = kw - 1词顾,那么輸出形狀簡化為[(nh -1 + sh) / sh]取下界 * [(nw - 1 + sw) / sw]取下界。此外如果輸入寬和高能分別別高和寬上的步幅整除碱妆,那么輸出形狀為(nh / sh) * (nw /sw)肉盹。
conv2d = nn.Conv2D(1, kernel_size=(3, 5), padding=(0, 1), strides=(3, 4))
conv2d.shape #(2, 2)
小結(jié):1. 填充可以增加輸出的高和寬。這常用來使輸出與輸入具有相同的高和寬疹尾。
2. 步幅可以減少輸出的高和寬上忍,例如輸出的高和寬僅為輸入的高和寬的1/n(n > 1)。
1*1卷積層
輸入和輸出具有相同的高纳本、寬睡雇,輸出中的每個(gè)元素來自輸入中在寬和高上相同位置的元素在不同通道之間的按權(quán)重累加。假設(shè)我們通道維當(dāng)作特征維饮醇,將高和寬維度上的元素當(dāng)作數(shù)據(jù)樣本它抱,那么1*1卷積層的作用和全連接層等價(jià)。
1*1卷積層被當(dāng)作保持高和寬度維度形狀不變的全連接層使用朴艰。于是观蓄,我們可以通過調(diào)整網(wǎng)絡(luò)層之間的通道數(shù)來控制模型復(fù)雜度混移。