#numpy #pytorch #python-imaging-library #tensor
Вопрос:
У меня есть тензор изображения и суммы, а массив numpy отличается, почему? Как torch_img.sum() = numpy_float_img.sum()?
from PIL import Image
from torchvision import transforms as T
# Read image with PIL
img = Image.open(img_path).resize((224,224))
torch_img = T.ToTensor()(img)
numpy_img = np.asarray(img)
numpy_img_float = np.asarray(img).astype(np.float32)
print(torch_img.sum(), numpy_img.sum(), numpy_img_float.sum())
->56914.496, 14513196, 14513196.0
У кого-нибудь есть идеи, почему?
Ответ №1:
Обратите внимание, как torch_img
находится в [0,1]
диапазоне, в то время numpy_img
как numpy_img_float
оба находятся в [0, 255]
диапазоне. Просматривая документацию torchvision.transforms.ToTensor
, если предоставленный ввод представляет собой PIL
изображение, тогда значения будут сопоставлены [0, 1]
. Напротив, numpy.array
значения будут оставаться в [0, 255]
диапазоне.
Кроме этого, небольшие различия в результатах вызваны разной точностью с плавающей запятой.