PyTorch神经网络模型训练:将测试集数据用于训练以优化模型参数
import torch
import torch.nn as nn
import torch.optim as optim
import pandas as pd
from sklearn.preprocessing import StandardScaler
# 读入数据
train_data = pd.read_excel('C:\Users\lenovo\Desktop\HIV\PAH三个数据集\selected_genes.xlsx')
test_data = pd.read_excel('C:\Users\lenovo\Desktop\HIV\PAH三个数据集\GSE53408 对应lasso基因.xlsx')
# 标准化数据
scaler = StandardScaler()
train_data.iloc[:, 1:] = scaler.fit_transform(train_data.iloc[:, 1:])
test_data.iloc[:, 1:] = scaler.transform(test_data.iloc[:, 1:])
# 划分特征和标签
train_x = train_data.iloc[:, 1:].values
train_y = train_data.iloc[:, 0].values
test_x = test_data.iloc[:, 1:].values
test_y = test_data.iloc[:, 0].values
# 转换为tensor
train_x = torch.from_numpy(train_x).float()
train_y = torch.from_numpy(train_y).unsqueeze(1).float()
test_x = torch.from_numpy(test_x).float()
test_y = torch.from_numpy(test_y).unsqueeze(1).float()
# 定义模型
class Net(nn.Module):
def __init__(self):
super(Net, self).__init__()
self.fc1 = nn.Linear(8, 4)
self.fc2 = nn.Linear(4, 1)
self.sigmoid = nn.Sigmoid()
def forward(self, x):
x = self.fc1(x)
x = self.sigmoid(x)
x = self.fc2(x)
x = self.sigmoid(x)
return x
# 初始化模型、损失函数和优化器
net = Net()
criterion = nn.BCELoss()
optimizer = optim.Adam(net.parameters(), lr=0.01)
# 训练模型
for epoch in range(1000):
optimizer.zero_grad()
outputs = net(torch.cat((train_x, test_x), dim=0))
loss = criterion(outputs, torch.cat((train_y, test_y), dim=0))
loss.backward()
optimizer.step()
if (epoch + 1) % 100 == 0:
print('Epoch [{}/{}], Loss: {:.4f}'.format(epoch + 1, 1000, loss.item()))
# 输出测试集的准确率和损失值
with torch.no_grad():
outputs = net(test_x)
probabilities = outputs.numpy().squeeze()
test_loss = criterion(outputs, test_y)
predicted = (outputs > 0.5).float()
accuracy = (predicted == test_y).float().mean()
print('Test Loss: {:.4f}, Accuracy: {:.4f}'.format(test_loss.item(), accuracy.item()))
在本代码中,我们将测试集数据与训练集数据一起用于训练模型。在每个训练周期中,我们使用 torch.cat 函数将训练集和测试集的特征和标签连接在一起,并使用连接后的数据计算损失函数并进行反向传播。这种方法可以帮助模型更好地学习数据分布,从而提高模型的泛化能力。
需要注意的是,将测试集数据用于训练可能会导致模型过拟合测试集,从而降低模型在未见过的数据上的预测性能。因此,在使用这种方法时需要谨慎,并根据实际情况进行调整。
原文地址: https://www.cveoy.top/t/topic/nfso 著作权归作者所有。请勿转载和采集!