激活函数的实现

every blog every motto: Every step counts

1. 激活函数的实现

  1. 本节将计算图的思路应用到神经网络中,实现ReLU。
    激活函数ReLU(Rectified Linear Unit)表达式如下:
    y = x (x>0)
    y = 0 (x<=0)

1. 1 代码部分

# Relu:
# 激活函数的实现
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
    

1.2 代码讲解:

1.2.1 mask部分

功能:将数组内的值按任意值划分(阈值),再转换成bool类型(大白话:随便选一个值(如:3),大于这个值的留下,小于这个值的去掉(或者反过来也行),简而言之:选择功能

  1. 以阈值为0和1,为例
import numpy as np
x = np.array([3,2,-1,1])
print(x) # 输出 [3,2,-1,1]
mask = (x > 0) 
print(mask)# 输出[ True  True False  True] 注: 大于0的输出True,小于0的输出False
mask = (x>1) 
print(mask) # 输出[ True  True False False] 

注: mask = (x>0),大于0的输出True,小于0的输出False。主要功能,根据所选阈值,将阈值左右的值分别转换成bool类型

1.2.2 赋值部分

import numpy as np
x = np.array([3,2,-1,1])
print(x)
mask = (x < 0) # 小于0的为True,F,F,T,F
print(mask)
x[mask] = 0 # True的赋值为0
print(x) # 3,2,0,1

注: 根据上一部分转换成的bool类型,有选择的筛选掉不要的部分。

1.2.3 Relu函数的forward部分讲解

  1. 小于0的赋值为True,大于0的赋值为False
  2. 数组中True部分的赋值为0,

通过以上两步,实现了relu函数!!!
另:关于copy方法参考文献[1],关于np.array数组部分参考文献[2]

参考文献
[1] https://blog.csdn.net/u010712012/article/details/79754132
[2] https://blog.csdn.net/fu6543210/article/details/83240024

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

胡侃有料

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值