快到七夕了,我们继续学习!
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()返回迭代器

这里不光把网络结构定义好了,代码内部也同时帮我们把权重和偏置初始化了。
map() 方法创建一个新数组,这个新数组由原数组中的每个元素都调用一次提供的函数后的返回值组成。 ↩︎
这篇博客介绍了在七夕节期间如何使用PyTorch的torch.nn.functional和nn.Module构建Mnist数据集的分类网络。首先讲解了pathlib库的使用,然后通过map()函数将数据转换为tensor。内容涵盖了数据预处理、基本训练流程、模型构建以及何时使用nn.Module和nn.functional的区别。nn.Module适用于包含可学习参数的层,而nn.functional适合激活函数和损失函数。最后,文章展示了网络结构定义和权重初始化的过程。
2619

被折叠的 条评论
为什么被折叠?



