您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息
免费发信息
三六零分类信息网 > 果洛分类信息网,免费分类信息发布

教程 | 从头开始了解PyTorch的简单实现

2023/10/27 19:34:26发布27次查看
本教程展示了如何从了解张量开始到使用 pytorch 训练简单的神经网络,是非常基础的 pytorch 入门资源。pytorch 建立在 python 和 torch 库之上,并提供了一种类似 numpy 的抽象方法来表征张量(或多维数组),它还能利用 gpu 来提升性能。本教程的代码并不完整,详情请查看原 jupyter notebook 文档。
pytorch 使入门深度学习变得简单,即使你这方面的背景知识不太充足。至少,知道多层神经网络模型可视为由权重连接的节点图就是有帮助的,你可以基于前向和反向传播,利用优化过程(如梯度计算)从数据中估计权重。
必备知识:该教程假设读者熟悉 python 和 numpy。必备软件:在运行原 jupyter notebook 之前你需要安装 pytorch。原 notebook 有代码单元格可供验证你是否做好准备。必备硬件:你需要安装 nvidia gpu 和 cuda sdk。据报告此举可能实现 10-100 的加速。当然,如果你没有进行此设置,那么你仍然可以在仅使用 cpu 的情况下运行 pytorch。但是,记住,在训练神经网络模型时,生命苦短!所以还是尽可能使用 gpu 吧!
项目地址:pose([ transforms.totensor(), transforms.normalize((0.1307,), (0.3081,)) ])), batch_size=batch_num_size, shuffle=true) test_loader = torch.utils.data.dataloader( datasets.mnist('data',train=false, transform=transforms.compose([
3. pytorch 中的 lenet 卷积神经网络(cnn)
现在我们从头开始创建第一个简单神经网络。该网络要执行图像分类,识别 mnist 数据集中的手写数字。这是一个四层的卷积神经网络(cnn),一种分析 mnist 数据集的常见架构。该代码来自 pytorch 官方教程,你可以在这里(http://pytorch.org/tutorials/)找到更多示例。
我们将使用 torch.nn 库中的多个模块:
1. 线性层:使用层的权重对输入张量执行线性变换;
2. conv1 和 conv2:卷积层,每个层输出在卷积核(小尺寸的权重张量)和同样尺寸输入区域之间的点积;
3. relu:修正线性单元函数,使用逐元素的激活函数 max(0,x);
4. 池化层:使用 max 运算执行特定区域的下采样(通常 2x2 像素);
5. dropout2d:随机将输入张量的所有通道设为零。当特征图具备强相关时,dropout2d 提升特征图之间的独立性;
6. softmax:将 log(softmax(x)) 函数应用到 n 维输入张量,以使输出在 0 到 1 之间。
class lenet(nn.module):def __init__(self): super(lenet,self).__init__() self.conv1 = nn.conv2d(1,10,kernel_size=5) self.conv2 = nn.conv2d(10,20,kernel_size=5) self.conv2_drop = nn.dropout2d() self.fc1 = nn.linear(320,50) self.fc2 = nn.linear(50,10) def forward(self,x): x = f.relu(f.max_pool2d(self.conv1(x),2)) x = f.relu(f.max_pool2d(self.conv2_drop(self.conv2(x)),2)) x = x.view(-1, 320) x = f.relu(self.fc1(x)) x = f.dropout(x, training=self.training) x = self.fc2(x) return f.log_softmax(x, dim=1)
创建 lenet 类后,创建对象并移至 gpu:
model = lenet() model.cuda() print ('mnist_net model:\\n')print (model)mnist_net model: lenet( (conv1): conv2d(1, 10, kernel_size=(5, 5), stride=(1, 1)) (conv2): conv2d(10, 20, kernel_size=(5, 5), stride=(1, 1)) (conv2_drop): dropout2d(p=0.5) (fc1): linear(in_features=320, out_features=50, bias=true) (fc2): linear(in_features=50, out_features=10, bias=true))
要训练该模型,我们需要使用带动量的 sgd,学习率为 0.01,momentum 为 0.5。
criterion = nn.crossentropyloss()optimizer = optim.sgd(model.parameters(),lr = 0.005, momentum = 0.9)
仅仅需要 5 个 epoch(一个 epoch 意味着你使用整个训练数据集来更新训练模型...
果洛分类信息网,免费分类信息发布

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录