torch.as_tensor()、torch.Tensor() 、 torch.tensor() 、transforms.ToTensor()的区别

本文详细介绍了PyTorch中创建张量的三种方法:as_tensor(), tensor()和Tensor()。as_tensor()在数据类型和设备相同的情况下可实现浅拷贝,共享内存;tensor()总是创建新张量,数据类型和设备不同则进行深拷贝。Tensor()是默认的浮点型张量构造器。此外,还提到了ToTensor()转换器在图像处理中的作用,用于将数据归一化到[0,1],并可通过Normalize()进一步标准化到(-1,1)区间。

1)torch.as_tensor(data, dtype=None,device=None)->Tensor : 为data生成tensor,保留 autograd 历史记录并尽量避免复制(dtype和devices相同,尽量浅拷贝)

如果data已经是tensor,且dtype和device与参数相同,则生成的tensor会和data共享内存(浅拷贝)。如果data是ndarray,且dtype对应,devices为cpu,则同样共享内存。其他情况则不共享内存。

#1)数据类型和device相同,浅拷贝,共享内存
import numpy
a = numpy.array([1, 2, 3])
t = torch.as_tensor(a)
t[0] = -1
a,t

#Out[77]: (array([-1,  2,  3]), tensor([-1,  2,  3], dtype=torch.int32))

#2)数据类型相同,但是device不同,深拷贝,不再共享内存
import numpy
a = numpy.array([1, 2, 3])
t = torch.as_tensor(a, device=torch.device('cuda'))
t[0] = -1
a,t

#Out[78]: (array([1, 2, 3]), tensor([-1,  2,  3], device='cuda:0', dtype=torch.int32))

#3)device相同,但数据类型不同,深拷贝,不再共享内存
import numpy
a = numpy.array([1, 2, 3])
t = torch.as_tensor(a, dtype=torch.float32)
t[0] = -1
a,t

Out[80]: (array([1, 2, 3]), tensor([-1.,  2.,  3.]))

2) torch.tensor() 是一个通过

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值