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标准异常和异常处理详解
Feb 02 Python
python-opencv在有噪音的情况下提取图像的轮廓实例
Aug 30 Python
python模块之time模块(实例讲解)
Sep 13 Python
selenium+python自动化测试环境搭建步骤
Jun 03 Python
python数据归一化及三种方法详解
Aug 06 Python
使用Python进行中文繁简转换的实现代码
Oct 18 Python
Python OrderedDict的使用案例解析
Oct 25 Python
wxpython多线程防假死与线程间传递消息实例详解
Dec 13 Python
tensorflow安装成功import tensorflow 出现问题
Apr 16 Python
Python while true实现爬虫定时任务
Jun 08 Python
Python创建自己的加密货币的示例
Mar 01 Python
python 镜像环境搭建总结
Sep 23 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
Thinkphp搭建包括JS多语言的多语言项目实现方法
2014/11/24 PHP
PHP中substr_count()函数获取子字符串出现次数的方法
2016/01/07 PHP
Thinkphp5结合layer弹窗定制操作结果页面
2017/07/07 PHP
prototype 源码中文说明之 prototype.js
2006/09/22 Javascript
用JQuery 实现的自定义对话框
2007/03/24 Javascript
用jQuery实现检测浏览器及版本的脚本代码
2008/01/22 Javascript
JavaScript中使用构造器创建对象无需new的情况说明
2012/03/01 Javascript
jQuery+CSS实现菜单滑动伸展收缩(仿淘宝)
2013/03/22 Javascript
JSON传递bool类型数据的处理方式介绍
2013/09/18 Javascript
javascript四舍五入函数代码分享(保留后几位)
2013/12/10 Javascript
使用forever管理nodejs应用教程
2014/06/03 NodeJs
javascript实现C语言经典程序题
2015/11/29 Javascript
浅析JavaScript函数的调用模式
2016/08/10 Javascript
JavaScript DOM节点操作方法总结
2016/08/23 Javascript
jQuery层级选择器实例代码
2017/02/06 Javascript
Vue项目webpack打包部署到Tomcat刷新报404错误问题的解决方案
2018/05/15 Javascript
Vue 应用中结合vux使用微信 jssdk的方法
2018/08/28 Javascript
vue图片上传本地预览组件使用详解
2019/02/20 Javascript
深入学习JavaScript中的bom
2019/05/27 Javascript
vue实现滑动到底部加载更多效果
2020/10/27 Javascript
python中定义结构体的方法
2013/03/04 Python
Python实现将数据框数据写入mongodb及mysql数据库的方法
2018/04/02 Python
Python Json数据文件操作原理解析
2020/05/09 Python
Python爬虫获取页面所有URL链接过程详解
2020/06/04 Python
python实现mask矩阵示例(根据列表所给元素)
2020/07/30 Python
Html5如何唤起百度地图App的方法
2019/01/27 HTML / CSS
母亲节演讲稿范文
2014/01/02 职场文书
手机促销活动方案
2014/02/05 职场文书
小学生运动会通讯稿
2014/09/23 职场文书
安全生产工作汇报
2014/10/28 职场文书
2014年技术工作总结范文
2014/11/20 职场文书
小学教学工作总结2015
2015/05/13 职场文书
机械原理课程设计心得体会
2016/01/15 职场文书
MySQL中InnoDB存储引擎的锁的基本使用教程
2021/05/26 MySQL
WinServer2012搭建DNS服务器的方法步骤
2022/06/10 Servers
Python测试框架pytest核心库pluggy详解
2022/08/05 Golang