卷積
操作
略
輸入輸出尺寸變化
略
PyTorch實作
nn.Conv2d(in_channels,
out_channels,
kernel_size,
stride=1.
padding=0,
dilation=1,
groups=1,
bias=True,
padding_mode='zeros')
in_channels:輸入通道數
out_channels:輸出通道數,等價于卷積核個數
kernel_size:卷積核尺寸
stride:步長
padding:填充個數
dilation:空洞卷積大小
groups:分組卷積設定
bias:偏置,在卷積求和之后加上偏置的值
conv_layer = nn.Conv2d(3, 1, 3) # input:(i, o, size) weights:(o, i , h, w),輸入為三個通道,卷積核個數1個,輸出通道為1
nn.init.xavier_normal_(conv_layer.weight.data) # 卷積層初始化
# calculation
img_conv = conv_layer(img_tensor) # 圖片進入卷積層
轉置卷積
主要參考為知乎文章:
一問搞懂反卷積、轉置卷積
總結如下:
當我們用神經網路生成圖片的時候,經常需要將一些低解析度的圖片轉換為高解析度的圖片,目前有著一些插值方法進行處理:
- 最近鄰插值(Nearest neighbor interpolation)
- 雙線性插值(Bi-Linear interpolation)
- 雙立方插值(Bi-Cubic interpolation)
以上的這些方法都是一些插值方法,需要我們在決定網路結構的時候進行挑選,這些方法就像是人工特征工程一樣,并沒有給神經網路學習的余地,神經網路不能自己學習如何更好地進行插值,這個顯然是不夠理想的,
如果我們想要我們的網路可以學習到最好地上采樣的方法,我們這個時候就可以采用轉置卷積,這個方法不會使用預先定義的插值方法,它具有可以學習的引數,
關于名稱
轉置卷積**(Transposed Convolution)常常在一些文獻中也稱之為反卷積(Deconvolution)和部分跨越卷積(Fractionally-strided Convolution)**,因為稱之為反卷積容易讓人以為和數字信號處理中反卷積混起來,造成不必要的誤解,因此下文都將稱為轉置卷積,并且建議各位不要采用反卷積這個稱呼,
具體操作
首先對于卷積操作,以輸入4x4,卷積核3x3,輸出為2x2為例

一個卷積操作是一個多對一(many-to-one)的映射關系
轉置卷積的核心是維護一個一對多(one-to-many)的映射關系,每一個“對”實際上都需要維護一組權值,

需要注意的是:這里的轉置卷積矩陣的引數,不一定從原始的卷積矩陣中簡單轉置得到的,轉置這個操作只是提供了轉置卷積矩陣的形狀而已
總結
- 轉置卷積操作構建了和普通的卷積操作一樣的連接關系,只不過這個是從反向方向開始連接的,我們可以用它進行上采樣,
- 轉置卷積矩陣的引數是可以學習的,因此我們不需要一些人為預先定義的方法, 并不是意味著我們將一些現存的卷積矩陣簡單轉置并且使用其轉置后的值,
- 轉置卷積會導致生成影像中出現棋盤效應(checkerboard artifacts),這篇文章《Deconvolution and Checkerboard Artifacts》推薦了一種上采樣的操作(也就是插值操作),這個操作接在一個卷積操作后面以減少這種現象,如果你的主要目的是生成盡可能少棋盤效應的影像,那么這篇文章就值得你去閱讀,
- Q:轉置卷積矩陣的引數隨著訓練程序不斷被優化,但是它是在隨機初始化的基礎上進行優化,還是在原始卷積矩陣的基礎上進行優化;A:一般地進行隨機初始化即可
-
PyTorch實作
nn.ConvTranspose2d
nn.ConvTranspose2d(in_channels,
out_channels,
kernel_size,
stride=1,
padding=0,
output_padding=0,
groups=1,
bias=True,
dilation=1,
padding_mode='zores')
- in_channels:輸入通道數
- out_channels:輸出通道數
- kernel_size:卷積核尺寸
- stride:步長
- padding:填充個數
- dilation:空洞卷積大小
- groups:分組卷積設定
- bias:偏置
轉置卷積的使用:
conv_layer = nn.ConvTranspose2d(3, 1, 3, stride=2) # input:(i, o, size)
nn.init.xavier_normal_(conv_layer.weight.data)
# calculation
img_conv = conv_layer(img_tensor)
效果:

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/302323.html
標籤:其他
上一篇:【20210920】HMM入門
下一篇:linux 目錄介紹
