PyTorch卷積神經網路

深度學習是機器學習的一個分支,它是近幾十年來研究人員突破的關鍵步驟。深度學習實現的示例包括圖像識別和語音識別等應用。

下麵給出了兩種重要的深度神經網路 -

  • 卷積神經網路
  • 遞歸神經網路。

在本章中,我們將關注第一種類型,即卷積神經網路(CNN)。

卷積神經網路

卷積神經網路旨在通過多層陣列處理數據。這種類型的神經網路用於圖像識別或面部識別等應用。

CNN與任何其他普通神經網路之間的主要區別在於CNN將輸入視為二維陣列並直接在圖像上操作,而不是關注其他神經網路關注的特徵提取。

CNN的主導方法包括識別問題的解決方案。穀歌和Facebook等頂級公司已投資於認可專案的研發專案,以更快的速度完成活動。

每個卷積神經網路都包含三個基本思想 -

  • 本地接收字段
  • 卷積

下麵來詳細瞭解每個術語。

1. 本地接收字段

CNN利用輸入數據中存在的空間相關性。神經網路的併發層中的每一層都連接一些輸入神經元。此特定區域稱為本地接收字段。它只關注隱藏的神經元。隱藏的神經元將處理所提到的字段內的輸入數據,而沒有實現特定邊界之外的變化。

生成本地相應字段的圖表表示如下 -

2. 卷積

在上圖中,我們觀察到每個連接都學習隱藏神經元的權重,並且具有從一個層到另一個層的移動的相關連接。在這裏,各個神經元不時地進行轉換。這個過程叫做“卷積”。

從輸入層到隱藏特徵映射的連接的映射被定義為“共用權重”,並且包括的偏差稱為“共用偏差”。

3. 池

卷積神經網路使用在CNN聲明後立即定位的彙集層。它將來自用戶的輸入作為特徵映射,其來自卷積網路並準備精簡的特徵映射。池化層有助於創建具有先前層的神經元的層。

4. PyTorch實現

以下步驟用於使用PyTorch創建卷積神經網路。

第1步

導入必要的包以創建簡單的神經網路。

from torch.autograd import Variable
import torch.nn.functional as F

第2步
使用卷積神經網路的批處理表示創建一個類。輸入x的批量形狀的尺寸為(3,32,32)

class SimpleCNN(torch.nn.Module):
   def __init__(self):
      super(SimpleCNN, self).__init__()
      #Input channels = 3, output channels = 18
      self.conv1 = torch.nn.Conv2d(3, 18, kernel_size = 3, stride = 1, padding = 1)
      self.pool = torch.nn.MaxPool2d(kernel_size = 2, stride = 2, padding = 0)
      #4608 input features, 64 output features (see sizing flow below)
      self.fc1 = torch.nn.Linear(18 * 16 * 16, 64)
      #64 input features, 10 output features for our 10 defined classes
      self.fc2 = torch.nn.Linear(64, 10)

第3步

計算從(3,32,32)到(18,32,32)的第一卷積大小變化的啟動。

尺寸的大小從(18,32,32)變為(18,16,16)。重塑神經網路輸入層的數據維度,因為其大小從(18,16,16)變為(1,4608)。

回想一下-1從另一個給定的維度推斷出這個維度。

def forward(self, x):
   x = F.relu(self.conv1(x))
   x = self.pool(x)
   x = x.view(-1, 18 * 16 *16)
   x = F.relu(self.fc1(x))
   #Computes the second fully connected layer (activation applied later)
   #Size changes from (1, 64) to (1, 10)
   x = self.fc2(x)
   return(x)

上一篇: PyTorch線性回歸 下一篇: PyTorch遞歸神經網路