Pytorch:使用`torch.randperm`随机子采样丢失张量

时间:2018-01-06 12:30:58

标签: pytorch

我尝试对predictiontarget数组进行随机子采样,以进行损失计算。

idx = torch.randperm(target.shape[0]) 
target = target.index_select(0, idx[0, sample_size]

但是我收到此错误消息。

index_select(): argument 'index' (position 2) must be Variable, not torch.LongTensor

有谁知道如何解决这个问题?

修改 我走近了一步。看来torch.randperm没有返回一个火炬变量,因此必须显式转换输出:

idx = torch.randperm(target.shape[0]) 
idx = Variable(idx).cuda()
target = target.index_select(0, idx[0, sample_size]

现在唯一的问题是反向传播失败了。似乎随机子采样的操作导致尺寸问题。 然而,在计算损失时,维度似乎没有问题:

loss = F.nll_loss(prediction, target.view(-1)) # prediction shape is [Nx12] and target shape is N

不幸的是,在调用loss.backward()时,我收到以下错误消息:

RuntimeError: The expanded size of the tensor (12) must match the existing size (217456) at non-singleton dimension 1

0 个答案:

没有答案