深度學習是機器學習的一個分支,它是近幾十年來研究人員突破的關鍵步驟。深度學習實現的示例包括圖像識別和語音識別等應用。
下麵給出了兩種重要的深度神經網路 -
- 卷積神經網路
- 遞歸神經網路。
在本章中,我們將關注第一種類型,即卷積神經網路(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)