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