技巧 | 编程大牛只用NumPy码一个神经网络

本文介绍如何仅使用NumPy库构建一个简单的神经网络,涵盖了BP神经网络的基本概念,包括误差反向传播算法、网络结构和初始化、前向传播、反向传播以及权重更新。通过实例展示了如何使用NumPy实现神经网络的训练和预测,并与Keras模型进行了性能比较。
摘要由CSDN通过智能技术生成

BP(Back Propagation)神经网络是1986年由Rumelhart和McCelland为首的科学家小组提出,是一种==按误差逆传播算法训练的多层前馈网络==,是目前应用最广泛的神经网络模型之一。BP网络能学习和存贮大量的==输入-输出模式映射关系==,而无需事前揭示描述这种映射关系的数学方程。它的学习规则是使用梯度下降法,通过反向传播来不断调整网络的权值和阈值,使==网络的误差平方和最小==。BP神经网络模型拓扑结构包括输入层(input)、隐层(hidden layer)和输出层(output layer)。

注:本文将包含大量用 Python 编写的代码片段。希望读起来不会太无聊。

 

Keras、TensorFlow、PyTorch 等高级框架可以帮助我们快速构建复杂模型。深入研究并理解其中的理念很有价值。下面尝试只使用 NumPy 构建一个全运算的神经网络,通过解决简单的分类问题来测试模型,并将其与 Keras 构建的神经网络进行性能比较。

å¯éç¥ç»ç½ç»æ¶æ图 1 :密集神经网络架构

 

磨刀不误砍柴工

 

在开始编程之前,需要先整理一个基本的路线图。我们的目标是创建一个程序,该程序能创建一个拥有特定架构(层的数量和大小以及激活函数都是确定的)的密集连接神经网络。图 1 给出了网络的示例。最重要的是,网络必须可训练且能进行预测。

图 2 :神经网络框图

 

上图显示了在训练神经网络时需要执行的操作。它还显示了在单次迭代的不同阶段,需要更新和读取多少参数。构建正确的数据结构并熟练地管理其状态是任务中最困难的部分之一。

图 3 :l 层的权值矩阵 W 和偏置向量 b 的维数。

 

神经网络层初始化

 

首先初始化每一层的权值矩阵 W 和偏置向量 b。在图 3 中。先准备一个为系数分配适当维数的清单。上标 [l] 表示当前层的索引 (从 1 数起),值 n 表示给定层中的单位数。假设描述 NN 架构的信息将以类似 Snippet 1 的列表形式传递到程序中,列表的每一项是一个描述单个网络层基本参数的字典:input_dim 是输入层信号向量的大小,output_dim 是输出层激活向量的大小,activation 是在内层使用的激活函数。

 

nn_architecture = [
    {"input_dim": 2, "output_dim": 4, "activation": "relu"},
    {"input_dim": 4, "output_dim": 6, "activation": "relu"},
    {"input_dim": 6, "output_dim": 6, "activation": "relu"},
    {"input_dim": 6, "output_dim": 4, "activation": "relu"},
    {"input_dim": 4, "output_dim": 1, "activation": "sigmoid"},
]

Snippet 1:包含描述特定神经网络参数的列表。该列表对应图 1 所示的 NN。

 

如果你对这个话题很熟悉,你可能已经在脑海中听到一个焦虑的声音:「嘿,嘿!这里有问题!有些领域是不必要的……」是的,这次你内心的声音是对的。前一层输出的向量是下一层的输入,所以实际上只知道一个向量的大小就足够了。但我特意使用以下符号来保持所有层之间目标的一致性,使那些刚接触这一课题的人更容易理解代码。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值