import torch import torch.nn as nn import pandas as pd from sklearn.preprocessing import StandardScaler

读入 Excel 表格并进行标准化处理

data = pd.read_excel('C:\Users\lenovo\Desktop\HIV\DNN神经网络测试\data1.xlsx') y = data['state'] X = data.drop(['state'], axis=1) sc = StandardScaler() X = sc.fit_transform(X)

定义第一个模型

class Model1(nn.Module): def init(self, input_dim, output_dim): super(Model1, self).init() self.fc1 = nn.Linear(input_dim, 64) self.fc2 = nn.Linear(64, 32) self.fc3 = nn.Linear(32, output_dim) self.dropout = nn.Dropout(p=0.5) self.relu = nn.ReLU() self.softmax = nn.Softmax(dim=1)

def forward(self, x):
    out = self.fc1(x)
    out = self.relu(out)
    out = self.dropout(out)
    out = self.fc2(out)
    out = self.relu(out)
    out = self.dropout(out)
    out = self.fc3(out)
    out = self.softmax(out)
    return out

定义第二个模型

class Model2(nn.Module): def init(self, input_dim, output_dim): super(Model2, self).init() self.fc1 = nn.Linear(input_dim, 64) self.fc2 = nn.Linear(64, 32) self.fc3 = nn.Linear(32, output_dim) self.dropout = nn.Dropout(p=0.5) self.relu = nn.ReLU() self.sigmoid = nn.Sigmoid()

def forward(self, x):
    out = self.fc1(x)
    out = self.relu(out)
    out = self.dropout(out)
    out = self.fc2(out)
    out = self.relu(out)
    out = self.dropout(out)
    out = self.fc3(out)
    out = self.sigmoid(out)
    return out

定义训练函数

def train(model, optimizer, criterion, X, y): model.train() optimizer.zero_grad() outputs = model(X) loss = criterion(outputs, y) loss.backward() optimizer.step() acc = (outputs.argmax(dim=1) == y).float().mean() return loss, acc

定义参数

input_dim = X.shape[1] output_dim1 = 4 output_dim2 = 1 lr = 0.001 epochs1 = 100 epochs2 = 100 batch_size = 64

初始化模型和优化器

model1 = Model1(input_dim, output_dim1) model2 = Model2(output_dim1, output_dim2) criterion = nn.CrossEntropyLoss() optimizer1 = torch.optim.Adam(model1.parameters(), lr=lr) optimizer2 = torch.optim.Adam(model2.parameters(), lr=lr)

第一个模型训练

for epoch in range(epochs1): for i in range(0, X.shape[0], batch_size): batch_X = torch.tensor(X[i:i+batch_size], dtype=torch.float32) batch_y = torch.tensor(y[i:i+batch_size], dtype=torch.long) loss, acc = train(model1, optimizer1, criterion, batch_X, batch_y) print('Epoch [{}/{}], Step [{}/{}], Loss: {:.4f}, Accuracy: {:.2f}%' .format(epoch+1, epochs1, i//batch_size+1, X.shape[0]//batch_size, loss.item(), acc.item()*100))

第二个模型训练

X = model1.fc3(torch.tensor(X, dtype=torch.float32)).detach().numpy() for epoch in range(epochs2): for i in range(0, X.shape[0], batch_size): batch_X = torch.tensor(X[i:i+batch_size], dtype=torch.float32) batch_y = torch.tensor(y[i:i+batch_size], dtype=torch.float32) loss, acc = train(model2, optimizer2, criterion, batch_X, batch_y) print('Epoch [{}/{}], Step [{}/{}], Loss: {:.4f}, Accuracy: {:.2f}%' .format(epoch+1, epochs2, i//batch_size+1, X.shape[0]//batch_size, loss.item(), acc.item()*100))

基于基因表达量的患者患病预测:使用 Python 编写 DNN 神经网络

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

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