基于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 相关文章推荐
剖析Python的Tornado框架中session支持的实现代码
Aug 21 Python
批处理与python代码混合编程的方法
May 19 Python
python基础教程之匿名函数lambda
Jan 17 Python
python里使用正则的findall函数的实例详解
Oct 19 Python
Python实现合并同一个文件夹下所有txt文件的方法示例
Apr 26 Python
Python简单读写Xls格式文档的方法示例
Aug 17 Python
python常用函数与用法示例
Jul 02 Python
python读取大文件越来越慢的原因与解决
Aug 08 Python
Python列表list常用内建函数实例小结
Oct 22 Python
Django:使用filter的pk进行多值查询操作
Jul 15 Python
Python Socket编程详解
Apr 25 Python
Python+tkinter实现高清图片保存
Mar 13 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
把从SQL中取出的数据转化成XMl格式
2006/10/09 PHP
apache中为php 设置虚拟目录
2014/12/17 PHP
php多文件打包下载的实例代码
2017/07/12 PHP
PHP 7.1中AES加解密方法mcrypt_module_open()的替换方案
2017/10/17 PHP
PHP延迟静态绑定的深入讲解
2018/04/02 PHP
ThinkPHP框架下微信支付功能总结踩坑笔记
2019/04/10 PHP
JavaScript-世界上误解最深的语言分析
2007/08/12 Javascript
Iframe自适应高度绝对好使的代码 兼容IE,遨游,火狐
2011/01/27 Javascript
jquery 中多条件选择器,相对选择器,层次选择器的区别
2012/07/03 Javascript
让JavaScript的Alert弹出框失效的方法禁止弹出警告框
2014/09/03 Javascript
jQuery中ajax的post()方法用法实例
2014/12/26 Javascript
JavaScript 正则表达式中global模式的特性
2016/02/25 Javascript
ES6新特征数字、数组、字符串
2016/10/01 Javascript
js基本算法:冒泡排序,二分查找的简单实例
2016/10/08 Javascript
Bootstrap栅格系统简单实现代码
2017/03/06 Javascript
javaScript canvas实现(画笔大小 颜色 橡皮的实例)
2017/11/28 Javascript
vue集成百度UEditor富文本编辑器使用教程
2018/09/21 Javascript
node错误处理与日志记录的实现
2018/12/24 Javascript
JavaScript实现动态添加、移除元素或属性的方法分析
2019/01/03 Javascript
关于vue里页面的缓存详解
2019/11/04 Javascript
小程序实现长按保存图片的方法
2019/12/31 Javascript
JS绘图Flot如何实现可选显示曲线图功能
2020/10/16 Javascript
Python警察与小偷的实现之一客户端与服务端通信实例
2014/10/09 Python
python 实现登录网页的操作方法
2018/05/11 Python
python实现提取str字符串/json中多级目录下的某个值
2020/02/27 Python
python中前缀运算符 *和 **的用法示例详解
2020/05/28 Python
基于tensorflow for循环 while循环案例
2020/06/30 Python
Android interview questions
2016/12/25 面试题
物流专业大学生职业生涯规划书范文
2014/01/15 职场文书
新学期校长寄语
2014/01/18 职场文书
项目安全员岗位职责
2015/02/15 职场文书
计算机专业自荐信
2015/03/05 职场文书
技术入股合作协议书
2016/03/21 职场文书
Python Django ORM连表正反操作技巧
2021/06/13 Python
教你用Python+selenium搭建自动化测试环境
2021/06/18 Python
MySQL中一条SQL查询语句是如何执行的
2022/04/08 MySQL