第12个方法
torch.tensor(data, *, dtype=None, device=None, requires_grad=False, pin_memory=False)
- 此方法用于创建pytorch中的tensor创建,此方法使用data构建并返回一个tensor。使用方法如下:
import torch
a = torch.tensor([2, 3, 5])
- 此时a就是一个具有值[2, 3, 5]的tensor。
- 创建浮点tensor使用
import torch
a = torch.tensor([2., 3., 5.])
- 各个参数的意思:
- data:tensor的数据值,可以是list,tuple,NumPy ndarryay, scalar或者其它的类型。
- dtype:用于指定生成的tensor中数据的类型,如果不进行设置,那么使用系统默认的类型,一般浮点数是torch.float32,整形是torch.int64,默认类型可以使用
torch.set_default_dtype()
进行更改(前面的文章讲过)。 - device:用于指定创建的tensor存在的位置,即在cpu还是gpu上,cpu使用
device='cpu'
,gpu使用device='cuda'
,默认为cpu,不过可以更改默认设置,使用torch.set_default_tensor_type(t)
即可,以前也讲过。 - requires_grad:用于指定创建的tensor需不需要梯度信息,如果需要设为True,否则设为False,默认为False。
- pin_memory:如果设置为True,那么创建的tensor将会被分配到固定的内存位置,仅仅在tensor在cpu上有用,默认为False。
note: torch.tensor()会复制数据,(不会使用原始的数据区,而是在一个新的内存复制原来的数据并生成新的tensor)如果现在我们有一个tensor data,并且不想要进行复制,那么我们使用torch.Tensor.detach()
,使用此方法得到的tensor是和原来的tensor享用同样的storage,并没有进行值的复制;或者使用torch.Tensor.requires_grad_()
此方法也是返回一个tensor,和原来的tensor是共用相同的storage,通过此方法可以更改已有的tensor是否需要梯度信息。
如果data类型是NumPy ndarray并且不想进行拷贝,那么使用torch.as_tensor()。
注意torch.Tensor.这样的方法是Tensor这个类的方法,应该使用tensor直接调用,全打出来也行,但是打那么多不累吗?如下所示:
import torch
a = torch.tensor([2., 3., 5.])
b = a.detach()
- 当data(例如为x)是一个tensor时,那么我们使用此方法创建出来的
tensor(torch.tensor(x))
与x.clone().detach()
的效果是一样的。并且torch.tensor(x, requires_grad=True)
与x.clone().detach().requires_grad_(True)
是一样的,并且更推荐使用clone()与detach(),虽然这几个方法还没有讲,但是大致上知道是什么意思,clone就是复制一个和现在的tensor一模一样的tensor,等到以后讲到这几个方法的时候,会更加详细的进行对比。