bp神经网络多元回归预测单层隐藏层relu函数代码
时间: 2023-09-10 12:08:24 浏览: 28
以下是使用TensorFlow实现单层隐藏层、ReLU激活函数的BP神经网络多元回归预测的代码示例:
```python
import tensorflow as tf
import numpy as np
# 定义BP神经网络模型
class Net(tf.keras.Model):
def __init__(self, input_size, hidden_size, output_size):
super(Net, self).__init__()
self.fc1 = tf.keras.layers.Dense(hidden_size, activation=tf.nn.relu, input_shape=(input_size,))
self.fc2 = tf.keras.layers.Dense(output_size)
def call(self, x):
out = self.fc1(x)
out = self.fc2(out)
return out
# 定义输入、隐藏和输出层的维度
input_size = 10
hidden_size = 5
output_size = 1
# 构造训练数据
x_train = np.random.rand(100, input_size).astype(np.float32)
y_train = np.random.rand(100, output_size).astype(np.float32)
# 实例化BP神经网络模型
net = Net(input_size, hidden_size, output_size)
# 定义损失函数和优化器
criterion = tf.keras.losses.MeanSquaredError()
optimizer = tf.keras.optimizers.SGD(learning_rate=0.01)
# 迭代训练模型
num_epochs = 1000
for epoch in range(num_epochs):
# 前向传播
with tf.GradientTape() as tape:
outputs = net(x_train)
loss = criterion(outputs, y_train)
# 反向传播和优化
gradients = tape.gradient(loss, net.trainable_variables)
optimizer.apply_gradients(zip(gradients, net.trainable_variables))
# 每隔100轮输出一次损失值
if (epoch+1) % 100 == 0:
print('Epoch [{}/{}], Loss: {:.4f}'.format(epoch+1, num_epochs, loss.numpy()))
# 利用训练好的模型进行预测
x_test = np.random.rand(10, input_size).astype(np.float32)
pred = net(x_test)
print(pred.numpy())
```
其中,`Net`类定义了一个单层隐藏层、ReLU激活函数的BP神经网络模型,`criterion`定义了损失函数,`optimizer`定义了优化器,`num_epochs`表示训练轮数。在迭代训练过程中,先进行前向传播计算输出和损失,再进行反向传播和优化更新参数。最后,利用训练好的模型进行预测。