赞
踩
数据格式要求:.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)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。