pytorch 把tensor轉換成Python標量int float 且 AttributeError: Variable object has no attribute item

如何將1*1的tensor類型的變量轉換爲Python的標量?

 

如下面這行代碼所示:

def ssim(img1,img2):
    img1 = torch.from_numpy(np.rollaxis(img1, 2)).float().unsqueeze(0)/255.0
    img2 = torch.from_numpy(np.rollaxis(img2, 2)).float().unsqueeze(0)/255.0   
    img1 = Variable( img1,  requires_grad=False)    # torch.Size([256, 256, 3])
    img2 = Variable( img2, requires_grad = False)
    ssim_value = pytorch_ssim.ssim(img1, img2).item()
    return ssim_value

在倒數第2行中,我們想將計算得到的pytorch_ssim.ssim(img1, img2)(FloatTensor類型,1*1)轉換爲Python的Float類型標量。本來上面代碼中使用.item()的方法是可以的,但今天竟然報錯了:

*** AttributeError: 'Variable' object has no attribute 'item'

報錯原因還不清楚,猜測可能是版本的問題?

經過多次嘗試,將倒數第二行改爲下面的代碼即可:

ssim_value = float(pytorch_ssim.ssim(img1, img2))

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章