python卷积神经网络多元分类_卷积神经网络分类MNIST.pdfVIP

python卷积神经网络多元分类_卷积神经网络分类MNIST.pdf

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
python卷积神经⽹络多元分类_卷积神经⽹络分类MNIST # 卷积神经⽹络分类MNIST 之前两期简单介绍了神经⽹络的基础知识(由于我懒,⼀张插图都没有上)。 这⼀期我们来介绍⼀个简单的实现。基于Pytorch,训练⼀个简单的卷积神经⽹络⽤于分类MNIST数据集。同样ipynb⽂件到我的群⾥下 载。后边写得⽐较多了以后考虑整理⼀下放到Github上。 数据集的导⼊之前已经介绍过,所以就不重复了。 ## 神经⽹络的搭建 Pytorch中的神经⽹络搭建都要构造成类。类中确定了神经⽹络的结构。训练的时候就要构造⼀个具体的实例。训练好实例后,还要⽤这个 实例去预测。 ```python # 定义⽹络 import torch.nn as nn import torch.nn.functional as F # 卷积之后,全连接层输⼊向量的长度。 # 由卷积结果的通道数乘以卷积结果的长再乘以卷积结果的宽得到。 # 这⾥没有⽤sigmoid函数,⽽是使⽤了softmax层 FC_SIZE = 16*2*2 class ClassificationMNIST(nn.Module): def __init__(self): super(ClassificationMNIST,self).__init__() self.conv=nn.Sequential(nn.Conv2d(in_channels=1, out_channels=4, kernel_size=3, stride=1,padding=2),nn.ReLU(), nn.MaxPool2d(kernel_size=2), nn.Conv2d(4, 8, 3, 1),nn.ReLU(), nn.MaxPool2d(kernel_size=2), nn.Conv2d(8, 16, 3, 1),nn.ReLU(), nn.MaxPool2d(kernel_size=2)) #self.fc = nn.Linear(FC_SIZE,10) self.fc = nn.Sequential(nn.Linear(FC_SIZE, 10), nn.Softmax()) def forward(self, x): x = self.conv(x) x = x.view(-1,FC_SIZE) #output = torch.sigmoid(x) output = self.fc(x) return output ``` 基本的神经⽹络需要写两个⽅法。在`__init__`中列出所有要⽤到的卷积层。注意这⾥的卷积层,全连接层可以⾃⼰写。但是更推荐直接调 ⽤`torch.nn`中的。 这⾥的`nn.Conv2d`等函数,的返回值实际上也是⼀个可调⽤对象。⽽且你构造的神经⽹络类的实例本⾝也是可调⽤对象。 第⼆个必须写的⽅法是`forward`⽅法。这个⽅法表⽰当你的神经⽹络对象被调⽤的时候,要执⾏的⽅法。 ## 神经⽹络的训练 在训练开始之前要设置⼏个参数。 ```python # 初始化⽹络,及相关函数 cnn=ClassificationMNIST().to(device) EPOCH = 10 # 学习率是个超参数,这东西是实验出来的 LR = 0.001 # 定义损失函数和优化器 optimizer = torch.optim.Adam(cnn.parameters(), lr=LR) loss_func = torch.nn.CrossEntropyLoss(size_average=False) ``` 其中的`loss_func`是损失函数。`optimizer`是优化器。损失函数就如前边所说是,判定我们的⽹络和⽬标函数近似程度的。`optimizer` 则确定梯度更新的策略。它们都有很多选择,这⾥我们就先直接⽤,以后再讨论有哪些选择,以及不同选择的优劣。 接下来的训练过程其实就是⼀个⼤循环。由于⼀般图像数据量巨⼤,我们不能⼀次⽤上所有的数据。我们就把整个图像数据集分为若⼲ batch。通过内层循环遍历所有数据。循环体中则是每次正向求出⽹络的分类结果,然后求和正确结果之间的loss,然后逆向求导,更新参 数。 可以看到我的代码中,出了正向计算和反向传播,还多了⼀些内容。这些是⽤于隔⼀段时间,计算⼀下在测试集上的预测正确率,然后输 出的。防⽌我们在等神经⽹络出结果的过程中太过⽆聊。 ```python # 训练 for epoch in range(EPOCH): for i,data in enumerate(train_loader): # 获取数据

文档评论(0)

134****3224 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档