理解神经网络:11行Python代码实现与反向传播
需积分: 9 150 浏览量
更新于2024-09-08
收藏 261KB PDF 举报
"11行Python代码实现神经网络,详细介绍了反向传播的数学推导。适合对求导有一定了解的初学者学习。"
在神经网络的领域中,理解和实现一个简单的模型对于初学者来说至关重要。这篇文档通过11行Python代码展示了如何构建一个单层神经网络,并详细阐述了反向传播的过程。该网络使用了Sigmoid激活函数,并针对给定的输入数据集进行训练。
首先,我们来看代码中的关键部分。`nonlin` 函数代表了Sigmoid激活函数,它在神经网络中用于非线性转换。当`deriv=True`时,该函数返回Sigmoid的导数值,这在反向传播中用于计算梯度。
```python
def nonlin(x, deriv=False):
if(deriv == True):
return x * (1 - x)
return 1 / (1 + np.exp(-x))
```
接下来,我们有输入数据集 `X` 和期望输出数据集 `y`。这些数据被用来训练网络。这里使用了4个二进制输入样本和相应的输出值。
```python
X = np.array([[0, 0, 1],
[0, 1, 1],
[1, 0, 1],
[1, 1, 1]])
y = np.array([[0, 0, 1, 1]]).T
```
网络的权重初始化为随机值,平均值为0。
```python
syn0 = 2 * np.random.random((3, 1)) - 1
```
接下来的循环是训练过程,执行了10000次迭代。在这个过程中,前向传播计算当前输入到输出的预测值,然后反向传播计算误差并更新权重。
```python
for iter in range(10000):
# 前向传播
l0 = X
l1 = nonlin(np.dot(l0, syn0))
# 计算误差(损失函数)
l1_error = y - l1
# 计算梯度(反向传播)
l1_delta = l1_error * nonlin(l1, True)
# 更新权重
syn0 += np.dot(l0.T, l1_delta)
```
损失函数在这里使用的是均方误差(MSE),定义为:ℒ𝑦,𝑦=(𝑦′−𝑦)²/2,其中`𝑦′`是网络的预测输出,`𝑦`是实际输出,`𝑙1`是隐藏层的激活值。这个损失函数衡量了预测值与实际值之间的差异。
通过不断迭代,网络会逐渐调整权重以最小化损失函数,从而更准确地预测输出。在训练结束后,`l1`的输出将作为训练数据的预测结果。
这个简单的单层神经网络模型,虽然简单,但包含了神经网络学习的基本原理。它可以帮助初学者理解神经网络的运作机制,以及如何使用Python和NumPy实现这些概念。对于想要深入学习深度学习的读者来说,这是一个很好的起点。
2024-12-02 上传
190 浏览量
2023-11-20 上传
107 浏览量
3052 浏览量
2022-09-20 上传
1771 浏览量
190 浏览量
点击了解资源详情
addresser
- 粉丝: 0
- 资源: 7
最新资源
- 10-Days-of-[removed]该存储库包含针对Hackerrank的10天Javascript挑战的代码解决方案
- 初级java笔试题-jwasham:杰瓦萨姆
- commons-net-jar包.zip
- seed-datepicker:Seed框架的可自定义的datepicker组件
- Bloc_Api_token
- lxdfile:LXD容器的类似于Dockerfile的文件格式
- 蔬菜品种的分类——果菜类
- Unity 2018.1 中文手册 中文文档
- pugsql:一个受HugSQL启发的Python数据库库
- 人机交互项目
- abpMVC.zip
- 生鲜商品:超市生鲜食品经营要求
- Shipped.io Iraq-crx插件
- Machine-Learning-Project:机器学习天气对酒点的影响
- ENV Alert - 本番環境で警告表示-crx插件
- lain:Rust内置的Fuzzer框架