bp神经网络多元回归单层隐藏层relu函数代码
时间: 2023-09-10 11:08:24 浏览: 81
以下是一个基于反向传播算法 (BP) 的单层隐藏层神经网络,使用 ReLU 激活函数进行多元回归的 Python 代码实现:
```python
import numpy as np
class NeuralNetwork:
def __init__(self, input_dim, hidden_dim, output_dim):
self.input_dim = input_dim
self.hidden_dim = hidden_dim
self.output_dim = output_dim
self.W1 = np.random.randn(input_dim, hidden_dim)
self.b1 = np.zeros((1, hidden_dim))
self.W2 = np.random.randn(hidden_dim, output_dim)
self.b2 = np.zeros((1, output_dim))
def relu(self, x):
return np.maximum(0, x)
def relu_prime(self, x):
return np.where(x >= 0, 1, 0)
def forward(self, X):
self.Z1 = np.dot(X, self.W1) + self.b1
self.A1 = self.relu(self.Z1)
self.Z2 = np.dot(self.A1, self.W2) + self.b2
self.y_hat = self.Z2
return self.y_hat
def backward(self, X, y, learning_rate):
m = X.shape[0]
delta3 = self.y_hat - y
dW2 = np.dot(self.A1.T, delta3)
db2 = np.sum(delta3, axis=0, keepdims=True)
delta2 = np.dot(delta3, self.W2.T) * self.relu_prime(self.Z1)
dW1 = np.dot(X.T, delta2)
db1 = np.sum(delta2, axis=0)
self.W2 -= learning_rate * dW2 / m
self.b2 -= learning_rate * db2 / m
self.W1 -= learning_rate * dW1 / m
self.b1 -= learning_rate * db1 / m
def train(self, X, y, num_epochs, learning_rate):
for i in range(num_epochs):
y_hat = self.forward(X)
self.backward(X, y, learning_rate)
loss = np.mean(np.square(y_hat - y))
if i % 100 == 0:
print(f"Epoch {i} - Loss: {loss:.4f}")
```
这段代码首先定义了一个 `NeuralNetwork` 类,包含初始化、前向传播、反向传播和训练方法。其中,初始化方法根据输入、隐藏和输出层的维度随机初始化权重和偏置。ReLU 激活函数和其导数的实现分别为 `relu` 和 `relu_prime` 方法。前向传播方法计算输入 `X` 经过神经网络后的预测值 `y_hat`。反向传播方法计算梯度并更新神经网络的权重和偏置。训练方法根据指定的训练轮数和学习率进行训练,每隔 100 轮打印一下损失值。
在训练数据准备好之后,可以通过以下代码进行调用:
```python
X_train = ... # 训练数据
y_train = ... # 训练标签
input_dim = ... # 输入维度
hidden_dim = ... # 隐藏层维度
output_dim = ... # 输出维度
num_epochs = ... # 训练轮数
learning_rate = ... # 学习率
nn = NeuralNetwork(input_dim, hidden_dim, output_dim)
nn.train(X_train, y_train, num_epochs, learning_rate)
```
其中,`X_train` 和 `y_train` 分别是训练数据和标签,`input_dim`、`hidden_dim` 和 `output_dim` 分别是输入、隐藏和输出层的维度,`num_epochs` 是训练轮数,`learning_rate` 是学习率。
阅读全文