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

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

今天小编就为大家分享一篇基于MSELoss()与交叉入口型()的区别详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

基于pytorch来讲

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

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

MSELoss()要求批处理_x与批处理_y的张量都是漂浮者类型

交叉入口型()要求批处理_x为Float,batch_y为龙腾传感器类型

(1)CrossEntropyLoss() 举例说明:

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

美国有线新闻网;卷积神经网络类(NN .模块) :

def __init__ ( self,hidden_size1,output_size,dropout_p):

超级(美国有线电视新闻网,自我).__init__()

self.hidden_size1=hidden_size1

self.output_size=输出大小

self.dropout_p=dropout_p

self.conv1=nn .Conv1d ( 1,8,3,填充=1)

self.fc1=nn .线性(8*500,self.hidden_size1)

self.out=nn .线性(self.hidden_size1,self.output_size)

定义向前(自身,编码器_输出) :

CNN _ out=f . max _ pool 1d(f . relu(self。con v1(编码器_输出))、2)

cnn_out=F.dropout ( cnn_out,self.dropout_p) #加一个拒绝传统社会的人

cnn_out=cnn_out.view (-1,8*500)

output _ 1=火炬。tanh(自我。fc1(CNN _ out))

输出=self.out(输出_1)

返回输出

最后的输出结果为:

上面一个张量为输出结果,下面为目标,没有使用one_hotted编码。

训练过程如下:

CNN _ optimizer=torch。optim。新社(CNN。参数(),learning_rate,momentum=0.9,\

权重_衰减=1e-5)

判据=nn .交叉入口型()

定义训练(输入变量,目标变量,cnn,cnn优化器,标准) :

cnn_output=cnn(输入变量)

打印(cnn_output)

打印(目标变量)

损失=标准(有线电视新闻网输出,目标变量)

cnn_optimizer.zero_grad()

loss.backward()

cnn_optimizer.step()

#print('loss:',loss.item())

退货损失。item() #返回损失

说明交叉入口型()是输出两位为one_hotted编码形式,但目标不是one_hotted编码形式。

(2)MSELoss() 举例说明:

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

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

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

以上这篇基于MSELoss()与交叉入口型()的区别详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: