请随机创建一份单输入单输出的200个数据点的数据集,以7:3的比例分为训练集和测试集。并用以paddlepaddle框架写一份单输入单输出,中间层待定的全连接神经网络代码,对训练集进行回归训练,对测试集进行预测,并进行mae和rmse评估,绘出R图。最后将模型保存。要求代码每一步骤有详细的注释
时间: 2023-12-14 07:39:43 浏览: 85
数据集目录,其中 包含均匀伪随机序列的示例.rar
生成数据集
为了生成数据集,我们使用numpy库。我们随机生成200个数据点,每个数据点有一个输入x和一个输出y。其中,x是在0到1之间均匀分布的随机数,y是x的平方加上一个正态分布的噪声。代码实现如下:
```python
import numpy as np
# 设置随机数种子,确保每次运行结果一致
np.random.seed(42)
# 生成200个数据点
num_points = 200
# 生成输入x,范围在0到1之间
x = np.random.uniform(0, 1, num_points)
# 生成输出y,y = x^2 + noise,其中noise是正态分布的噪声
noise = np.random.normal(0, 0.1, num_points)
y = x ** 2 + noise
# 将数据集拆分为训练集和测试集,比例为7:3
train_ratio = 0.7
num_train = int(num_points * train_ratio)
indices = np.random.permutation(num_points)
train_indices, test_indices = indices[:num_train], indices[num_train:]
x_train, y_train = x[train_indices], y[train_indices]
x_test, y_test = x[test_indices], y[test_indices]
```
创建模型
我们使用PaddlePaddle框架来创建一个单输入单输出的全连接神经网络。该网络有一个输入层、一个中间层和一个输出层。输入层只有一个神经元,输出层也只有一个神经元。中间层的神经元个数待定,可以通过调整来找到最优值。代码实现如下:
```python
import paddle
import paddle.nn as nn
# 定义模型
class Net(nn.Layer):
def __init__(self, hidden_size):
super(Net, self).__init__()
self.fc1 = nn.Linear(1, hidden_size)
self.fc2 = nn.Linear(hidden_size, 1)
def forward(self, x):
x = self.fc1(x)
x = nn.functional.relu(x)
x = self.fc2(x)
return x
# 定义超参数
hidden_size = 10 # 中间层神经元个数
learning_rate = 0.01
num_epochs = 1000
# 实例化模型
model = paddle.Model(Net(hidden_size))
# 定义损失函数和优化器
loss_fn = nn.MSELoss()
optimizer = paddle.optimizer.SGD(learning_rate=learning_rate, parameters=model.parameters())
```
训练模型
在训练模型之前,我们需要将数据集转换为PaddlePaddle框架所需的格式。我们使用paddle.to_tensor函数将输入和输出转换为张量。然后,我们使用paddle.io.Dataset和paddle.io.DataLoader来创建数据集和数据加载器。最后,我们使用model.train()函数来训练模型。代码实现如下:
```python
# 将数据集转换为张量
x_train_tensor = paddle.to_tensor(x_train.reshape(-1, 1).astype('float32'))
y_train_tensor = paddle.to_tensor(y_train.reshape(-1, 1).astype('float32'))
x_test_tensor = paddle.to_tensor(x_test.reshape(-1, 1).astype('float32'))
y_test_tensor = paddle.to_tensor(y_test.reshape(-1, 1).astype('float32'))
# 创建数据集和数据加载器
train_dataset = paddle.io.TensorDataset(x_train_tensor, y_train_tensor)
train_loader = paddle.io.DataLoader(train_dataset, batch_size=10, shuffle=True)
# 训练模型
model.prepare(loss_fn, optimizer)
history = model.fit(train_loader, epochs=num_epochs, verbose=1)
```
预测并评估模型
在模型训练完成后,我们使用model.evaluate()函数来对测试集进行预测,并计算MAE和RMSE。我们还使用matplotlib库来绘制R图。代码实现如下:
```python
import matplotlib.pyplot as plt
# 对测试集进行预测
y_pred_tensor = model.predict_batch(x_test_tensor)
y_pred = y_pred_tensor.numpy()
# 计算MAE和RMSE
mae = np.mean(np.abs(y_pred - y_test))
rmse = np.sqrt(np.mean((y_pred - y_test) ** 2))
print('MAE:', mae)
print('RMSE:', rmse)
# 绘制R图
plt.scatter(y_test, y_pred)
plt.plot(y_test, y_test, 'r')
plt.xlabel('True values')
plt.ylabel('Predictions')
plt.show()
```
保存模型
最后,我们使用model.save()函数来保存模型。代码实现如下:
```python
# 保存模型
model.save('model')
```
完整代码
下面是完整的代码:
阅读全文