深度学习基础:基于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为例,包括一个输入层、一个隐藏层和一个输出层。
import numpy as np
# 定义输入层到隐藏层的权重和偏置
input_to_hidden = np.array([[0.1, 0.2, 0.3], [0.4, 0.5, 0.6]])
hidden_bias = np.array([0.2, 0.3, 0.4])
# 定义隐藏层到输出层的权重和偏置
hidden_to_output = np.array([[0.7, 0.8], [0.9, 1.0]])
output_bias = np.array([0.5, 0.6])
接下来,我们定义前向传播函数。该函数将根据输入数据、权重和偏置计算网络的输出。
def forward_propagation(input_data):
# 计算隐藏层的输出
hidden_output = np.dot(input_data, input_to_hidden) + hidden_bias
# 应用激活函数(这里使用ReLU函数作为示例)
hidden_output = np.maximum(hidden_output, 0)
# 计算输出层的输出
output_data = np.dot(hidden_output, hidden_to_output) + output_bias
# 应用激活函数(这里使用Sigmoid函数作为示例)
output_data = 1 / (1 + np.exp(-output_data))
return output_data
二、反向传播算法的训练过程
反向传播算法通过比较预测值和实际值,计算误差,并根据误差调整权重和偏置。这里我们使用均方误差(MSE)作为损失函数。
首先,定义一个函数来计算损失:
def compute_loss(predictions, targets):
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

发表评论
登录后可评论,请前往 登录 或 注册