見出し画像

「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

となります。以下参考サイトをみていただくとわかりやすいと思います(リンゴの買い物を例を計算グラフで考える)。


この記事が気に入ったらサポートをしてみませんか?