反向传播(BP)网络的mnist实例(提升篇)

提高神经学习的学习效率

并行计算

可以使用GPU进行并行计算,以此提高学习效率。

梯度消失问题

梯度消失问题的存在使得学习效率会变慢,出现梯度消失的原因如下:
在这里插入图片描述
在这里插入图片描述
其中,对sigmoid函数求导的时候,在[-4, 4]的范围外会发生导数很小,接近于0的情况,进而导致学习的梯度消失。

改进的思路

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

归一化

因为数据度量的量纲可能不同,所以需要对数据进行归一化处理。
在这里插入图片描述
归一化的效果如图:
在这里插入图片描述

参数初始化问题

在这里插入图片描述
上图的参数初始化方法是业界比较认可的一种初始化方式。

参数初始化的代码如下:
def default_weight_initializer(self):
    # 初始化每层的偏置
    self.biases = [np.random.randn(y, 1) for y in self.sizes[1:]]
    # 初始化每层的权重
    self.weights = [np.random.randn(y, x)/np.sqrt(x) for x, y in zip(self.sizes[:-1], self.sizes[1:])]

正则化

L1正则化:

在这里插入图片描述

L1正则化项的导数:

在这里插入图片描述

L2正则化:

在这里插入图片描述

L2正则化项的导数:

在这里插入图片描述
代码需要修改如下:

self.weights = [(1-eta*(lmbda/n))*w - (eta / len(mini_batch)) * nw for w, nw in zip(self.weights, nabla_w)]

学习率

在这里插入图片描述
在这里插入图片描述

交叉熵

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

交叉熵定义

在这里插入图片描述

交叉熵求导

在这里插入图片描述
在这里插入图片描述

交叉熵代码:
class CrossEntropyCost(object):
    '''
    a = np.array([[np.nan, np.inf],
                  [-np.nan, -np.inf]])
    np.nan_to_sum(a)

    array([[0.00000000e+000, 1.79769313e+308],
           [0.00000000e+000, -1.79769313e+308]])
    '''
    @staticmethod
    def fn(a, y):
        return np.sum(np.nan_to_num(-y * np.log(a) - (1-y) * np.log(1-a)))

    @staticmethod
    def delta(z, a, y):
        return (a-y)

模型的保存与加载

在这里插入图片描述

模型保存与加载代码如下:
# 保存模型
    def save(self, filename):
        data = {
   
   "sizes": self.sizes,
                "weights": [w.tolist() for w in self.weights],
                "biases": [b.tolist() for b in self.biases],
                "cost": str(self.cost.__name__)
                }
        f = 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值