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() 是一个通过

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





