【问题标题】:indexing a tensor with an object of type torch.LongTensor使用类型为 torch.LongTensor 的对象对张量进行索引
【发布时间】: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

标签: python pytorch


【解决方案1】:

您的问题仍然存在问题。您没有共享可以重现您的错误的完整代码。从错误中可以清楚地看出您的模型的转发功能存在问题。错误发生在下面的行中。

text_batch = torch.stack(batch['text'], 0)[:, indices]

当您索引一个不符合预期形状的张量时会发生错误。因此,使用 tensor.size() 检查张量的形状。如果您在问题上需要更多帮助,请按照以下指南改进您的问题。

请阅读并遵循帮助文档中的发布指南。 Minimal, complete, verifiable 示例适用于此。在您发布 MCVE 代码并准确描述问题之前,我们无法有效地帮助您。我们应该能够将您发布的代码粘贴到文本文件中并重现您描述的问题。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2020-02-16
  • 2017-06-02
  • 2019-04-13
  • 1970-01-01
  • 2020-02-29
  • 1970-01-01
  • 2020-10-08
  • 1970-01-01
相关资源
最近更新 更多