机器学习 day25(softmax在神经网络模型上的应用,提高数据精度的方法)

1. 输出层采用softmax
在这里插入图片描述

  • 在识别手写数字的模型中,预测y只有两个结果,所以输出层采用sigmoid激活函数且只有一个神经元。
  • 若预测y有10个结果(0-9),该模型的前向传播计算方式与识别数字的模型完全相同,即隐藏层的设定完全相同,那么输出层可以采用softmax激活函数,也叫该神经网络模型有一个softmax输出层
  • softmax激活函数与sigmoid激活函数的区别:对于sigmoid,a₁是只关于z₁的函数;对于softmax,a₁是关于z₁…z₁₀所有z的函数(每一个激活值a都取决于所有z的值)

2. 用tensorflow实现softmax
在这里插入图片描述

  • 与之前类似,有三个步骤来这指定和训练模型:第一步,指定模型结构并设定单元数和激活函数。第二步,指定损失函数和成本函数,在tensorflow中,称softmax激活函数的损失函数为SparseCategoricalCrossentropy函数。第三步,训练模型
  • 但这个版本的代码可能会损失数据精度,以下为提高数据精度的办法

3. 提高数据精度
在这里插入图片描述

  • 如图所示,在进行浮点数运算时,表达式不同结果也会不同,这是因为小数在计算机中用二进制来表示可能会丢失精度
  • 第二种情况先计算了两个中间值,再用两个中间值做运算,这加大了损失数据精度的可能。
  • 第二种可以通过化简表达式来达到第一种的数据精度
    在这里插入图片描述
  • 在之前逻辑回归模型中,输出层直接计算并输出激活值a,再将a的值带入损失函数,相当于上图的第二种情况,即先计算了中间值a,再将a的值代入损失函数进行运算,加大损失数据精度的可能
  • 相反,我们可以选择将输出层的激活值a隐式表达,即不直接计算出a的结果,转而将a直接代入损失函数中,再让tensorflow自动简化损失函数,来减小损失数据精度的可能
  • 在代码中:需要将输出层的激活函数设为linear,且将g(z)直接带入损失函数中。因为我们并不计算激活值a,所以不需要sigmoid激活函数,直接用linear激活函数输出z就行;因为要将a,即g(z)代入损失函数中,所以损失函数为关于z的函数
    在这里插入图片描述
  • 在之前的softmax回归模型中,输出层同样是直接计算并输出激活值a,再将a的值代入损失函数。同样是计算了中间值a,再将a的值代入损失函数进行运算,这加大了损失数据精度的可能。
  • 相反,我们也可以将输出层的激活值a隐式表达,即不直接计算出a的结果,转而将a直接代入损失函数,再让tensorflow自动简化损失函数,来减少损失数据精度的可能。
  • 代码中:同样将输出层的激活函数设为linear,且将g(z)直接代入损失函数中。因为我们也不需要计算激活值a,所以不需要softmax激活函数,直接用linear激活函数输出z就行;因为要将g(z)代入损失函数,所以损失函数为关于z的函数
  • 综上:这个版本与原始版本相比:提高了数据精度,增加了阅读的难度,但实现了几乎相同的事情
    在这里插入图片描述
  • 在softmax回归模型中,因为输出层的激活函数是linear,所以输出层的输出结果不再是a₁ - a₁₀,而是z₁ - z₁₀
    在这里插入图片描述
  • 对于逻辑回归模型也是如此,所以如果想要得到预测y为1的概率,还需要带入sigmoid函数g(z)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

丿罗小黑

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值