简单二层神经网络用numpy实现
时间: 2023-10-04 12:13:54 浏览: 50
以下是使用numpy实现简单二层神经网络的示例代码:
```python
import numpy as np
class NeuralNetwork:
def __init__(self, input_size, hidden_size, output_size):
self.W1 = np.random.randn(input_size, hidden_size) # 输入层到隐藏层的权重矩阵
self.b1 = np.zeros((1, hidden_size)) # 隐藏层的偏置向量
self.W2 = np.random.randn(hidden_size, output_size) # 隐藏层到输出层的权重矩阵
self.b2 = np.zeros((1, 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
self.a2 = self.sigmoid(self.z2)
return self.a2
def backward(self, X, y, learning_rate):
m = X.shape[0] # 样本数量
# 反向传播更新权重和偏置
delta2 = self.a2 - y
dW2 = (1 / m) * np.dot(self.a1.T, delta2)
db2 = (1 / m) * np.sum(delta2, axis=0, keepdims=True)
delta1 = np.dot(delta2, self.W2.T) * (1 - np.power(self.a1, 2))
dW1 = (1 / m) * np.dot(X.T, delta1)
db1 = (1 / m) * np.sum(delta1, axis=0, keepdims=True)
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, epochs, learning_rate):
for epoch in range(epochs):
output = self.forward(X)
self.backward(X, y, learning_rate)
if epoch % 100 == 0:
loss = self.calculate_loss(y, output)
print(f"Epoch {epoch}, loss: {loss:.4f}")
def predict(self, X):
return self.forward(X)
def calculate_loss(self, y_true, y_pred):
return -np.mean(y_true * np.log(y_pred) + (1 - y_true) * np.log(1 - y_pred))
def sigmoid(self, x):
return 1 / (1 + np.exp(-x))
```
上述代码定义了一个名为NeuralNetwork的类,它具有输入层、隐藏层和输出层。在初始化函数中,随机初始化了权重矩阵和偏置向量。forward函数实现了前向传播,backward函数实现了反向传播和更新权重和偏置。train函数用于训练神经网络,predict函数用于进行预测。calculate_loss函数计算损失函数的值,sigmoid函数实现了激活函数sigmoid。
你可以根据自己的需求修改代码中的参数和结构,比如调整隐藏层的大小、修改激活函数等。然后使用训练集进行训练,最后使用测试集进行预测。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)