基于MSELoss()与CrossEntropyLoss()的区别详解


Posted in Python onJanuary 02, 2020

基于pytorch来讲

MSELoss()多用于回归问题,也可以用于one_hotted编码形式,

CrossEntropyLoss()名字为交叉熵损失函数,不用于one_hotted编码形式

MSELoss()要求batch_x与batch_y的tensor都是FloatTensor类型

CrossEntropyLoss()要求batch_x为Float,batch_y为LongTensor类型

(1)CrossEntropyLoss() 举例说明:

比如二分类问题,最后一层输出的为2个值,比如下面的代码:

class CNN (nn.Module ) :
  def __init__ ( self , hidden_size1 , output_size , dropout_p) :
    super ( CNN , self ).__init__ ( )
    self.hidden_size1 = hidden_size1
    self.output_size = output_size
    self.dropout_p = dropout_p
    
    self.conv1 = nn.Conv1d ( 1,8,3,padding =1) 
    self.fc1 = nn.Linear (8*500, self.hidden_size1 )
    self.out = nn.Linear (self.hidden_size1,self.output_size ) 
 
  
  def forward ( self , encoder_outputs ) :
    cnn_out = F.max_pool1d ( F.relu (self.conv1(encoder_outputs)),2) 
    cnn_out = F.dropout ( cnn_out ,self.dropout_p) #加一个dropout
    cnn_out = cnn_out.view (-1,8*500) 
    output_1 = torch.tanh ( self.fc1 ( cnn_out ) )
    output = self.out ( ouput_1)
    return output

最后的输出结果为:

基于MSELoss()与CrossEntropyLoss()的区别详解

上面一个tensor为output结果,下面为target,没有使用one_hotted编码。

训练过程如下:

cnn_optimizer = torch.optim.SGD(cnn.parameters(),learning_rate,momentum=0.9,\
              weight_decay=1e-5)
criterion = nn.CrossEntropyLoss()
 
def train ( input_variable , target_variable , cnn , cnn_optimizer , criterion ) :
  cnn_output = cnn( input_variable )
  print(cnn_output)
  print(target_variable)
  loss = criterion ( cnn_output , target_variable)
  cnn_optimizer.zero_grad ()
  loss.backward( )
  cnn_optimizer.step( )
  #print('loss: ',loss.item())
  return loss.item() #返回损失

说明CrossEntropyLoss()是output两位为one_hotted编码形式,但target不是one_hotted编码形式。

(2)MSELoss() 举例说明:

网络结构不变,但是标签是one_hotted编码形式。下面的图仅做说明,网络结构不太对,出来的预测也不太对。

基于MSELoss()与CrossEntropyLoss()的区别详解

如果target不是one_hotted编码形式会报错,报的错误如下。

基于MSELoss()与CrossEntropyLoss()的区别详解

目前自己理解的两者的区别,就是这样的,至于多分类问题是不是也是样的有待考察。

以上这篇基于MSELoss()与CrossEntropyLoss()的区别详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Mac OS X10.9安装的Python2.7升级Python3.3步骤详解
Dec 04 Python
Python 不同对象比较大小示例探讨
Aug 21 Python
python在Windows8下获取本机ip地址的方法
Mar 14 Python
Python3使用requests包抓取并保存网页源码的方法
Mar 15 Python
实例解析Python的Twisted框架中Deferred对象的用法
May 25 Python
Python实现朴素贝叶斯分类器的方法详解
Jul 04 Python
解决python3 urllib 链接中有中文的问题
Jul 16 Python
Python爬虫实现获取动态gif格式搞笑图片的方法示例
Dec 24 Python
虚拟机下载python是否需要联网
Jul 27 Python
Python定义一个Actor任务
Jul 29 Python
Python如何爬取b站热门视频并导入Excel
Aug 10 Python
20行Python代码实现一款永久免费PDF编辑工具的实现
Aug 27 Python
python使用SQLAlchemy操作MySQL
Jan 02 #Python
pytorch 实现cross entropy损失函数计算方式
Jan 02 #Python
Matplotlib scatter绘制散点图的方法实现
Jan 02 #Python
Python基础之函数基本用法与进阶详解
Jan 02 #Python
Python面向对象原理与基础语法详解
Jan 02 #Python
Pytorch 的损失函数Loss function使用详解
Jan 02 #Python
Python面向对象封装操作案例详解 II
Jan 02 #Python
You might like
php中检查文件或目录是否存在的代码小结
2012/10/22 PHP
ThinkPHP关于session的操作方法汇总
2014/07/18 PHP
Yii调试查看执行SQL语句的方法
2016/07/15 PHP
PHP定时任务获取微信access_token的方法
2016/10/10 PHP
JavaScript 笔记二 Array和Date对象方法
2010/05/22 Javascript
各浏览器对link标签onload/onreadystatechange事件支持的差异分析
2011/04/27 Javascript
javascript实现的平方米、亩、公顷单位换算小程序
2014/08/11 Javascript
JS实现图片产生波纹一样flash效果的方法
2015/02/27 Javascript
JavaScript函数的调用以及参数传递
2015/10/21 Javascript
Jquery左右滑动插件之实现超级炫酷动画效果附源码下载
2015/12/02 Javascript
js实现带农历和八字等信息的日历特效
2016/05/16 Javascript
浅谈JS之iframe中的窗口
2016/09/13 Javascript
js中的eval()函数把含有转义字符的字符串转换成Object对象的方法
2016/12/02 Javascript
详解node如何让一个端口同时支持https与http
2017/07/04 Javascript
使用async、enterproxy控制并发数量的方法详解
2018/01/02 Javascript
Vue和React组件之间的传值方式详解
2019/01/31 Javascript
angular多语言配置详解
2019/05/16 Javascript
浅谈vue限制文本框输入数字的正确姿势
2019/09/02 Javascript
python 将字符串转换成字典dict
2013/03/24 Python
Python开发如何在ubuntu 15.10 上配置vim
2016/01/25 Python
关于Python中异常(Exception)的汇总
2017/01/18 Python
浅谈五大Python Web框架
2017/03/20 Python
Python 通过微信控制实现app定位发送到个人服务器再转发微信服务器接收位置信息
2019/08/05 Python
Python函数装饰器原理与用法详解
2019/08/16 Python
python框架django项目部署相关知识详解
2019/11/04 Python
Python接口自动化判断元素原理解析
2020/02/24 Python
python实现全排列代码(回溯、深度优先搜索)
2020/02/26 Python
python中lower函数实现方法及用法讲解
2020/12/23 Python
会计岗位描述
2014/02/22 职场文书
电焊工岗位职责
2014/03/06 职场文书
关于责任的演讲稿
2014/05/20 职场文书
2014年党员学习“三严三实”思想汇报
2014/09/15 职场文书
2014党员学习兰辉先进事迹思想汇报
2014/09/17 职场文书
送达通知书
2015/04/25 职场文书
《浅水洼里的小鱼》教学反思
2016/02/16 职场文书
JavaScript中关于预编译、作用域链和闭包的理解
2021/03/31 Javascript