当前位置:首页 > 神经网络 > 正文

bp神经网络python代码

BP(反向传播)神经网络是一种常用的前馈神经网络,在Python中实现BP神经网络通常需要以下几个步骤:
1. 导入必要的库:

使用NumPy处理数学运算。
使用Matplotlib进行结果可化(可选)。
2. 定义网络结构:
确定网络层数和每层的神经元数量。
初始化权重和偏置。
3. 定义活函数:
通常使用Sigmoid、Tanh或ReLU作为活函数。
4. 定义损失函数:
通常使用均方误差(MSE)或交叉熵损失。
5. 前向传播:
计算每一层的输出。
6. 反向传播:
根据损失函数计算梯度。
更新权重和偏置。
7. 训练网络:
循环迭代前向和反向传播过程。
以下是一个简单的BP神经网络Python代码示例:
python import numpy as np
活函数及其导数 def sigmoid(x): return 1 / (1 + np.exp(-x))
def sigmoid_derivative(x): return x (1
x)
初始化权重和偏置 np.random.seed(42) input_size = 2 hidden_size = 2 output_size = 1

权重和偏置 weights_input_hidden = np.random.rand(input_size, hidden_size) weights_hidden_output = np.random.rand(hidden_size, output_size) bias_hidden = np.random.rand(hidden_size) bias_output = np.random.rand(output_size)
训练数据 X = np.array([[0, 0], [0, 1], [1, 0], [1, 1]]) y = np.array([[0], [1], [1], [0]])
学习率 learning_rate = 0.1

训练网络 for epoch in range(1000): 前向传播 hidden_layer_input = np.dot(X, weights_input_hidden) hidden_layer_output = sigmoid(hidden_layer_input + bias_hidden) final_output = np.dot(hidden_layer_output, weights_hidden_output) output = sigmoid(final_output + bias_output) 计算损失 error = y
output cost = np.mean(np.square(error)) 反向传播 d_output = error sigmoid_derivative(output) d_hidden_layer_output = np.dot(d_output, weights_hidden_output.T) d_hidden_layer_input = d_hidden_layer_output sigmoid_derivative(hidden_layer_output) 更新权重和偏置 weights_hidden_output += np.dot(hidden_layer_output.T, d_output) learning_rate bias_output += np.sum(d_output, axis=0, keepdims=True) learning_rate weights_input_hidden += np.dot(X.T, d_hidden_layer_input) learning_rate bias_hidden += np.sum(d_hidden_layer_input, axis=0, keepdims=True) learning_rate
if epoch % 100 == 0: print(f'Epoch {epoch}, Cost: {cost}')
输出最终结果 print(f'Final output: {output}')
这个简单的例子实现了一个具有一个隐层的BP神经网络,它使用Sigmoid活函数。 在实际应用中,你可能需要更复杂的网络结构和更先进的优化技术,例如使用批量梯度下降、动量、自适应学习率等。 此外,为了提高性能,建议使用深度学习框架如TensorFlow或PyTorch,它们提供了大量预先实现的神经网络结构和优化算法。