张量
张量可以理解为向量,在python中的编程中可以联想至列表和numpy的ndarray数据类型,具体包括了一维张量和高维矩阵,pytorch和numpy有很多相似之处,比如都具有广播机制和向量化操作,并且pytorch的张量和numpy的ndarray可以较为方便的进行转换。不同的是张量支持gpu运算
基本创建方式
torch.tensor()
torch.tensor()是pytorch中最为基础和常用的张量创建方式,以下为tensor()函数的参数设置
def tensor(data: Any, dtype: Optional[_dtype] = None, device: Device = None, requires_grad: _bool = False) -> Tensor:
可以看到有四个参数可以进行设置,分别是data(用于转换的值),dtype(指定数据类型),device(计算设备选择cpu/gpu),requires_grad(是否参与梯度计算),而函数的返回类型就是Tensor(张量)。这四个参数中必不可少的就是data,这里的data可以传入基本的数值类型如整形和浮点型,也可传入列表和元组(注意,这里不支持传入集合),并且也可传入ndarray类型。
data参数
若传入浮点型或整形数据
import torch
data1 = torch.tensor(10)
print(data1, data1.dtype)
data2 = torch.tensor(10.0)
print(data2, data2.dtype)
# tensor(10) torch.int64
# tensor(10.) torch.float32
由上可见,这里分别创建了两个标量张量,并且可以看到pytorch对整形和浮点数据的转换默认的数据类型分别为int64和float32
若传入容器类型数据或ndarray
import torch
import numpy as np
data1 = torch.tensor([1, 2, 3])
print(data1, data1.dtype)
data2 = torch.tensor((1, 2, 3))
print(data2, data2.dtype)
data3 = torch.tensor(np.array([1, 2, 3]))
print(data3, data3.dtype)
data4 = torch.tensor(np.array([1.0, 2.0, 3.0]))
print(data4, data4.dtype)
# tensor([1, 2, 3]) torch.int64
# tensor([1, 2, 3]) torch.int64
# tensor([1, 2, 3], dtype=torch.int32) torch.int32
# tensor([1., 2., 3.], dtype=torch.float64) torch.float64
由上述代码可以看出,若传入的是ndarrary数据类型,由于其底层默认整形数据为int32,浮点型数据为float64,所以在转换后,张量的精度也与其一样。
dtype参数
若要对创建张量的数据类型进行转换,只需指定dtype参数即可
import torch
import numpy as np
data1 = torch.tensor([1, 2, 3], dtype=torch.float32)
print(data1, data1.dtype)
data2 = torch.tensor((1, 2, 3), dtype=torch.float32)
print(data2, data2.dtype)
data3 = torch.tensor(np.array([1, 2, 3]), dtype=torch.float32)
print(data3, data3.dtype)
data4 = torch.tensor(np.array([1.0, 2.0, 3.0]), dtype=torch.float32)
print(data4, data4.dtype)
# tensor([1., 2., 3.]) torch.float32
# tensor([1., 2., 3.]) torch.float32
# tensor([1., 2., 3.]) torch.float32
# tensor([1., 2., 3.]) torch.float32
device参数
对于device参数,参数设置一般为'cpu','cuda','cuda:0','cuda:1'...分别代指将张量放入cpu进行计算或放入gpu进行计算,而'cuda:0'表示第一块gpu,以此类推':1'表示第二块,如有多块gpu可以分别调用,注意,不在同一块设备上的张量不能参与运算
import torch
data1 = torch.tensor([1.0, 2.0, 3.0], device="cuda")
print(data1, data1.device)
data2 = torch.tensor((1.0, 2.0, 3.0), device="cuda")
print(data2, data2.device)
# tensor([1., 2., 3.], device='cuda:0') cuda:0
# tensor([1., 2., 3.], device='cuda:0') cuda:0
注意这里若只有一块gpu,则device参数使用'cuda'和'cuda:0'是等效的
在张量定义之后,也可以对张量的运算设备进行转换如使用cpu(),cuda(),to()函数
import torch
data1 = torch.tensor([1.0, 2.0, 3.0], device="cuda:0")
print(data1, data1.device)
data1 = dat


672

被折叠的 条评论
为什么被折叠?



