pytorch框架学习(3)torch.nn.functional模块和nn.Module模块

快到七夕了,我们继续学习!

torch.nn.functional模块和nn.Module模块

如何用以上两个模块更加方便地构建出网络的架构

本次使用Mnist数据集进行分类任务的实例进行学习

首先,让我们了解下路径处理库pathlib ,这是一个面向对象的路径操作文件,可以轻松的获取当前文件夹路径(a = Path.cwd())、Home路径(a = Path.home()) 、父目录( a.parent);可以对文件名进行一系列操作; 可以进行文件操作、可以进行文件夹操作、可以进行路径拼接等等。官方文档

函数 注释
name 目录的最后一个部分
suffix 目录中最后一个部分的扩展名
suffixes 返回多个扩展名列表
stem 目录最后一个部分,没有后缀
with_name(name) 替换目录最后一个部分并返回一个新的路径
with_suffix(suffix) 替换扩展名,返回新的路径,扩展名存在则不变

1首先 我们把图像下载、解压,并读一张看看

这里其实有必要简单学习一下matplotlib的pyplot,在这先占个坑

在这里插入图片描述
可以看到数据集的shape是(50000, 784) ,其中50000是样本数,784是28281的展开


在这里插入图片描述
x_train[]就是灰度值图像, y_train[]就是类别。
分类任务的标签应该是一个独热编码, 我们得到结果的是每一个类别概率的概率值。

2其次我们准备训练

复习一下最基本的训练过程: 数据读入、设置是否需要记录梯度–>搭建网络结构–>设置超参数、损失、优化器等–>进行数据训练(读取-zero_grad()-前向传播-计算Loss-反向传播更新参数-打印过程结果-权重保存)

这里我们首先使用[map()函数1](https://blog.csdn.net/wangxinxin1992816/article/details/124537869?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522165944879516782395324210%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%257D&request_id=165944879516782395324210&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2alltop_click~default-1-124537869-null-null.142v39pc_rank_v38&utm_term=map%28%EF%BC%89&spm=1018.2226.3001.4187),将数据都转化为tensor的格式。
在这里插入图片描述



下面我们进入今天主要的内容
首先我们简单说一下什么时候用nn.Moudle,什么时候用nn.functional呢?
一般情况下如果模型中有带学习的参数的 最好使用nn.Moudle,其他情况使用nn.functional会相对简单一些。 eg.全连接层、卷积层等最好用nn.Moudle, 激活函数、损失函数 就可以用nn.functional

torch.nn.fuction方法

在这里插入图片描述

torch.nn.Moudel方法

  • 必须继承nn.Module且在其构造函数中需调用nn.Module的构造函数
  • 无需写反向传播函数,nn.Module能够利用autograd自动实现反向传播
  • Module中的可学习参数可以通过named_parameters()或者parameters()返回迭代器

在这里插入图片描述
这里不光把网络结构定义好了,代码内部也同时帮我们把权重和偏置初始化了。



  1. map() 方法创建一个新数组,这个新数组由原数组中的每个元素都调用一次提供的函数后的返回值组成。 ↩︎

猜你喜欢

转载自blog.csdn.net/vibration_xu/article/details/126130570