Torch建立数据迭代器进行训练的两种方法

Torch建立数据迭代器进行网络模型训练的两种方法

数据库的建立

数据格式要求:.csv文件,第一列为标签,第二列之后为数据在这里插入图片描述
建立数据库代码

import torch
import pandas as pd
import torch.utils.data as Data

def dataset(path):
    data = pd.read_csv(path,header=None)
    label = data.iloc[:, 0]
    data = data.iloc[:, 1:]
    label = torch.from_numpy(label.values.reshape(len(label))).type(torch.LongTensor)
    data = torch.from_numpy(data.values.astype(float).reshape(len(data), 1, len(data.loc[0]))).type(torch.FloatTensor)
    dataset = Data.TensorDataset(data, label)
    return dataset

path = './example.csv'
source_loader = Data.DataLoader(dataset=dataset(path), batch_size=8, shuffle=True, drop_last = True)

方法一

在训练和测试时需要调用建立的数据库,使用iter方法逐行调用

from torch.autograd import Variable

for epoch in range(1,EPOCH+1):
    # 开始训练
    # 模型model需要提前声明***
	model.train()
    iter_source = iter(source_loader)
    num_iter = len(source_loader)
    for i in range(0, num_iter):
        data, label = iter_source.next()
        if torch.cuda.is_available():
            data, label = data.cuda(), label.cuda()
        data, label = Variable(data), Variable(label)
        # 到此为止,数据调用完成,开始训练
        # 优化器optimizer需要提前声明***
        optimizer.zero_grad()
        preds = model(data)
        # 损失函数loss_func需要提前声明***
        loss= loss_func(preds, label)
        loss.backward()
        optimizer.step() 
        
    # 开始测试,test_loader同source_loader相同,需要提前定义***
    model.eval()
    iter_target = iter(test_loader)
    num_iter = len(test_loader)
    for i in range(0, num_iter):
        data, label = iter_target.next()
        if torch.cuda.is_available():
            data, label = data.cuda(), label.cuda()
        # 测试模式下不需要训练梯度
        with torch.no_grad():
            data, label = Variable(data), Variable(label)
        preds = model(data)
        loss = loss_func(target_preds, source_label)

方法二

使用enumerate方法调用数据库,直接使用cuda类型的数据,使用CPU训练需要修改格式

for epoch in range(1,EPOCH+1):
    model.train() 
    for step1,(data, label) in enumerate(train_loader):
        data = Variable(data.type('torch.cuda.FloatTensor'))
        label = Variable(label.type('torch.cuda.LongTensor'))
        optimizer.zero_grad()
        preds = model(data)
        loss = loss_func(preds, label)
        loss.backward()
        optimizer.step()  
    model.eval()     
    for step2,(data, label) in enumerate(test_loader):
        with torch.no_grad():
            data = Variable(data.type('torch.cuda.FloatTensor'))
            label = label.type('torch.cuda.LongTensor')
        preds = model(data)
        loss = loss_func(output, label)   
  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值