PyTorch中tensor与numpy和PIL格式变量相互转换

tensor与numpy格式相互转换

  • 将一个Torch Tensor 转换为numpy数组是一件轻松的事,反之亦然

  • Torch Tensor与numpy数组共享底层内存地址,修改一个会导致另外一个的变化

tensor转numpy

将一个Torch Tensor转换为NumPy数组

In:
a = torch.ones(5)
print(a)
b = a.numpy()
print(b)
Out:
tensor([1., 1., 1., 1., 1.])
[1. 1. 1. 1. 1.]

注意观察numpy数组的值是如何改变

a.add_(1)  # 相当于a+=1
print(a)
print(b)
tensor([2., 2., 2., 2., 2.])
[2. 2. 2. 2. 2.]

NumPy Array 转化成 Torch Tensor

使用from_numpy自动转化

import numpy as np
a = np.ones(5)
b = torch.from_numpy(a)#转换成tensor 的类型
np.add(a,1,out=a)#a的值改变了
print(a)
print(b)#b的值也发生了变化
[2. 2. 2. 2. 2.]
tensor([2., 2., 2., 2., 2.], dtype=torch.float64)

所有的Tensor类型默认都是基于CPU,CharTensor类型不支持到NumPy的转换

tensor与PIL格式相互转换

PIL格式的图片转tensor

PyTorch 中的张量默认采用 N×D×H×W 的顺序,并且数据范围在 [0, 1],需要进行转置和规范化。

# PIL.Image -> torch.Tensor.
tensor = torch.from_numpy(np.asarray(PIL.Image.open(path))
    ).permute(2, 0, 1).float() / 255
tensor = torchvision.transforms.functional.to_tensor(PIL.Image.open(path))  # Equivalently way

tensor转PIL格式

image = PIL.Image.fromarray(torch.clamp(tensor * 255, min=0, max=255
    ).byte().permute(1, 2, 0).cpu().numpy())
image = torchvision.transforms.functional.to_pil_image(tensor)  # Equivalently way
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值