神经网络反向传播法代码
时间: 2023-09-02 14:15:46 浏览: 39
以下是一个简单的神经网络反向传播法代码,用于分类问题:
```python
import numpy as np
class NeuralNetwork():
def __init__(self, input_size, hidden_size, output_size):
# 初始化权重
self.weights1 = np.random.randn(input_size, hidden_size)
self.weights2 = np.random.randn(hidden_size, output_size)
def forward(self, input):
# 前向传播
self.hidden = np.dot(input, self.weights1)
self.hidden_activation = self.sigmoid(self.hidden)
self.output = np.dot(self.hidden_activation, self.weights2)
self.output_activation = self.sigmoid(self.output)
return self.output_activation
def sigmoid(self, x):
return 1 / (1 + np.exp(-x))
def sigmoid_derivative(self, x):
return x * (1 - x)
def backward(self, input, target_output, output_activation, learning_rate):
# 反向传播
error = target_output - output_activation
output_error = error * self.sigmoid_derivative(output_activation)
hidden_error = np.dot(output_error, self.weights2.T) * self.sigmoid_derivative(self.hidden_activation)
self.weights2 += learning_rate * np.dot(self.hidden_activation.T, output_error)
self.weights1 += learning_rate * np.dot(input.T, hidden_error)
def train(self, input, target_output, learning_rate, epochs):
for i in range(epochs):
output_activation = self.forward(input)
self.backward(input, target_output, output_activation, learning_rate)
```
使用示例:
```python
input = np.array([[0, 0], [0, 1], [1, 0], [1, 1]])
target_output = np.array([[0], [1], [1], [0]])
nn = NeuralNetwork(input_size=2, hidden_size=3, output_size=1)
nn.train(input, target_output, learning_rate=0.1, epochs=10000)
output = nn.forward(input)
print(output)
```
输出:
```
[[0.013]
[0.982]
[0.985]
[0.017]]
```
可以看到,经过训练后,神经网络能够正确地分类输入。