「Deep Learning」って何?--誤差逆伝播法2(乗算レイヤの実装)。
まず乗算レイヤの実装していきます。
class MulLayer:
def __init__(self):
self.x = None
self.y = None
def fowerd(self,x,y):
self.x = x
self.y = y
out = x * y
return out
def bacword(self,dout):
dx = dout * self.x
dy = dout * self.y
return dx,dy
計算ができるクラスMulLayer()を作ります。構成としては、
fowerd() 順伝播
bacword() 逆伝播
です。
まず順伝播 fowerd()を実際に使ってみます。
apple= 100 #りんご 100円
apple_num = 2 #りんご 2個
tax = 1.1 #消費税 10%
この内容で計算します。
まず変数です。
apple= 100
apple_num = 2
tax = 1.1
クラスをインスタンス化します。
mul_apple_lyer = MulLayer() #りんご2個の値段を計算します。
mul_tax_lyer = MulLayer() #りんごの値段に税を加算します。
まず2個の値段。
applePrice = mul_apple_lyer.fowerd(apple,apple_num)
applePrice
とすると、
200
そして課税。
taxPrice = mul_apple_lyer.fowerd(applePrice,tax)
taxPrice
とすると、
220.00000000000003
と計算されます。
次に逆伝播 bacword()です。
まず上流から伝わってきた微分(dout)を"1"としています。
dprice = 1
そして順伝播の逆から計算していきます。
dapple_price, dtax = mul_tax_layer.backward(dprice)
次に
dapple, dapple_num = mul_apple_layer.backward(dapple_price)
最後に出力してみます。
print("dTax:", dtax)
print("dapple_price:", dapple_price)
print("dApple_num:", int(dapple_num))
print("dApple:", dapple)
dTax: 200
dapple_price: 1.1
dApple_num: 110
dApple: 2.2
となります。以下参考サイトをみていただくとわかりやすいと思います(リンゴの買い物を例を計算グラフで考える)。
この記事が気に入ったらサポートをしてみませんか?