今天小编就为大家分享一篇基于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()与交叉入口型()的区别详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。