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