通俗理解tf.nn.conv2d() tf.nn.conv3d( )参数的含义 pytorhc 卷积
20210609
例如(3,3,(3,7,7))表示的是輸入圖像的通道數是3,輸出圖像的通道數是3,(3,7,7)表示過濾器每次處理3幀圖像,卷積核的大小是3 x 7 x 7。
https://blog.csdn.net/gaoxiaoxue_/article/details/107978094
https://blog.csdn.net/weixin_42769131/article/details/104826953
https://www.jianshu.com/p/6e1ef63615f8
問題1:關于pytorch 3D 卷積函數:Conv3d
torch.nn.Conv3d(in_channels, out_channels, kernel_size, stride=1, padding=0, dilation=1, groups=1, bias=True)
3D卷積神經網絡多用于高維度圖像數據,例如N幀的視頻,由于看參數比較抽象,一般人難以理解具體含義,因此,我以一段100幀視頻為例,每幀視頻為100010003的彩色圖像,1000*1000為圖像大小,3為圖像的RGB 3個通道。
參數說明:
in_channels(int) – 輸入信號的通道(解釋:每幀圖像的通道數,本例為3)
out_channels(int) – 卷積產生的通道(解釋:對應于用了多少個卷積核,如果1個卷積核,就是1,如果輸出20,那就是20個卷積核)
kernel_size(int or tuple) - 卷積核的尺寸
stride(int or tuple, optional) - 卷積步長(每次核移動的步長)stride=1 表示stride=(1,1,1),在三維方向上步長是1,在寬和高上步長也是1。
padding(int or tuple, optional) - 輸入的每一條邊補充0的層數(主要是對圖像周圍的數據如何處理)padding=0 表示padding=(0,0,0)表示在三維方向上不padding,在寬和高上也不padding。
dilation(int or tuple, optional) – 卷積核元素之間的間距
groups(int, optional) – 從輸入通道到輸出通道的阻塞連接數
bias(bool, optional) - 如果bias=True,添加偏置
例如(3,3,(3,7,7))表示的是輸入圖像的通道數是3,輸出圖像的通道數是3,(3,7,7)表示過濾器每次處理3幀圖像,卷積核的大小是3 x 7 x 7
注意:3D卷積的輸入是5維的tensor
三維卷積層, 輸入數據的尺度是(N, C_in,D,H,W)
舉例:(1,3,100,1000,1000)表示輸入1個視頻,每個視頻中圖像的通道數是3,每個視頻中包含的圖像數是100,圖像的大小是1000 x 1000。
輸出尺度(N,C_out,D_out,H_out,W_out)
1,10,100,1000,1000)表示輸出1個視頻,每個視頻中圖像的通道數是10,每個視頻中包含的圖像數是100,圖像的大小是1000 x 1000。
(參考文獻:Pytorch學習筆記15----nn.Conv2d與Conv3d參數理解、單通道與多通道卷積理解 - 雨后觀山色 - 博客園)
問題2:3D 卷積核大小說明
3D卷積操作如圖2所示,同樣分為單通道和多通道,且只使用一個filter,輸出一個channel。
其中,針對單通道,與2D卷積不同之處在于,輸入圖像多了一個 depth 維度,故輸入大小為(1, depth, height, width),卷積核也多了一個k_d維度,因此卷積核在輸入3D圖像的空間維度(height和width維)和depth維度上均進行滑窗操作,每次滑窗與 (k_d, k_h, k_w) 窗口內的values進行相關操作,得到輸出3D圖像中的一個value。
針對多通道,輸入大小為(多通道數, depth, height, width),則與2D卷積的操作一樣,每次滑窗與多個channels上的 (k_d, k_h, k_w) 窗口內的所有values進行相關操作,得到輸出3D圖像中的一個value。
https://blog.csdn.net/g11d111/article/details/82665265
PyTorch學習筆記(9)——nn.Conv2d和其中的padding策略
通俗理解tf.nn.conv2d()參數的含義
不分享的知識毫無意義關注字數 326閱讀 1,537首先以tensorflow中最常用的卷積神經網絡為案例進行說明:
tf.nn.conv2d(input,filter,strides,padding,use_cudnn_on_gpu=True,data_format='NHWC',dilations=[1, 1, 1, 1],name=None)
首先input必須是一個四維的tensor,以28??28??1的圖像為案例進行說明,首先需要轉換為4維,需要加入圖像樣本的個數,假設為100張,變為[100,28,28,1],直觀理解為100張 2828的只有一個通道的圖片。
我們再來看filter,即卷積神經網絡的濾波器,必須與input維度相同,[3,3,1,2],通俗理解為33的卷積核2個,只作用于1個通道,即input的最后一個參數和filter的倒數第二個參數是相同的。
第三個參數是stride,控制卷積核的移動步數,與上述兩個參數相同,也是四維的,[1,1,1,1],其中第一個1和最后一個1是固定值,需要改變的是中間的兩個數,即在x軸和y軸的移動步長。
第四個參數是padding,只有兩個取值,'SAME'和'VALID',第一個是填充邊界,第二個是當不足以移動時直接舍棄。
其他參數選擇默認即可。
總結
以上是生活随笔為你收集整理的通俗理解tf.nn.conv2d() tf.nn.conv3d( )参数的含义 pytorhc 卷积的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Pytorch两种模型保存方式
- 下一篇: 矩阵的卷积核运算(一个简单小例子的讲解)