神经网络常用激活函数-正反传播代码实现

最近在学习神经网络,在此我总结了全连接神经网络常用的激活函数的正反传播,如有误请提出,一起学习

Sigmoid

class Sigmoid:

    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

class ReLu:

    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

Affine

class Affine:

    def forward(self,x,w,b):
        self.x = x
        self.w = w
        self.b = b
        out = np.dot(self.w,x) + self.b

        return out
    
    def backward(self,dout):
        dx = np.dot(dout,self.w.T)
        dw = np.dot(dout,self.x.T)
        db = np.sum(dout,axis = 0)
        
        return dx

SoftmaxWithLoss

class SoftmaxWithLoss:

    def __init__(self):
        self.loss = None
        self.y = None  #输出数据
        self.t = None  #监督数据(one-hot)
        
    def forward(self,x,t):
        self.t = t
        self.y = Softmax(x)
        self.loss = cross_entropy_error(self.y,self.t)
        
        return self.loss
    
    def backward(self,dout = 1):
        batch_size = self.t.shape[0]
        dx = (self.y - self.t) / batch_size

        return dx

    #softmax函数
    def Softmax(x):
        c = np.max(x)
        exp_x = np.exp(x-c)#减去最大值防止指数运算溢出
        sum_exp_x = np.sum(np.exp(x-c))
        y = exp_x/sum_exp_x
        
        return y
        
    #cross_entropy_error函数
    def cross_entropy_error(y,t):
        delta = 1e-7
        return -np.sum(t * np.log(y+delta))

代码来自《深度学习入门-基于Python的理论与实现》

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值