使用dataframe基于pytorch训练神经网络模型的例子

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) # 使用训练好的模型进行预测

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
首先,需要将数据存储为pandas的DataFrame格式,并将其转换为pytorch的Tensor格式。可以使用以下代码: ```python import pandas as pd import torch # 读取数据 data = pd.read_csv('data.csv') # 将数据转换为Tensor格式 X = torch.tensor(data.drop('target', axis=1).values, dtype=torch.float32) y = torch.tensor(data['target'].values, dtype=torch.float32) ``` 接下来,定义神经网络模型。可以使用pytorch中的`nn.Module`类来定义模型。以下是一个简单的模型示例: ```python import torch.nn as nn class Net(nn.Module): def __init__(self): super(Net, self).__init__() self.fc1 = nn.Linear(10, 5) # 输入层到隐藏层 self.fc2 = nn.Linear(5, 1) # 隐藏层到输出层 def forward(self, x): x = nn.functional.relu(self.fc1(x)) x = self.fc2(x) return x net = Net() ``` 然后,定义损失函数和优化器。可以使用pytorch中的`nn`模块和`optim`模块来定义损失函数和优化器。以下是一个简单的示例: ```python import torch.optim as optim criterion = nn.MSELoss() # 定义均方误差损失函数 optimizer = optim.SGD(net.parameters(), lr=0.01) # 定义随机梯度下降优化器 ``` 最后,进行模型训练。可以使用以下代码: ```python for epoch in range(100): running_loss = 0.0 for i in range(len(X)): inputs, labels = X[i], y[i] optimizer.zero_grad() outputs = net(inputs) loss = criterion(outputs, labels) loss.backward() optimizer.step() running_loss += loss.item() print('[%d] loss: %.3f' % (epoch + 1, running_loss / len(X))) ``` 其中,`optimizer.zero_grad()`用于清空梯度信息,`loss.backward()`用于计算梯度,`optimizer.step()`用于更新模型参数。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值