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 函数将训练集和测试集的特征和标签连接在一起,并使用连接后的数据计算损失函数并进行反向传播。这种方法可以帮助模型更好地学习数据分布,从而提高模型的泛化能力。

需要注意的是,将测试集数据用于训练可能会导致模型过拟合测试集,从而降低模型在未见过的数据上的预测性能。因此,在使用这种方法时需要谨慎,并根据实际情况进行调整。

PyTorch神经网络模型训练:将测试集数据用于训练以优化模型参数

原文地址: https://www.cveoy.top/t/topic/nfso 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录