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()
廣告

© . All rights reserved.