Pytorch 张量创建详解

张量

张量可以理解为向量,在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
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值