写一个基于pytorch的多对多回归预测,data.csv文件前四列为特征,剩下五十列为标签,输出损失实时变化图
时间: 2023-02-11 07:19:33 浏览: 75
下面是一个基于 PyTorch 的多对多回归预测的示例代码:
```python
import torch
import torch.nn as nn
import torch.optim as optim
import matplotlib.pyplot as plt
# 读取 csv 文件
import pandas as pd
data = pd.read_csv("data.csv")
X = data.iloc[:, :4] # 前 4 列为特征
Y = data.iloc[:, 4:] # 剩余的 50 列为标签
# 划分训练集和测试集
from sklearn.model_selection import train_test_split
X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=0.2)
# 转换为 PyTorch 张量
X_train = torch.tensor(X_train.values).float()
X_test = torch.tensor(X_test.values).float()
Y_train = torch.tensor(Y_train.values).float()
Y_test = torch.tensor(Y_test.values).float()
# 定义模型
class RegressionModel(nn.Module):
def __init__(self):
super().__init__()
self.linear = nn.Linear(4, 50) # 4 个输入特征,50 个输出标签
def forward(self, x):
y_pred = self.linear(x)
return y_pred
model = RegressionModel()
# 定义损失函数和优化器
criterion = nn.MSELoss()
optimizer = optim.SGD(model.parameters(), lr=0.01)
# 记录损失值
losses = []
# 训练模型
for epoch in range(500):
# 前向传播
y_pred = model(X_train)
# 计算损失
loss = criterion(y_pred, Y_train)
losses.append(loss.item())
# 反向传播
optimizer.zero_grad()
loss.backward()
optimizer.step()
if (epoch + 1) % 50 == 0:
print(f'epoch {epoch+1}, loss = {loss.item():.4f}')
# 绘制损失变化图
plt.plot(losses)
plt.xlabel('epoch')
plt.ylabel('loss')
plt.show()
# 在