0

我有一个 torch.Tensor 格式的图像。我想将它直接输入到预先训练的分类器中,比如 Inception v3。

但是,它被错误地预测(没有错误消息,只是输出错误)。我想这是因为我没有对其进行规范化(根据:https ://pytorch.org/docs/stable/torchvision/models.html ),所以这就是我想要做的。

问题是,标准化需要 numpy 输入。但是,为了获得 numpy,我这样做了,但它给了我一个错误:

----> 9 image = data.numpy()[0].transpose((1, 2, 0))  # [image_size, image_size, RGB]

RuntimeError: Can't call numpy() on Variable that requires grad. Use var.detach().numpy() instead.

我不能调用分离,因为我需要渐变流过图像(由其他函数生成)。有没有办法绕过将其转换为 numpy. 如果没有,我如何保持梯度流?

4

1 回答 1

3

一种选择是在使用均值和标准差向量作为张量之前将图像缩放到区间 [0, 1]。

import torch

data = (data - data.min()) / (data.max() - data.min())  # rescale to [0, 1]
mean = torch.tensor([[[0.485, 0.456, 0.406]]])
std = torch.tensor([[[0.229, 0.224, 0.225]]])
data = (data - mean) / std  # normalise with tensors
于 2019-07-29T21:23:56.850 回答