PyTorch中的nn.Conv1d与nn.Conv2d
本文主要介紹PyTorch中的nn.Conv1d和nn.Conv2d方法,并給出相應代碼示例,加深理解。
一維卷積nn.Conv1d
一般來說,一維卷積nn.Conv1d用于文本數據,只對寬度進行卷積,對高度不卷積。通常,輸入大小為word_embedding_dim * max_length,其中,word_embedding_dim為詞向量的維度,max_length為句子的最大長度。卷積核窗口在句子長度的方向上滑動,進行卷積操作。
定義
class torch.nn.Conv1d(in_channels, out_channels, kernel_size, stride=1, padding=0, dilation=1, groups=1, bias=True)
主要參數說明:
- in_channels:在文本應用中,即為詞向量的維度
- out_channels:卷積產生的通道數,有多少個out_channels,就需要多少個一維卷積(也就是卷積核的數量)
- kernel_size:卷積核的尺寸;卷積核的第二個維度由in_channels決定,所以實際上卷積核的大小為kernel_size * in_channels
- padding:對輸入的每一條邊,補充0的層數
代碼示例
輸入:批大小為32,句子的最大長度為35,詞向量維度為256
目標:句子分類,共2類
假設window_size = [3, 4, 5, 6],即共有四個卷積核,基于上述代碼,具體計算過程如下:
一維卷積過程圖解
Yoon Kim在2014年發表的論文Convolutional Neural Networks for Sentence Classification中,給出了一個非常形象的圖,詮釋了文本卷積模型的框架,如下所示。
nn.Conv1d詳細圖解(使用多個卷積核)
二維卷積nn.Conv2d
一般來說,二維卷積nn.Conv2d用于圖像數據,對寬度和高度都進行卷積。
定義
class torch.nn.Conv2d(in_channels, out_channels, kernel_size, stride=1, padding=0, dilation=1, groups=1, bias=True)
代碼示例
假設現有大小為32 x 32的圖片樣本,輸入樣本的channels為1,該圖片可能屬于10個類中的某一類。CNN框架定義如下:
class CNN(nn.Module):def __init__(self):nn.Model.__init__(self)self.conv1 = nn.Conv2d(1, 6, 5) # 輸入通道數為1,輸出通道數為6self.conv2 = nn.Conv2d(6, 16, 5) # 輸入通道數為6,輸出通道數為16self.fc1 = nn.Linear(5 * 5 * 16, 120)self.fc2 = nn.Linear(120, 84)self.fc3 = nn.Linear(84, 10)def forward(self, x):# 輸入x -> conv1 -> relu -> 2x2窗口的最大池化x = self.conv1(x)x = F.relu(x)x = F.max_pool2d(x, 2)# 輸入x -> conv2 -> relu -> 2x2窗口的最大池化x = self.conv2(x)x = F.relu(x)x = F.max_pool2d(x, 2)# view函數將張量x變形成一維向量形式,總特征數不變,為全連接層做準備x = x.view(x.size()[0], -1)x = F.relu(self.fc1(x))x = F.relu(self.fc2(x))x = self.fc3(x)return x網絡整體結構:[conv + relu + pooling] * 2 + FC * 3
原始輸入樣本的大小:32 x 32 x 1
nn.Conv2d詳細圖解
注意
總結
以上是生活随笔為你收集整理的PyTorch中的nn.Conv1d与nn.Conv2d的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: PyTorch:MNIST数据集手写数字
- 下一篇: 如何理解卷积神经网络(CNN)中的卷积和