Pytorch中accuracy和loss的计算知识点总结


Posted in Python onSeptember 10, 2019

这几天关于accuracy和loss的计算有一些疑惑,原来是自己还没有弄清楚。

给出实例

def train(train_loader, model, criteon, optimizer, epoch):
  train_loss = 0
  train_acc = 0
  num_correct= 0
  for step, (x,y) in enumerate(train_loader):

    # x: [b, 3, 224, 224], y: [b]
    x, y = x.to(device), y.to(device)

    model.train()
    logits = model(x)
    loss = criteon(logits, y)

    optimizer.zero_grad()
    loss.backward()
    optimizer.step()
    train_loss += float(loss.item())
    train_losses.append(train_loss)
    pred = logits.argmax(dim=1)
    num_correct += torch.eq(pred, y).sum().float().item()
  logger.info("Train Epoch: {}\t Loss: {:.6f}\t Acc: {:.6f}".format(epoch,train_loss/len(train_loader),num_correct/len(train_loader.dataset)))
  return num_correct/len(train_loader.dataset), train_loss/len(train_loader)

首先这样一次训练称为一个epoch,样本总数/batchsize是走完一个epoch所需的“步数”,相对应的,len(train_loader.dataset)也就是样本总数,len(train_loader)就是这个步数。

那么,accuracy的计算也就是在整个train_loader的for循环中(步数),把每个mini_batch中判断正确的个数累加起来,然后除以样本总数就行了;

而loss的计算有讲究了,首先在这里我们是计算交叉熵,关于交叉熵,也就是涉及到两个值,一个是模型给出的logits,也就是10个类,每个类的概率分布,另一个是样本自身的

label,在Pytorch中,只要把这两个值输进去就能计算交叉熵,用的方法是nn.CrossEntropyLoss,这个方法其实是计算了一个minibatch的均值了,因此累加以后需要除以的步数,也就是

minibatch的个数,而不是像accuracy那样是样本个数,这一点非常重要。

以上就是本次介绍的全部知识点内容,感谢大家对三水点靠木的支持。

Python 相关文章推荐
python中对list去重的多种方法
Sep 18 Python
详解Python的Django框架中inclusion_tag的使用
Jul 21 Python
Python使用文件锁实现进程间同步功能【基于fcntl模块】
Oct 16 Python
Python实现按特定格式对文件进行读写的方法示例
Nov 30 Python
安装python时MySQLdb报错的问题描述及解决方法
Mar 20 Python
浅谈Python Opencv中gamma变换的使用详解
Apr 02 Python
Python制作微信好友背景墙教程(附完整代码)
Jul 17 Python
Python迭代器模块itertools使用原理解析
Dec 11 Python
matplotlib 对坐标的控制,加图例注释的操作
Apr 17 Python
ansible-playbook实现自动部署KVM及安装python3的详细教程
May 11 Python
如何通过命令行进入python
Jul 06 Python
python编程项目中线上问题排查与解决
Nov 01 Python
python3.7环境下安装Anaconda的教程图解
Sep 10 #Python
Windows10下 python3.7 安装 facenet的教程
Sep 10 #Python
python 图像处理画一个正弦函数代码实例
Sep 10 #Python
Python操作Mongodb数据库的方法小结
Sep 10 #Python
Python使用matplotlib绘制三维参数曲线操作示例
Sep 10 #Python
Python matplotlib绘制饼状图功能示例
Sep 10 #Python
numpy.random.shuffle打乱顺序函数的实现
Sep 10 #Python
You might like
我的论坛源代码(十)
2006/10/09 PHP
PHP下获取上个月、下个月、本月的日期(strtotime,date)
2014/02/02 PHP
PHP中file_exists函数不支持中文名的解决方法
2014/07/26 PHP
全面了解PHP中的全局变量
2016/06/17 PHP
Laravel 创建可以传递参数 Console服务的例子
2019/10/14 PHP
编写js扩展方法判断一个数组中是否包含某个元素
2013/11/08 Javascript
javascript函数中参数传递问题示例探讨
2014/07/31 Javascript
JS操作HTML自定义属性的方法
2015/02/10 Javascript
论JavaScript模块化编程
2016/03/07 Javascript
Vue组件BootPage实现简单的分页功能
2016/09/12 Javascript
jQuery手风琴的简单制作
2017/05/12 jQuery
nodejs中安装ghost出错的原因及解决方法
2017/10/23 NodeJs
javascript实现电脑和手机版样式切换
2017/11/10 Javascript
vue删除html内容的标签样式实例
2018/09/13 Javascript
JS 实现微信扫一扫功能
2018/09/14 Javascript
Vuex的actions属性的具体使用
2019/04/14 Javascript
基于Vue CSR的微前端实现方案实践
2020/05/27 Javascript
Vue $emit()不能触发父组件方法的原因及解决
2020/07/28 Javascript
js实现滑动进度条效果
2020/08/21 Javascript
Python删除空文件和空文件夹的方法
2015/07/14 Python
python微信好友数据分析详解
2018/11/19 Python
python ChainMap 合并字典的实现步骤
2019/06/11 Python
pyinstaller参数介绍以及总结详解
2019/07/12 Python
基于Django OneToOneField和ForeignKey的区别详解
2020/03/30 Python
python实现在线翻译
2020/06/18 Python
python如何求圆的面积
2020/07/01 Python
Sofft鞋官网:世界知名鞋类品牌
2017/03/28 全球购物
Mountain Warehouse德国官网:英国户外零售商
2019/08/11 全球购物
英国高街奥特莱斯:Highstreet Outlet
2019/11/21 全球购物
异常和异常类的概念
2014/09/12 面试题
会计系个人求职信范文分享
2013/12/20 职场文书
财务主管的岗位职责
2013/12/30 职场文书
吴仁宝观后感
2015/06/09 职场文书
用Python制作灯光秀短视频的思路详解
2021/04/13 Python
python批量创建变量并赋值操作
2021/06/03 Python
Vue过滤器(filter)实现及应用场景详解
2021/06/15 Vue.js