softmax的实现代码,及其实现过程中出现的错误

本文详述了softmax的原理、代价函数、梯度更新,并对比了自己实现与TensorFlow实现的差异。在实践中遇到的问题是,由于标签矩阵形状错误,导致在梯度下降时减去的值不正确,修正方法是将标签矩阵reshape为(n,)。通过理解这些,能更好地掌握softmax在多分类问题中的应用。" 106809645,5737046,Linux Shell脚本输出重定向详解,['Linux基础与Shell脚本'],"['Linux', 'Shell脚本', '重定向', '文件描述符', 'exec', 'tee']

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在完成ML课程的第三个project的时候,出现了一个错误,我完成使用tensorflow直接进行softmax的时候,发现出现了结果的准确率有0.81,但是在自己写的代码里面出现的结果,居然只有0.5的准确率,而且在我输出它对每个样本完成的概率的计算,发现出来的结果都是0.5,这都是啥嘛,,,气死我了,在tensorflow和自己写的代码里面的计算代价的代码都是一样的,仅仅的差别就是梯度下降是tensorflow帮你计算,很显然,说明我的梯度下降的代码写错了。

题目:下面的逻辑回归的代码详见我的另一个博客:逻辑回归--GD,SGD,牛顿法

数据集网址:

http://openclassroom.stanford.edu/MainFolder/DocumentPage.php?course=DeepLearning&doc=exercises/ex4/ex4.html

之后再说这个错误,现在这里理一下softmax的过程!

一、softmax简述

softmax是一个多分类的模型,所以也称为多分类的逻辑回归模型。

我们知道逻辑回归求得是这个样本属于1类的概率,它是通过线性得到一个预测的值,之后再放入sigmoid函数将预测的值变化到0-1之间,比拟成概率。这里的softmax得到的也是样本属于每个类别的概率,且概率之和为1.怎么实现的呢?就是通过softmax的假设函数。

softmax的假设函数:

我们先说明一些标志的意思,C是总类别的数目,N表示的所有的样本的数目,m是输入的X的特征数,那么很显然X是一个大小为(N,m)的矩阵,label是一个大小为(n,1)的矩阵,表示的是每个样本的真实标签(这里将会是易错点!!)\theta是一个大小为(C,m)的矩阵,\theta_j表示的是第j类的参数,那么k的取值就是1到C,我们用上角代表第几个样本,比如y^{(i)}表示的是第i的样本的预测类别,x^{(i)}是X的第i行,也就是第i个样本的特征。下面的这个公式很显然是:第i个样本被预测成第j类别的概率

p_j(y^{(i)}=j)=\frac{e^{\theta_j^{T}x^{(i)}}}{\sum_{j^{,}=1}^{C}e^{\theta_{j^{,}}^{T}x^{(i)}}} \, \, \, j=1,.....C,很显然对于一个样本而言,左式产生的所有的类别概率之和为1。那么最后预测的p是一个N*C的矩阵,第i行(1,C)表示第i个样本的被预测为所有样本的概率,那么每一行之和就是1.

二、softmax的代价函数

softmax对于所有的样本的损失函数:L(\theta)

简化下面的求梯度的计算,对于单样本而言,上面的式子中的label^{(i)}是一个单数字,如果属于第1类,那么label^{(i)}=1,如果我们将label转化成one-hot的形式,很显然,如果存在C=3(1,2,3)个类别,那么属于第1类就变成了[1,0,0]这样的形式,所以对于单样本的损失可以写成:

L_i=-\sum_{j=1}^{C}1\,\left \{ {label^{(i)}=j} \right \}log(p_j(x^{(i)})),这个表示的是单样本的损失,举个例子,大家更容易理解,比如C=3,那么对于样本i得到的预测概率是属于第1,2,3类别的概率p_1(x^{(i)})=0.3,p_2(x^{(i)})=0.5,p_3(x^{(i)})=0.2,如果第i个样本的真实标签是label^{(i)}=2也就是属于第2类,那么损失是L_i=-1*log(0.5),看明白了吗?

所以下面实

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值