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)