读书笔记:神经网络 ReLU 层的实现及应用 ← 斋藤康毅

● 在神经网络的层的实现中,一般假定 forward() 和 backward() 的参数是NumPy数组。
● 激活函数
ReLU(Rectified Linear Unit):如果正向传播时的输入 大于0,则反向传播会将上游的值原封不动地传给下游。反过来,如果正向传播时的 小于等于0,则反向传播中传给下游的信号将停在此处。此结论可有ReLU函数及其导数得出,公式及其类LaTex代码如下所示。
                                     y=\left\{\begin{matrix} x,x>0\\ 0,x\leq 0 \end{matrix}\right.                   
\frac{​{\partial y}}{​{\partial x}}=\left\{\begin{matrix} 1,x>0\\ 0,x\leq 0 \end{matrix}\right.

% First Function
y=\left\{\begin{matrix} 
x,x>0\\ 
0,x\leq 0 
\end{matrix}\right.

% Second Function
\frac{{\partial y}}{{\partial x}}=\left\{\begin{matrix}
1,x>0\\ 
0,x\leq 0
\end{matrix}\right.

【ReLU层的Python实现代码】

import numpy as np

arr=np.array([[1,-1],[-2,2]])
 
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

relu_layer=Relu()
qian_out=relu_layer.forward(arr)
print(qian_out)
print("\n")
hou_out=relu_layer.backward(arr)
print(hou_out)

运行后,此代码的输出为:

[[1 0]
 [0 2]]


[[1 0]
 [0 2]]

【代码解析】
为了充分理解上面代码,下面给出一个测试样例。看懂后,就能充分理解上文的代码了。

arr=np.array([[1,-1],[-2,2]])
print(arr)
print("\n")

st=(arr<=0)
print(st)
print("\n")

arr[st]=99999
print(arr)

运行后,此测试样例代码的输出为:

[[ 1 -1]
 [-2  2]]


[[False  True]
 [ True False]]


[[    1 99999]
 [99999     2]]

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值