如何学损失函数

今天无意间看到了logistic回归的pytorch的实现,抱着他山之石可以攻玉的态度,阅读了一下代码,突然发现在其代码中的网络搭建部分只有一个Linear层,却不见softmax层(使用的是mnist数据集进行识别的所以要用到softmax回归),但是遍观其全体代码依然没有痕迹,这是我便奇了怪了,由于之在纯python和tf框架上敲过这个代码,所以对这一情况感觉很是奇怪,难道只用一个linear就能实现回归吗?在百四不得其解的情况下,我打印输出了一下label和他的输出值(预测)out发现label是单独的一个数(0~9)而out是一个向量(十维)然后我就看到他们被放到了损失函数nn.CrossEntropyLoss()里面,难道这里有什么玄机,我记得(tf的经验) 这个交叉熵损失函数的pre与y应该维度相同才对啊,程序这样输入进去不会报错吗?带着这个疑惑我去网上查找了一下关于nn.CrossEntropyLoss() 这个损失函数的定义,我发现其数学定义如下:

如图所示,很明显,这是一个使用了softmax回归的交叉熵,同时也契合了沿梯度下降优化的方法,完美,至此,我的疑惑终于揭开了。

下面是我在网上找的一篇有关pytorch损失函数的博文,里面讲述了其数学定义及用法:

https://blog.csdn.net/zhangxb35/article/details/72464152?utm_source=itdadao&utm_medium=referral

同时,我又对tensorflow里面的损失函数产生了兴趣我于是有查阅了一下tensorflow里面如何使用softmax和交叉熵,我先找到了其softmax的定义:



嗯,是我们所熟知的softmax,接着我们看看tf如何使用他:


我们发现这里要使用y去乘log(pre)但是为什么在pytorch的一体化损失函数里面没有呢?

我们不禁要问,tensorflow中有y可以乘,而pytorch中没有y可以乘,这是为什么?原来我们在pytorch中得到的label是0~9的数字,而tensorflow中是one_hot编码即是几哪个位上就为1其余位为0


上图引自(

我们可以看到,经过此举,其两种框架的写法也变得一致了,所以数学不好,地动山摇!!!

所以,我们由此可以看出,任凭框架一变再变,只要数学在手,你就可以任凭风浪起,稳坐钓鱼台了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值