深度学习基础:基于Numpy的前馈神经网络(FFN)构建与反向传播训练

作者:热心市民鹿先生2024.01.17 13:44浏览量:16

简介:本文将介绍如何使用Numpy构建前馈神经网络(Feed-Forward Neural Network,FFN),并使用反向传播算法进行训练。我们将从基础概念入手,逐步深入到代码实现,旨在帮助读者理解深度学习中的基本原理和操作。

千帆应用开发平台“智能体Pro”全新上线 限时免费体验

面向慢思考场景,支持低代码配置的方式创建“智能体Pro”应用

立即体验

深度学习机器学习的一个重要分支,它模拟了人脑神经网络的工作方式。前馈神经网络(Feed-Forward Neural Network,FFN)是深度学习中最基础的网络结构之一。它由输入层、隐藏层和输出层组成,数据从输入层到输出层单向传播,不发生回流。反向传播算法则是用于训练神经网络的常用优化算法。
在开始之前,我们需要安装Numpy库。Numpy是Python中用于进行科学计算的强大库,提供了多维数组对象、各种派生对象(如:matrices、polynomial、fft等)以及用于操作这些对象的函数。
一、前馈神经网络(FFN)的构建
在Numpy中构建FFN,首先需要定义各层的权重和偏置。这里我们以一个简单的两层FFN为例,包括一个输入层、一个隐藏层和一个输出层。

  1. import numpy as np
  2. # 定义输入层到隐藏层的权重和偏置
  3. input_to_hidden = np.array([[0.1, 0.2, 0.3], [0.4, 0.5, 0.6]])
  4. hidden_bias = np.array([0.2, 0.3, 0.4])
  5. # 定义隐藏层到输出层的权重和偏置
  6. hidden_to_output = np.array([[0.7, 0.8], [0.9, 1.0]])
  7. output_bias = np.array([0.5, 0.6])

接下来,我们定义前向传播函数。该函数将根据输入数据、权重和偏置计算网络的输出。

  1. def forward_propagation(input_data):
  2. # 计算隐藏层的输出
  3. hidden_output = np.dot(input_data, input_to_hidden) + hidden_bias
  4. # 应用激活函数(这里使用ReLU函数作为示例)
  5. hidden_output = np.maximum(hidden_output, 0)
  6. # 计算输出层的输出
  7. output_data = np.dot(hidden_output, hidden_to_output) + output_bias
  8. # 应用激活函数(这里使用Sigmoid函数作为示例)
  9. output_data = 1 / (1 + np.exp(-output_data))
  10. return output_data

二、反向传播算法的训练过程
反向传播算法通过比较预测值和实际值,计算误差,并根据误差调整权重和偏置。这里我们使用均方误差(MSE)作为损失函数。
首先,定义一个函数来计算损失:

  1. def compute_loss(predictions, targets):
  2. return np.mean((predictions - targets)**2)

然后,定义反向传播函数。该函数根据损失值和梯度下降算法更新权重和偏置。
```python
def backward_propagation(input_data, targets):

前向传播计算得到预测值

predictions = forward_propagation(input_data)

计算损失值

loss = compute_loss(predictions, targets)

初始化梯度数组(与权重和偏置同形状)

hidden_grad = np.zeros(input_to_hidden.shape)
output_grad = np.zeros(hidden_to_output.shape)

计算隐藏层到输出层的梯度(根据链式法则求导)

output_grad = np.dot(hidden_output, (2(predictions - targets) output_data (1 - output_data))) (1 - forward_propagation(input_data))

计算输入层到隐藏层的梯度(根据链式法则求导)

hidden_grad = np.dot(input_data, (2(forward_propagation(input_data) - targets) hidden_output (1 - hidden_output))) (1 - forward_propagation(input_data))

根据梯度下降算法更新权重和偏置(这里学习率设为0.1)

inputto_hidden -= 0.1 * hidden

article bottom image

相关文章推荐

发表评论