could not determine the shape of object type 'Series' 基于Pytorch评估多层感知机在测试集上预测结果,预测指标包括MSE、MAE、RMSE、MAPE、R2,并画出网络训练过程的loss曲线及r2值变化曲线
时间: 2024-04-08 11:35:07 浏览: 149
出现"could not determine the shape of object type 'Series'"的错误通常是因为在将数据转换为PyTorch张量时,数据的形状或类型不匹配。请确保数据的维度和类型正确,并根据需要进行相应的调整。
以下是基于PyTorch评估多层感知机在测试集上预测结果,并计算预测指标的示例代码:
```python
import torch
import torch.nn as nn
import pandas as pd
import numpy as np
from sklearn.metrics import mean_squared_error, mean_absolute_error, r2_score
import matplotlib.pyplot as plt
# 加载模型
model = MLP(input_size=13) # 假设已经定义了MLP模型
# 加载测试集数据
X_test = torch.tensor(X_test, dtype=torch.float32)
y_test = torch.tensor(y_test, dtype=torch.float32)
# 开启评估模式
model.eval()
# 预测结果
with torch.no_grad():
y_pred = model(X_test)
# 将张量转换为numpy数组
y_test = y_test.numpy()
y_pred = y_pred.numpy()
# 计算预测指标
mse = mean_squared_error(y_test, y_pred)
mae = mean_absolute_error(y_test, y_pred)
rmse = np.sqrt(mse)
mape = np.mean(np.abs((y_test - y_pred) / y_test)) * 100
r2 = r2_score(y_test, y_pred)
print(f"MSE: {mse:.4f}")
print(f"MAE: {mae:.4f}")
print(f"RMSE: {rmse:.4f}")
print(f"MAPE: {mape:.4f}")
print(f"R2: {r2:.4f}")
# 绘制loss曲线
plt.plot(loss_values)
plt.xlabel('Epoch')
plt.ylabel('Loss')
plt.title('Training Loss')
plt.show()
# 绘制r2值变化曲线
plt.plot(r2_values)
plt.xlabel('Epoch')
plt.ylabel('R2 Score')
plt.title('R2 Score Variation')
plt.show()
```
在上述代码中,我们首先加载已训练好的模型。然后,将测试集数据转换为PyTorch张量,并将模型切换到评估模式。接下来,使用模型进行预测,并将预测结果和真实标签转换为numpy数组。随后,计算了预测指标,包括均方误差(MSE)、平均绝对误差(MAE)、均方根误差(RMSE)、平均绝对百分比误差(MAPE)和确定系数(R2)。最后,绘制了网络训练过程中的损失曲线和R2值变化曲线。
请注意,以上代码仅为示例,实际使用时需要根据具体情况进行适当的调整。
阅读全文