栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

误差反向传播法【一、计算图】

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

误差反向传播法【一、计算图】

        在求损失函数关于权重参数的梯度的时候,使用数值微分在上一篇的最后有提到,很占CPU和耗时,所以一般都使用高效的误差反向传播法。数值微分的作用一般就是用来检验误差反向传播法是否正确,因为数值微分比较简单不容易出错,相对的误差反向传播复杂很多,所以用来检测误差是否很小,确保误差反向传播法是正确的。
        使用计算图来表示,会帮助我们更容易理解,我们举一个例子:张三买两个瓜,10元一个,其中消费税是10%,求需要支付的金额?
答案很简单 2*10*(1+10%)=22元,求这个答案的过程叫做正向传播
现在我们想知道瓜的价格上涨会在多大程度上影响最终的支付金额?也就是求“支付金额关于瓜的价格的导数”,上涨1元,那么最终支付金额会增加多少呢?看下图

也就是说涨价1元,需要多支付2.2元,这个2.2就是通过计算图的反向传播求来的。

class MulLayer:
    '''
    乘法层的处理[z=x*y]
    forward()正向传播保存x,y的值
    backward()从上游传来的导数乘以正向传播的翻转值,然后传给下游
    '''
    def __init__(self):
        self.x=None
        self.y=None
    def forward(self,x,y):
        self.x=x
        self.y=y
        out=x*y
        return out
    def backward(self,dout):
        dx=dout*self.y
        dy=dout*self.x
        return dx,dy
melon_price=10
melon_num=2
tax=1.1

melon_layer=MulLayer()
tax_layer=MulLayer()
melonPrice=melon_layer.forward(melon_price,melon_num)
money=tax_layer.forward(melonPrice,tax)
print(money)#22

dprice=1
dmelon_price,dtax=tax_layer.backward(dprice)
dmelonPrice,dmelonNum=melon_layer.backward(dmelon_price)
print(dmelonPrice,dmelonNum,dtax)#2.2 11.0 20

        现在在这个基础上再买3瓶酒,每瓶酒200元,消费税一样,现在需要支付多少?支付金额对应的价格、个数、消费税的导数分别是多少?此时相当于多了一个加法层,将瓜钱和酒钱相加,加法节点我们知道传给下游的导数是不变的,代码就很简单了

class AddLayer:
    def __init__(self):
        pass
    def forward(self,x,y):
        out=x+y
        return out
    def backward(self,dout):
        dx=dout*1
        dy=dout*1
        return dx,dy
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/272587.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号