01.关于 教材 深度学习入门 p91 return -np.sum(np.log(y[np.arange(batch_size) 的一些解释

本文通过具体数值示例,详细解析了如何计算交叉熵损失函数,并对比了使用one-hot编码和非one-hot编码方式下计算过程的区别,最终目标都是为了评估预测概率与真实标签之间的差距。

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

一、结果和细节分析注:使用mnist手写数字体数据集。(1)、交叉熵误差函数输入数据只有一个时:y和t都是1*n的矩阵,只需要求一行的相应和就可以得到这个数据对应的误差。深度学习入门:return -np.sum(np.log(y[np.arange(batch_size),采用mini_batch批处理N个数据时:y有多行多列,每一行代表一个数据。计算第一行时,n先取0表示第一行,k=1,2,3,…来求解第一行相应的和;之后n=1表示第二行,k=1,2,3,…计算第二行相应的和;以此类推得到每一行的和,再将上一步求解的每一行的和全部相加,最后除于数据量N,再取负号得到平均每个数据对应的误差。深度学习入门:return -np.sum(np.log(y[np.arange(batch_size),
[0.010.900.010.010.010.010.010.010.010.020.910.010.010.010.010.010.010.010.010.010.900.010.010.010.010.010.010.010.010.02] \begin{gathered} \begin{bmatrix} 0.01 & 0.90 & 0.01 & 0.01 & 0.01 & 0.01 & 0.01 & 0.01 & 0.01 & 0.02 \\ 0.91 & 0.01 & 0.01 & 0.01 & 0.01 & 0.01 & 0.01 & 0.01 & 0.01 & 0.01 \\ 0.90 & 0.01 & 0.01 & 0.01 & 0.01 & 0.01 & 0.01 & 0.01 & 0.01 & 0.02 \end{bmatrix} \end{gathered} 0.010.910.900.900.010.010.010.010.010.010.010.010.010.010.010.010.010.010.010.010.010.010.010.010.010.010.010.020.010.02
根据交叉熵误差公式,t矩阵与y矩阵做运算时,t中为0的位置计算之后仍然为0,t中只有为1的位置才是有效计算值。重点:t矩阵中元素为1的位置对应的下标索引就表示该行对应的图片的正确数字是多少。比如第一行表示正确数字是1, 第二行表示正确数字是3,第三行表示正确数字是0。也就是说只有t中正确数字所对应位置才会用来计算损失函数的值。也就是y中只有(0,1),(1,3),(2,0)位置对应的数据才用来计算误差。

E = - [ 1log0.90 + 1log0.01 + 1 * log0.90 ] / 3

PS 相关实现详见教材

关于y[np.arange(batch_size), t]含义的解释:

        假设batch_size=3,这里np.arange(batch_size)会生成数组[0,1 ,2]。之后[np.arange(batch_size), t]会将[0,1,2]和t中正确的解数字[1,3,0]进行对应组合,得到坐标(0,1),(1,3),(2,0)。最后用这些坐标到y矩阵里获取对应位置的元素值,比如y(0,1)取第一行第二列的值0.90。所以这行代码会生成numpy数组[0.90,0.01,0.90]。之后用这个数组取对数,求和,除于数据量,取负号。
总结:殊途同归,最后都是用[0.90,0.01,0.90]计算。采用one-hot时,t里面的1对应的位置提供了行坐标和列坐标去取y里面的值;采用非one-hot时,np.arange(batch_size)提供了行坐标,t提供列坐标,组合之后去取y里面的值。所取到的数据都是一样的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值