ゼロから作るDeep Learning(15日目)

こんにちは、筋肉めがねです。

 

ドイツではクリスマスマーケットが始まりましたね。クリスマスマーケットと言えばGlühweinですよね。そして、場所によってはGlühweinを素敵なカップに入れてくれますよね。僕の家族がドイツに来た時も、お土産に日本に持って帰っておりました。今年はどんなカップに出会えるのでしょうか。

 

f:id:KinnikuMegane:20181211201114p:plain

 

それでは、本日も「ゼロから作るDeep Learning」を進めていきましょう。

 

前回の記事では、乗算レイヤと加算レイヤを実装し、誤差逆伝播法を理解しました。今回の記事では、ReLUレイヤとsigmoidレイヤを実装します。

 

早速pythonで実装してみましょう。

class Relu:
       def __init__(self):
             self.mask = None
       def forward(self, x):
             self.mask = (x <= 0)
             out = x.copy()
             out[self.mask] = 0
             return out
       def backward(self, dout):
             dout[self.mask] = 0
             dx = dout
             return dx

class Sigmoid:
       def __init__(self):
             self.out = None
       def forward(self, x):
             out = 1 / (1 + np.exp(-x))
             self.out = out
             return out
       def backward(self, dout):
             dx = dout * (1.0 - self.out) * self.out
             return dx


ReLU関数とは、入力が0を越えていれば、その入力をそのまま出力し、入力が0以下ならば0を出力する関数です。そのため、順伝播時の入力であるxが0より大きければ、逆伝播は上流の値をそのまま下流に流し、順伝播時にxが0以下であれば、逆伝播では下流への信号は流れません。

 

次回は、AffineそしてSoftmaxレイヤについて書いていきます。 

それでは、本日は以上でございます。


にほんブログ村 IT技術ブログへ
にほんブログ村



Pythonランキング