深度學習是機器學習的一個分支,它是近幾十年來研究人員突破的關鍵步驟。深度學習實現的範例包括影象識別和語音識別等應用。
下面給出了兩種重要的深度神經網路 -
在本章中,我們將關注第一種型別,即折積神經網路(CNN)。
折積神經網路旨在通過多層陣列處理資料。這種型別的神經網路用於影象識別或面部識別等應用。
CNN與任何其他普通神經網路之間的主要區別在於CNN將輸入視為二維陣列並直接在影象上操作,而不是關注其他神經網路關注的特徵提取。
CNN的主導方法包括識別問題的解決方案。谷歌和Facebook等頂級公司已投資於認可專案的研發專案,以更快的速度完成活動。
每個折積神經網路都包含三個基本思想 -
下面來詳細了解每個術語。
CNN利用輸入資料中存在的空間相關性。神經網路的並行層中的每一層都連線一些輸入神經元。此特定區域稱為本地接收欄位。它只關注隱藏的神經元。隱藏的神經元將處理所提到的欄位內的輸入資料,而沒有實現特定邊界之外的變化。
生成本地相應欄位的圖表表示如下 -
在上圖中,我們觀察到每個連線都學習隱藏神經元的權重,並且具有從一個層到另一個層的移動的相關連線。在這裡,各個神經元不時地進行轉換。這個過程叫做「折積」。
從輸入層到隱藏特徵對映的連線的對映被定義為「共用權重」,並且包括的偏差稱為「共用偏差」。
折積神經網路使用在CNN宣告後立即定位的彙集層。它將來自使用者的輸入作為特徵對映,其來自折積網路並準備精簡的特徵對映。池化層有助於建立具有先前層的神經元的層。
以下步驟用於使用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)