import torch
import pandas as pd
import numpy as np
# 定义数据集合 label为Y标记
df = pd.DataFrame({
'id':[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20],
'age':[33,23,45,76,43,23,34,39,19,36,55,83,26,26,43,25,19,23,32,42],
'class':[1,2,3,4,3,4,3,2,1,1,1,3,2,3,4,4,4,2,1,3],
'score1':[98,96,56,88,75,34,56,37,28,54,68,35,77,55,35,12,45,87,43,89],
'score2':[47,32,56,87,34,65,32,56,34,83,26,33,97,95,79,77,98,44,38,65],
'label':[0,0,0,0,0,0,1,1,1,1,1,0,1,0,1,0,1,1,0,0],
})
# X变量列表
var_list = ['age','class','score1','score2']
# Y变量列表
Y = 'label'
# 定义一个模型的结构
class model(torch.nn.Module):
def __init__(self):
super(model,self).__init__()
self.line1 = torch.nn.Linear(4,2) # 线性层 4个输入特征,2个输出特征
self.relu = torch.nn.ReLU() # ReLU激活函数
self.line2 = torch.nn.Linear(2,1) # 线性层 2个输入特征,1个输出特征
def forward(self,input):
x3 = self.line1(input)
x4 = self.relu(x3)
x5 = self.line2(x4)
return x5
# 将模型实例化
mymodel = model()
optimizer = torch.optim.Adam(mymodel.parameters(),lr=0.001) # Adam优化器
lossf = torch.nn.BCEWithLogitsLoss() # 二分类任务的损失函数
# 数据集处理
train_da = torch.tensor(df[var_list].values,dtype=torch.float32) # 将X变量转换为Tensor格式
train_lab = torch.tensor(df[Y].values,dtype=torch.float32) # 将Y变量转换为Tensor格式
train_dataset = torch.utils.data.TensorDataset(train_da,train_lab) # 创建数据集对象,将X和Y合并成一个数据集
traind = torch.utils.data.DataLoader(train_dataset,batch_size=5,shuffle=False) # 创建数据加载器,用于批量处理数据
# 模型训练
for jj in range(5): # 迭代5次进行模型训练
i = 0
for x,y0 in traind: # 遍历批量数据
i = i+1
y = mymodel(x) # 通过模型进行预测
loss = lossf(y,y0.float().unsqueeze(1)) # 计算损失
optimizer.zero_grad() # 梯度清零
loss.backward() # 反向传播计算梯度
optimizer.step() # 更新模型参数
print(jj,i,loss.item()) # 打印训练过程中的损失值
if torch.isnan(loss).item(): # 如果损失为NaN,则停止训练
break
# 模型使用
yy = mymodel(train_da) # 使用训练好的模型进行预测
使用dataframe基于pytorch训练神经网络模型的例子
最新推荐文章于 2024-05-10 20:08:01 发布