如何在Pytorch中测试自定义数据集?
我一直在关注Pytorch中的教程,这些教程使用Pytorch中的数据集,允许您启用是否希望使用这些数据进行培训。。。但现在我使用的是.csv和自定义数据集如何在Pytorch中测试自定义数据集?,pytorch,torch,Pytorch,Torch,我一直在关注Pytorch中的教程,这些教程使用Pytorch中的数据集,允许您启用是否希望使用这些数据进行培训。。。但现在我使用的是.csv和自定义数据集 类MyDataset(数据集): 定义初始化(self、root、n_inp): self.df=pd.read\u csv(根) self.data=self.df.to_numpy() self.x,self.y=(torch.from_numpy(self.data[:,:n_inp]), torch.from_numpy(self.
类MyDataset(数据集):
定义初始化(self、root、n_inp):
self.df=pd.read\u csv(根)
self.data=self.df.to_numpy()
self.x,self.y=(torch.from_numpy(self.data[:,:n_inp]),
torch.from_numpy(self.data[:,n_inp:]))
def uu getitem uu(self,idx):
返回self.x[idx,:],self.y[idx,:]
定义(自我):
返回长度(自身数据)
我如何告诉Pytorch不要训练我的test_数据集,这样我就可以使用它作为我的模型准确度的参考
train\u dataset=MyDataset(“heart.csv”,输入大小)
火车装载机=数据装载机(火车数据集,批量大小=批量大小,随机播放=真)
test\u dataset=MyDataset(“heart.csv”,输入大小)
test\u loader=DataLoader(test\u数据集,batch\u size=batch\u size,shuffle=True)
在pytorch中,自定义数据集继承类数据集
。它主要包含两种方法:指定要迭代的dataset对象的长度和每次返回一批数据
初始化数据加载器对象后(train\u loader
和test\u loader
,如代码中所指定),您需要编写一个train循环和一个test循环
def train(model, optimizer, loss_fn, dataloader):
model.train()
for i, (input, gt) in enumerate(dataloader):
if params.use_gpu: #(If training using GPU)
input, gt = input.cuda(non_blocking = True), gt.cuda(non_blocking = True)
predicted = model(input)
loss = loss_fn(predicted, gt)
optimizer.zero_grad()
loss.backward()
optimizer.step()
您的测试循环应该是:
def test(model,loss_fn, dataloader):
model.eval()
for i, (input, gt) in enumerate(dataloader):
if params.use_gpu: #(If training using GPU)
input, gt = input.cuda(non_blocking = True), gt.cuda(non_blocking = True)
predicted = model(input)
loss = loss_fn(predicted, gt)
此外,您还可以使用度量字典记录您的预测、损失、时代等,。训练循环和测试循环之间的主要区别在于,我们在推理阶段排除了反向传播(zero\u grad()、backward()、step()
)
最后,
for epoch in range(1, epochs + 1):
train(model, optimizer, loss_fn, train_loader)
test(model, loss_fn, test_loader)
在Pytork中进行测试时,需要注意以下几点:
model.eval()
使用torch.no_grad():
for e in range(num_epochs):
for B, (dat, label) in enumerate(train_loader):
#transforms here
opt.zero_grad()
out = model(dat.to(device))
loss = criterion(out)
loss.backward()
opt.step()
with torch.no_grad():
model.eval()
global_corr = 0
for B, (dat,label) in enumerate(test_loader):
out = model(dat.to(device))
# get batch eval metrics here!