基于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获取文件ssdeep值的方法
Oct 05 Python
Python中的字典与成员运算符初步探究
Oct 13 Python
django之常用命令详解
Jun 30 Python
Python实现的rsa加密算法详解
Jan 24 Python
python smtplib模块自动收发邮件功能(二)
May 22 Python
解决Python3 被PHP程序调用执行返回乱码的问题
Feb 16 Python
django框架用户权限中的session缓存到redis中的方法
Aug 06 Python
基于python实现把图片转换成素描
Nov 13 Python
Python异步编程之协程任务的调度操作实例分析
Feb 01 Python
Python修改列表值问题解决方案
Mar 06 Python
浅谈python 中的 type(), dtype(), astype()的区别
Apr 09 Python
详解查看Python解释器路径的两种方式
Oct 15 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+ajax 无刷新删除数据
2010/02/20 PHP
php中error与exception的区别及应用
2014/07/28 PHP
PHP中实现接收多个name相同但Value不相同表单数据实例
2015/02/03 PHP
php判断当前操作系统类型
2015/10/28 PHP
php上传大文件设置方法
2016/04/14 PHP
php自定义时间转换函数示例
2016/12/07 PHP
js对table的td进行相同内容合并示例详解
2013/12/27 Javascript
jQuery 顶部导航跟随滚动条滚动固定浮动在顶部
2014/06/06 Javascript
原生Js实现简易烟花爆炸效果的方法
2015/03/20 Javascript
JavaScript之数组(Array)详解
2015/04/01 Javascript
JS中改变this指向的方法(call和apply、bind)
2016/03/26 Javascript
jQuery动态添加
2016/04/07 Javascript
ionic js 复选框 与普通的 HTML 复选框到底有没区别
2016/06/06 Javascript
JS实现的打字机效果完整实例
2016/06/20 Javascript
Node.js中的require.resolve方法使用简介
2017/04/23 Javascript
浅谈es6语法 (Proxy和Reflect的对比)
2017/10/24 Javascript
JS动态插入脚本和插入引用外部链接脚本的方法
2018/05/21 Javascript
说说Vue.js中的functional函数化组件的使用
2019/02/12 Javascript
vue下载excel的实现代码后台用post方法
2019/05/10 Javascript
vue遍历生成的输入框 绑定及修改值示例
2019/10/30 Javascript
js实现ajax的用户简单登入功能
2020/06/18 Javascript
Element Collapse 折叠面板的使用方法
2020/07/26 Javascript
JavaScript实现缓动动画
2020/11/25 Javascript
详解python中递归函数
2019/04/16 Python
python add_argument()用法解析
2020/01/29 Python
浅谈Tensorflow加载Vgg预训练模型的几个注意事项
2020/05/26 Python
Marriott中国:万豪国际酒店查询预订
2016/09/02 全球购物
澳大利亚最大的护发和护肤品购物网站:RY
2019/12/26 全球购物
软件工程专业推荐信
2013/10/28 职场文书
工业学校毕业生自荐信范文
2014/01/03 职场文书
供货协议书范本
2014/04/22 职场文书
投标人廉洁自律承诺书
2014/05/26 职场文书
2014年安全工作总结范文
2014/11/13 职场文书
2016年第29个世界无烟日宣传活动总结
2016/04/06 职场文书
Nginx反向代理配置的全过程记录
2021/06/22 Servers
MySQL 原理与优化之Update 优化
2022/08/14 MySQL