Torch - 卷积神经网络
卷积神经网络 (CNN) 是一种专门用于图像处理任务的深度学习模型。这些模型被设计为自动从输入图像中学习特征的空间层次结构,使每幅图像对于诸如对象检测、分割和图像分类等任务特别有效。
Torch 是一个基于 Lua 编程语言的开源机器学习库,它为训练和构建 CNN 提供了强大的框架。它以速度和灵活性而闻名,通过实现复杂的神经网络架构,它受到研究人员和开发人员的欢迎。
Torch 中 CNN 的核心构建包括卷积层、池化层、损失函数、激活函数和优化算法。空间卷积层将操作应用于提取特征,例如边缘、输入数据、模式、纹理。这些层是使用 Torch 中的 nn.SpatialConvolution 实现的。
架构
卷积神经网络具有特定的高级图像识别功能,不同的关键架构为这一进步做出了贡献。LeNet-5 是最早的 CNN 之一,它是在 MNISR 数据集上训练的,该数据集具有简单而有效的卷积层架构,然后是连接层。
imageNet 挑战赛提供了一个大型数据集和一个竞争平台,从而推动了 AlexNet 等强大模型的开发,这些模型致力于提高准确性。GoogleNet 引入了可提高更高精度的初始架构。
使用 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,这表明更好地收敛到最少的时期数。
要在 GPU 上运行脚本,需要以下代码 −
model = model.cuda() criterion = criterion.cuda() X = X.cuda() Y = Y.cuda()