ReLUレイヤを実装
class ReLU:
def __init__(self):
self.mask = None
def forward(self, x):
self.mask = (x <= 0)
y = x.copy()
y[self.mask] = 0
return y
def backward(self, dy):
dy[self.mask] = 0
dx = dy
return dx
maskの使い方が面白いです。
ReLUはforwardではxが0以下の時は0を返し、0より大きいときは恒等関数になります。
通常はif文を使って書けばよいような気がしますが、maskを使うと上記のように書けます。
x<=0の時maskはtrueになって、それ以外の時はfalseになるので、yにxをいれておいて、maskがtrueの部分だけ0にすればよいわけですね。
... if文で良いのでは ...?
ところでReLUってどう読むんでしょうか?
スペルアウトはRectified Linear Unitなのだそうです。
言葉を作るのは勝手ですが、読み方までしっかり決めておいてほしいですよね。