Python实现的人工神经网络算法示例【基于反向传播算法】
一、人工神经网络算法简介
人工神经网络(Artificial Neural Network,ANN)是一种模拟人脑神经元结构和功能的计算模型,它由大量的神经元(节点)组成,这些神经元之间通过连接权重相互连接,每个神经元接收来自其他神经元的输入信号,对这些信号进行加权求和,然后通过激活函数处理,得到输出信号,神经网络的基本结构包括输入层、隐藏层和输出层。
反向传播算法(Backpropagation Algorithm)是人工神经网络中最常用的一种训练算法,它通过计算网络输出与实际目标之间的误差,然后按照梯度下降法更新连接权重,使网络的输出逐渐接近目标值,反向传播算法的核心思想是:误差从输出层向输入层逐层传递,每一层根据误差调整其连接权重。
二、基于反向传播算法的人工神经网络实现
下面以一个简单的三层全连接神经网络为例,介绍如何用Python实现基于反向传播算法的人工神经网络。
1. 导入所需库
import numpy as np
2. 定义激活函数及其导数
def sigmoid(x): return 1 / (1 + np.exp(-x)) def sigmoid_derivative(x): return x * (1 - x)
3. 初始化网络参数
input_layer_size = 3 hidden_layer_size = 4 output_layer_size = 2 np.random.seed(0) W1 = np.random.randn(input_layer_size, hidden_layer_size) b1 = np.zeros((1, hidden_layer_size)) W2 = np.random.randn(hidden_layer_size, output_layer_size) b2 = np.zeros((1, output_layer_size))
4. 定义前向传播过程
def forward_propagation(X, W1, b1, W2, b2): Z1 = np.dot(X, W1) + b1 a1 = sigmoid(Z1) Z2 = np.dot(a1, W2) + b2 a2 = sigmoid(Z2) return a1, a2
5. 定义反向传播过程
def backward_propagation(X, Y, a1, a2, W1, W2, b1, b2): m = X.shape[1] dZ2 = a2 - Y dW2 = (1 / m) * np.dot(a1.T, dZ2) db2 = (1 / m) * np.sum(dZ2, axis=0, keepdims=True) dZ1 = np.dot(dZ2, W2.T) * sigmoid_derivative(a1) dW1 = (1 / m) * np.dot(X.T, dZ1) db1 = (1 / m) * np.sum(dZ1, axis=0, keepdims=True) return dW1, dW2, db1, db2
6. 定义训练过程
def train(X, Y, input_layer_size, hidden_layer_size, output_layer_size, learning_rate, num_iterations): W1 = np.random.randn(input_layer_size, hidden_layer_size) b1 = np.zeros((1, hidden_layer_size)) W2 = np.random.randn(hidden_layer_size, output_layer_size) b2 = np.zeros((1, output_layer_size)) for i in range(num_iterations): a1, a2 = forward_propagation(X, W1, b1, W2, b2) dW1, dW2, db1, db2 = backward_propagation(X, Y, a1, a2, W1, W2, b1, b2) W1 -= learning_rate * dW1 b1 -= learning_rate * db1 W2 -= learning_rate * dW2 b2 -= learning_rate * db2 if i % 1000 == 0: print("Iteration: " + str(i), "Cost: " + str(np.mean((a2 - Y) ** 2))) return W1, b1, W2, b2
7. 测试训练好的网络
```python
X = np.array([0, 0]) # 输入数据,这里仅作示例,实际应用中需要替换为真实数据。
Y = np.array([0]) # 期望输出,这里仅作示例,实际应用中需要替换为真实数据。
input_layer_size = 3 # 输入层神经元数量,这里仅作示例,实际应用中需要替换为真实数据。
hidden_layer_size = 4 # 隐藏层神经元数量,这里仅作示例,实际应用中需要替换为真实数据。
output_layer_size = 2 # 输出层神经元数量,这里仅作示例,实际应用中需要替换为真实数据。
learning_rate = 0.05 # 学习率,可以根据实际情况进行调整,num_iterations = 5000 # 迭代次数,可以根据实际情况进行调整。
免责声明:本文内容来自用户上传并发布,站点仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。请核实广告和内容真实性,谨慎使用。