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 相关文章推荐
Python3处理文件中每个词的方法
May 22 Python
Python抓取手机号归属地信息示例代码
Nov 28 Python
Python MD5加密实例详解
Aug 02 Python
Python文件的读写和异常代码示例
Oct 31 Python
django和vue实现数据交互的方法
Aug 21 Python
Python图像处理库PIL的ImageDraw模块介绍详解
Feb 26 Python
python3通过qq邮箱发送邮件以及附件
May 20 Python
10个python爬虫入门基础代码实例 + 1个简单的python爬虫完整实例
Dec 16 Python
python生成word合同的实例方法
Jan 12 Python
python如何用matplotlib创建三维图表
Jan 26 Python
pytorch __init__、forward与__call__的用法小结
Feb 27 Python
Python爬虫基础之爬虫的分类知识总结
May 13 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
php防盗链的常用方法小结
2010/07/02 PHP
将word转化为swf 如同百度文库般阅读实现思路及代码
2013/08/09 PHP
php json与xml序列化/反序列化
2013/10/28 PHP
php通过ksort()函数给关联数组按照键排序的方法
2015/03/18 PHP
php判断用户是否手机访问代码
2015/06/08 PHP
PHP给源代码加密的几种方法汇总(推荐)
2018/02/06 PHP
Javascript操作cookie的函数代码
2012/10/03 Javascript
innerHTML,outerHTML,innerText,outerText的用法及区别解析
2013/12/16 Javascript
js 与 php 通过json数据进行通讯示例
2014/03/26 Javascript
JavaScript中日期的相关操作方法总结
2015/10/24 Javascript
JS延时提示框实现方法详解
2015/11/26 Javascript
Javascript数组循环遍历之forEach详解
2016/11/07 Javascript
javascript另类方法实现htmlencode()与htmldecode()函数实例分析
2016/11/17 Javascript
关于Function中的bind()示例详解
2016/12/02 Javascript
详解微信小程序入门五: wxml文件引用、模版、生命周期
2017/01/20 Javascript
利用Javascript开发一个二维周视图日历
2017/12/14 Javascript
webpack是如何实现模块化加载的方法
2019/11/06 Javascript
在node环境下parse Smarty模板的使用示例代码
2019/11/15 Javascript
vue中渲染对象中属性时显示未定义的解决
2020/07/31 Javascript
[11:42]2018DOTA2国际邀请赛寻真——OG卷土重来
2018/08/17 DOTA
[47:52]DOTA2-DPC中国联赛正赛 iG vs LBZS BO3 第二场 3月4日
2021/03/11 DOTA
使用paramiko远程执行命令、下发文件的实例
2017/10/01 Python
基于python实现在excel中读取与生成随机数写入excel中
2018/01/04 Python
python获取点击的坐标画图形的方法
2019/07/09 Python
pandas map(),apply(),applymap()区别解析
2021/02/24 Python
HTML5 Geolocation API的正确使用方法
2018/12/04 HTML / CSS
Html5自定义字体解决方法
2019/10/09 HTML / CSS
Hammitt官网:设计师手袋
2020/05/23 全球购物
Linux面试经常问的文件系统操作命令
2016/10/04 面试题
招商经理岗位职责
2013/11/16 职场文书
幼儿教师工作感言
2014/02/14 职场文书
上海世博会口号
2014/06/19 职场文书
讲文明知礼仪演讲稿
2014/09/13 职场文书
教师节标语大全
2014/10/07 职场文书
考试作弊检讨书
2014/10/21 职场文书
Python+OpenCV实现图片中的圆形检测
2022/04/07 Python