【发布时间】:2017-09-22 11:06:20
【问题描述】:
我是使用 Pytorch 的新手,在运行我的代码时收到此错误:
TypeError:使用类型为 torch.LongTensor 的对象对张量进行索引。唯一受支持的类型是整数、切片、numpy 标量和 torch.LongTensor 或 torch.ByteTensor 作为唯一参数。
能否请您指出正确的方向,我们将不胜感激。
if os.path.exists(CHECKPOINT_NAME):
print("=> loading checkpoint '{}'".format(CHECKPOINT_NAME))
checkpoint = torch.load(CHECKPOINT_NAME)
EPOCH = checkpoint['epoch']
BEST_LOSS = checkpoint['best_loss']
model.load_state_dict(checkpoint['state_dict'])
optimizer.load_state_dict(checkpoint['optimizer'])
print("=> loaded checkpoint '{}' (epoch {})"
.format(CHECKPOINT_NAME, checkpoint['epoch']))
else:
print("=> no checkpoint found at '{}'. Starting from scratch".format(CHECKPOINT_NAME))
for epoch in range(EPOCH, NUM_EPOCHS):
train(train_dataset_loader, model, loss_fn, optimizer, epoch + 1, val_dataset_loader)
loss = validate(val_dataset_loader, model, loss_fn)
if loss < BEST_LOSS:
print('{} better than previous best loss of {}'.format(loss, BEST_LOSS))
BEST_LOSS = loss
is_best = True
else:
is_best = False
save_checkpoint({
'epoch': epoch + 1,
'state_dict': model.state_dict(),
'best_loss': BEST_LOSS,
'optimizer' : optimizer.state_dict(),
}, is_best
)
ypeError Traceback (most recent call last)
<ipython-input-16-4c3a0a33f81b> in <module>()
12
13 for epoch in range(EPOCH, NUM_EPOCHS):
---> 14 train(train_dataset_loader, model, loss_fn, optimizer, epoch + 1, val_dataset_loader)
15 loss = validate(val_dataset_loader, model, loss_fn)
16
<ipython-input-14-13120db09b49> in train(train_loader, model, criterion, optimizer, epoch, val_loader)
65 # compute output
66 model.zero_grad()
---> 67 log_probas, indices = model.forward(batch)
68
69 labels = Variable(batch['class'][indices])
<ipython-input-13-f9a47d332f53> in forward(self, batch)
18 gene = batch['gene'][indices]
19 variation = batch['variation'][indices]
---> 20 text_batch = torch.stack(batch['text'], 0)[:, indices]
21
22 # Wrap all tensors around a variable. Send to GPU if possible.
【问题讨论】:
-
错误出现在哪一行?
-
改进您的问题,包括代码 sn-p,我们可以使用它来重现错误并包括错误详细信息。
-
我更新了我的原始帖子以反映 TypeError