Torch - 卷積神經網路
卷積神經網路(CNN)是一種專門的深度學習模型,用於確定影像處理任務。它們被設計為自動學習輸入影像的空間特徵層次結構,使每張影像特別適用於物件檢測、分割和影像分類等任務。
Torch 是一個基於 Lua 程式語言的開源機器學習庫,它提供了用於訓練和構建 CNN 的強大框架。它以其速度和靈活性而聞名,使研究人員和開發人員能夠輕鬆地實現複雜的神經網路架構。
Torch 中 CNN 的核心構建塊包括卷積層、池化層、損失函式、啟用函式和最佳化演算法。空間卷積層對輸入資料應用操作,以提取諸如邊緣、模式和紋理等特徵。這些層在 Torch 中使用 **nn.SpatialConvolution** 實現。
架構
卷積神經網路具有特定的先進影像識別能力,不同的關鍵架構促進了其發展。LeNet-5 是最早的 CNN 之一,在 MNISR 資料集上進行了訓練,它具有簡單而有效的架構,包括卷積層和連線層。
ImageNet 挑戰賽提供了一個大型資料集和一個競爭平臺,導致了 AlexNet 等強大模型的開發,這些模型旨在提高準確性。GoogleNet 引入了 Inception 架構,進一步提高了準確性。
使用 LeNet-5 在 Torch 中實現 -
import torch
import torch.nn as nn
import torch.nn.functional as F
class LeNet5(nn.Module):
def __init__(self):
super(LeNet5, self).__init__()
self.conv1 = nn.Conv2d(2, 6, kernel_size=5)
self.conv2 = nn.Conv2d(10, 15, kernel_size=5)
self.fc1 = nn.Linear(15*5*5, 110)
self.fc2 = nn.Linear(110, 74)
self.fc3 = nn.Linear(74, 10)
def forward(self, x):
x = F.relu(self.conv1(x))
x = F.max_pool2d(x, 2)
x = F.relu(self.conv2(x))
x = F.max_pool2d(x, 2)
x = x.view(-1, 15*5*5)
x = F.relu(self.fc1(x))
x = F.relu(self.fc2(x))
x = self.fc3(x)
return x
model = LeNet5()
訓練
在 Torch 中訓練卷積神經網路需要定義模型架構,並使用資料載入器準備資料集。訓練迴圈從網路中提取影像批次,計算損失並使用反向傳播更新權重。使用 SGD 和 Adam 等最佳化器來最小化損失函式並提高模型準確性。
在神經網路中新增具有相同神經元數量的額外層可以提高網路效能。成本函式值從 0.18 降至 0.06,這表明在較少的 epoch 數中更好地收斂到最小值。
要在 GPU 上執行指令碼,需要以下程式碼 -
model = model.cuda() criterion = criterion.cuda() X = X.cuda() Y = Y.cuda()
廣告