这是刘二大人系列课程笔记的倒数第二个博客了,介绍的是多分类器的原理和代码实现,下一个笔记就是basicCNN和advancedCNN了;

写在前面:

  • 这节课的内容,主要是两个部分的修改:

    • 一是数据集:直接采用了内置的MNIST的数据集,那dataloaderdataset自然也是内置的,那也就不用自己写dataset再去继承Dataset类;
    • 再有是把traintest写成了函数形式,直接在main函数当中调用即可;
  • 除了本节课想要实现的代码,刘老师在本节课前一半讲了这些内容:
    • 下了很大功夫讲清楚了softmax这个函数的机理:y_pred = np.exp(z) / np.exp(z).sum();
    • 还有交叉熵损失函数是什么一回事,非常流畅简洁地给我讲懂了这个公式的意思:loss = (- y * np.log(y_pred)).sum();
    • 根据这两个函数的理论,用numpy的计算法则把公式实现了,之后才去调用了pytorch当中写好了的函数;
    • 还强调了NLL-Loss的概念,并且留了思考题,为什么会:CrossEntropyLoss <==> LogSoftmax + NLLLoss?
    • 到了pytorch当中,里面有SoftmaxSoftmax_log两个函数版本;
    • 总结来说,刘老师的课讲的非常透彻,不过,还是那句话,这并不是初学者一遍就能听懂的,要么有点基础,要么就得多听几遍。我想,最关键的要把握住:这节课讲了什么,是从numpy开始实现,还是调用pytorch调用已经写好的函数直接实现;他们的原理是一样,不过在代码里的表示还有很大不同。这只是我的一点感受。最后,再次感谢刘洪普老师的分享,收获非常大,受教了!

Lecture09 —— SoftmaxClassifier 多分类器的实现

说在前面:

  • 这节课的内容,主要是两个部分的修改:

    • 一是数据集:直接采用了内置的MNIST的数据集,那dataloaderdataset自然也是内置的,那也就不用自己写dataset再去继承Dataset类;
    • 再有是把traintest写成了函数形式,直接在main函数当中调用即可;
  • 除了本节课想要实现的代码,刘老师在本节课前一半讲了这些内容:
    • 下了很大功夫讲清楚了softmax这个函数的机理:y_pred = np.exp(z) / np.exp(z).sum();
    • 还有交叉熵损失函数是什么一回事,非常流畅简洁地给我讲懂了这个公式的意思:loss = (- y * np.log(y_pred)).sum();
    • 根据这两个函数的理论,用numpy的计算法则把公式实现了,之后才去调用了pytorch当中写好了的函数;
    • 还强调了NLL-Loss的概念,并且留了思考题,为什么会:CrossEntropyLoss <==> LogSoftmax + NLLLoss?
    • 到了pytorch当中,里面有SoftmaxSoftmax_log两个函数版本;

完整代码:

#!usr/bin/env python
# -*- coding:utf-8 _*-
"""
@author: 24_nemo
@file: 09_SoftmaxClassifier_handType.py
@time: 2022/04/11
@desc:
"""import torch
from torchvision import transforms
from torchvision import datasets
from torch.utils.data import DataLoader
import torch.nn.functional as F
import torch.optim as optimbatch_size = 64
transform = transforms.Compose([transforms.ToTensor(),transforms.Normalize((0.1307,), (0.3081,))
])train_dataset = datasets.MNIST(root='../dataset/mnist',train=True,download=True,transform=transform)train_loader = DataLoader(train_dataset,shuffle=True,batch_size=batch_size)test_dataset = datasets.MNIST(root='../dataset/mnist/',train=False,download=True,transform=transform)test_loader = DataLoader(test_dataset,shuffle=False,batch_size=batch_size)class Net(torch.nn.Module):def __init__(self):super(Net, self).__init__()self.l1 = torch.nn.Linear(784, 512)self.l2 = torch.nn.Linear(512, 256)self.l3 = torch.nn.Linear(256, 128)self.l4 = torch.nn.Linear(128, 64)self.l5 = torch.nn.Linear(64, 10)def forward(self, x):x = x.view(-1, 784)x = F.relu(self.l1(x))x = F.relu(self.l2(x))x = F.relu(self.l3(x))x = F.relu(self.l4(x))return self.l5(x)model = Net()criterion = torch.nn.CrossEntropyLoss()
optimizer = optim.SGD(model.parameters(), lr=0.01, momentum=0.5)def train(epoch):running_loss = 0.0for batch_size, data in enumerate(train_loader, 0):inputs, target = dataoptimizer.zero_grad()  # 在优化器优化之前,进行权重清零;outputs = model(inputs)loss = criterion(outputs, target)loss.backward()optimizer.step()running_loss += loss.item()if batch_size % 300 == 299:print('[%d, %5d] loss: %.3f' % (epoch + 1, batch_size + 1, running_loss / 300))def test():correct = 0total = 0with torch.no_grad():for data in test_loader:images, labels = dataoutputs = model(images)_, predicted = torch.max(outputs.data, dim=1)total += labels.size(0)correct += (predicted == labels).sum().item()print('Accuracy on test set: %d %%' % (100 * correct / total))if __name__ == '__main__':for epoch in range(100):train(epoch)test()

运行结果(截图时仍在运行):

这些东西记下来:

  • 这就是开头说的,利用numpy的计算规则,把交叉熵函数实现的例子,代码里还包含softmax的函数实现,虽然知识一行代码,却解开了我困扰很久不能理解的问题。
import torch
y = torch.LongTensor([0])
z = torch.Tensor([[0.2, 0.1, -0.1]])
criterion = torch.nn.CrossEntropyLoss()
loss = criterion(z, y)
print(loss)

结果:

上一篇:

【Pytorch深度学习实践】B站up刘二大人之Dataset&DataLoader-代码理解与实现(7/9)

下一篇:

【Pytorch深度学习实践】B站up刘二大人之BasicCNN & Advanced CNN -代码理解与实现(9/9)

目录:

【Pytorch深度学习实践】B站up刘二大人课程笔记——目录与索引(已完结)

【Pytorch深度学习实践】B站up刘二大人之SoftmaxClassifier-代码理解与实现(8/9)相关推荐

  1. 【Pytorch深度学习实践】B站up刘二大人课程笔记——目录与索引(已完结)

    从有代码的课程开始讨论 [Pytorch深度学习实践]B站up刘二大人之LinearModel -代码理解与实现(1/9) [Pytorch深度学习实践]B站up刘二大人之 Gradient Desc ...

  2. 【Pytorch深度学习实践】B站up刘二大人之 Gradient Descend-代码理解与实现(2/9)

    开篇几句题外话: 以往的代码,都是随便看看就过去了,没有这样较真过,以至于看了很久的深度学习和Python,都没有能够形成编程能力: 这次算是废寝忘食的深入进去了,踏实地把每一个代码都理解透,包括其中 ...

  3. 【Pytorch深度学习实践】B站up刘二大人之BasicCNN Advanced CNN -代码理解与实现(9/9)

    这是刘二大人系列课程笔记的 最后一个笔记了,介绍的是 BasicCNN 和 AdvancedCNN ,我做图像,所以后面的RNN我可能暂时不会花时间去了解了: 写在前面: 本节把基础个高级CNN放在一 ...

  4. 《PyTorch 深度学习实践》第10讲 卷积神经网络(基础篇)

    文章目录 1 卷积层 1.1 torch.nn.Conv2d相关参数 1.2 填充:padding 1.3 步长:stride 2 最大池化层 3 手写数字识别 该专栏内容为对该视频的学习记录:[&l ...

  5. 《PyTorch深度学习实践》学习笔记 【2】

    <PyTorch深度学习实践>学习笔记 [2] 学习资源: <PyTorch深度学习实践>完结合集 二.线性模型 2.1 概念: 2.1.1 数据集和测试集 ​ 数据集拿到后一 ...

  6. PyTorch 深度学习实践 GPU版本B站 刘二大人第11讲卷积神经网络(高级篇)GPU版本

    第11讲 卷积神经网络(高级篇) GPU版本源代码 原理是基于B站 刘二大人 :传送门PyTorch深度学习实践--卷积神经网络(高级篇) 这篇基于博主错错莫:传送门 深度学习实践 第11讲博文 仅在 ...

  7. 笔记|(b站)刘二大人:pytorch深度学习实践(代码详细笔记,适合零基础)

    pytorch深度学习实践 笔记中的代码是根据b站刘二大人的课程所做的笔记,代码每一行都有注释方便理解,可以配套刘二大人视频一同使用. 用PyTorch实现线性回归 # 1.算预测值 # 2.算los ...

  8. 【PyTorch深度学习实践 | 刘二大人】B站视频教程笔记

    资料 [参考:<PyTorch深度学习实践>完结合集_哔哩哔哩_bilibili] [参考 分类专栏:PyTorch 深度学习实践_错错莫的博客-CSDN博客] 全[参考 分类专栏:PyT ...

  9. 刘二大人 PyTorch深度学习实践 笔记 P6 逻辑斯蒂回归

    刘二大人 PyTorch深度学习实践 笔记 P6 逻辑斯蒂回归 P6 逻辑斯蒂回归 1.torchversion 提供的数据集 2.基本概念 3.代码实现 P6 逻辑斯蒂回归 1.torchversi ...

最新文章

  1. electron node 版本不匹配的解决细节
  2. 笔记-信息系统开发基础-uml-uml类图关系
  3. 1595 hdu find the longest of the shortest
  4. 素数与线性筛选法初级版
  5. 【DP】集合问题(2015特长生 T4/luogu 1466)
  6. 12、OpenCV Python 图像梯度
  7. UVA 2519 Radar Installtion
  8. pdf报表的制作入门,JasperReport
  9. 【清单】—— 编程方法、整洁代码与重构
  10. springboot图书管理怎么实现借书时间到期提醒_东和店镇第一小学图书数字化管理先进做法...
  11. MySQL(20)-----数据库设计的常规步骤
  12. Bugku 社工——初步收集
  13. 利用adobe x pro批量合并pdf
  14. 《英雄联盟》“被手游”背后,是移动电竞的成长期烦恼
  15. 微信小程序轮播图swiper使用
  16. spring aop切面执行顺序
  17. java短信验证平台,Java实现发送短信验证码功能
  18. JavaWeb = jQuery使用详解
  19. CSAPP第八、九章家庭作业(原书第二版)
  20. 仿阿里云后台管理界面模板html源码——后台

热门文章

  1. power bi 雷达图_星载雷达与C波段地基雷达数据一致性个例分析 | 新文速递
  2. GPU Profiling 101
  3. 绘制森林资源图的工具介绍
  4. LCD1602 液晶
  5. chrome浏览器安装redux-devtools调试工具
  6. 机器学习--梯度-牛顿-拟牛顿优化算法和实现
  7. 数学建模之线性规划问题(含整数规划和0-1规划)
  8. JavaWeb---HTTP与Request
  9. 软件体系结构层次风格理解
  10. apache的ab压力测试介绍