基于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中的sort方法使用详解
Jul 25 Python
Pyhton中防止SQL注入的方法
Feb 05 Python
Python 12306抢火车票脚本
Feb 07 Python
Python实现的redis分布式锁功能示例
May 29 Python
python主线程捕获子线程的方法
Jun 17 Python
Python二进制串转换为通用字符串的方法
Jul 23 Python
对Python 获取类的成员变量及临时变量的方法详解
Jan 22 Python
在Python文件中指定Python解释器的方法
Feb 18 Python
Python Threading 线程/互斥锁/死锁/GIL锁
Jul 21 Python
Tensorflow分批量读取数据教程
Feb 07 Python
Python实现迪杰斯特拉算法过程解析
Sep 18 Python
全网最全python库selenium自动化使用详细教程
Jan 12 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
Zend Framework入门教程之Zend_Mail用法示例
2016/12/08 PHP
使用dynatrace-ajax跟踪JavaScript的性能
2010/04/12 Javascript
获取dom元素那些讨厌的位置封装代码
2010/06/23 Javascript
JavaScript初学者应注意的七个细节详细介绍
2012/12/27 Javascript
js charAt的使用示例
2014/02/18 Javascript
JS实现alert中显示换行的方法
2015/12/17 Javascript
原生js实现手风琴功能(支持横纵向调用)
2017/01/13 Javascript
Javascript读取上传文件内容/类型/字节数
2019/04/30 Javascript
webpack项目使用eslint建立代码规范实现
2019/05/16 Javascript
JS实现放烟花效果
2020/03/10 Javascript
JQuery Ajax如何实现注册检测用户名
2020/09/25 jQuery
TypeScript魔法堂之枚举的超实用手册
2020/10/29 Javascript
[47:03]Ti4第二日主赛事败者组 LGD vs iG 2
2014/07/21 DOTA
Python入门篇之函数
2014/10/20 Python
Windows下PyMongo下载及安装教程
2015/04/27 Python
调试Python程序代码的几种方法总结
2015/04/28 Python
Python编程中对文件和存储器的读写示例
2016/01/25 Python
Python 16进制与中文相互转换的实现方法
2018/07/09 Python
Python设计模式之命令模式原理与用法实例分析
2019/01/11 Python
python Pandas库基础分析之时间序列的处理详解
2019/07/13 Python
基于Python获取城市近7天天气预报
2019/11/26 Python
python实时监控logstash日志代码
2020/04/27 Python
Python DES加密实现原理及实例解析
2020/07/17 Python
Python使用tkinter实现小时钟效果
2021/02/22 Python
canvas学习总结三之绘制路径-线段
2019/01/31 HTML / CSS
HTML5自定义视频播放器源码
2020/01/06 HTML / CSS
美国顶级水上运动专业店:Marine Products
2018/04/15 全球购物
倩碧英国官网:Clinique英国
2018/08/10 全球购物
英国首屈一指的票务公司:See Tickets
2019/05/11 全球购物
全球才华横溢工匠的家居装饰、珠宝和礼物:NOVICA
2021/01/22 全球购物
软件测试工程师笔试题带答案
2015/03/27 面试题
社区两委对照检查材料
2014/08/23 职场文书
2014年工程工作总结
2014/11/25 职场文书
SQL 窗口函数实现高效分页查询的案例分析
2021/05/21 SQL Server
MySQL派生表联表查询实战过程
2022/03/20 MySQL
Nginx报404错误的详细解决方法
2022/07/23 Servers