神经网络python代码实现
时间: 2023-09-05 08:10:04 浏览: 86
以下是一个简单的神经网络的 Python 代码实现示例:
```python
import numpy as np
# 定义神经网络类
class NeuralNetwork:
def __init__(self, input_size, hidden_size, output_size):
self.input_size = input_size
self.hidden_size = hidden_size
self.output_size = output_size
# 初始化权重和偏置
self.W1 = np.random.randn(self.input_size, self.hidden_size)
self.b1 = np.zeros((1, self.hidden_size))
self.W2 = np.random.randn(self.hidden_size, self.output_size)
self.b2 = np.zeros((1, self.output_size))
# 定义前向传播函数
def forward(self, X):
self.z1 = np.dot(X, self.W1) + self.b1
self.a1 = np.tanh(self.z1)
self.z2 = np.dot(self.a1, self.W2) + self.b2
y_hat = np.exp(self.z2) / np.sum(np.exp(self.z2), axis=1, keepdims=True)
return y_hat
# 定义反向传播函数
def backward(self, X, y, y_hat, learning_rate):
delta3 = y_hat
delta3[range(len(X)), y] -= 1
delta2 = np.dot(delta3, self.W2.T) * (1 - np.power(self.a1, 2))
dW2 = np.dot(self.a1.T, delta3)
db2 = np.sum(delta3, axis=0, keepdims=True)
dW1 = np.dot(X.T, delta2)
db1 = np.sum(delta2, axis=0)
self.W2 -= learning_rate * dW2
self.b2 -= learning_rate * db2
self.W1 -= learning_rate * dW1
self.b1 -= learning_rate * db1
# 定义训练函数
def train(self, X, y, num_epochs, learning_rate):
for epoch in range(num_epochs):
y_hat = self.forward(X)
self.backward(X, y, y_hat, learning_rate)
# 定义预测函数
def predict(self, X):
y_hat = self.forward(X)
return np.argmax(y_hat, axis=1)
```
在此示例中,我们定义了一个三层神经网络,用于分类任务。`__init__` 函数初始化了神经网络的权重和偏置。`forward` 函数执行前向传播,返回预测值 `y_hat`。`backward` 函数执行反向传播,更新权重和偏置。`train` 函数用于训练神经网络,`predict` 函数用于预测结果。
使用示例:
```python
X = np.array([[0, 0], [0, 1], [1, 0], [1, 1]])
y = np.array([0, 1, 1, 0])
nn = NeuralNetwork(2, 4, 2)
nn.train(X, y, num_epochs=10000, learning_rate=0.1)
predictions = nn.predict(X)
print(predictions) # 输出预测结果
```
在此示例中,我们使用 XOR 数据集进行分类。首先,我们定义输入和目标输出。然后,我们初始化神经网络,并使用 `train` 函数训练它。最后,我们使用 `predict` 函数预测结果,并输出预测结果。
阅读全文