Python 实现带解释的 2 输入 3 输出 BP 神经网络
下面是一个包含两个输入神经元和三个输出神经元的 BP 神经网络的 Python 代码:
import numpy as np
class NeuralNetwork:
def __init__(self):
# 初始化权重
self.weights1 = np.random.rand(2, 3) # 输入层到隐藏层的权重矩阵
self.weights2 = np.random.rand(3, 3) # 隐藏层到输出层的权重矩阵
def sigmoid(self, x):
# sigmoid激活函数
return 1 / (1 + np.exp(-x))
def sigmoid_derivative(self, x):
# sigmoid激活函数的导数
return x * (1 - x)
def feedforward(self, inputs):
# 前向传播
self.hidden_layer = self.sigmoid(np.dot(inputs, self.weights1))
self.output_layer = self.sigmoid(np.dot(self.hidden_layer, self.weights2))
return self.output_layer
def backpropagation(self, inputs, targets, learning_rate):
# 反向传播
output_error = targets - self.output_layer
output_delta = output_error * self.sigmoid_derivative(self.output_layer)
hidden_error = output_delta.dot(self.weights2.T)
hidden_delta = hidden_error * self.sigmoid_derivative(self.hidden_layer)
self.weights2 += self.hidden_layer.T.dot(output_delta) * learning_rate
self.weights1 += inputs.T.dot(hidden_delta) * learning_rate
def train(self, inputs, targets, learning_rate, epochs):
for epoch in range(epochs):
self.feedforward(inputs)
self.backpropagation(inputs, targets, learning_rate)
def predict(self, inputs):
return self.feedforward(inputs)
# 创建神经网络对象
nn = NeuralNetwork()
# 输入数据
inputs = np.array([[0, 0], [0, 1], [1, 0], [1, 1]])
# 目标输出
targets = np.array([[0, 0, 0], [1, 0, 1], [1, 0, 1], [1, 1, 0]])
# 训练神经网络
nn.train(inputs, targets, learning_rate=0.1, epochs=10000)
# 预测新数据
new_inputs = np.array([[0, 0]])
print(nn.predict(new_inputs))
这个神经网络包含一个隐藏层,隐藏层有三个神经元。'weights1'是输入层到隐藏层的权重矩阵,'weights2'是隐藏层到输出层的权重矩阵。'sigmoid'函数是激活函数,'sigmoid_derivative'函数是sigmoid函数的导数。
'feedforward'函数执行前向传播,根据输入和权重计算隐藏层和输出层的输出。'backpropagation'函数执行反向传播,根据输出误差和其导数调整权重。'train'函数用于训练神经网络,通过多次迭代前向传播和反向传播来更新权重。'predict'函数用于预测新的输入数据。
在示例中,输入数据是逻辑门的输入(AND、OR等),目标输出是逻辑门的输出。训练神经网络后,可以使用'predict'函数预测新的输入数据的输出。
原文地址: https://www.cveoy.top/t/topic/qqAL 著作权归作者所有。请勿转载和采集!