torch学习02-tensor学习
张量如同数组和矩阵一样, 是一种特殊的数据结构。在PyTorch中, 神经网络的输入、输出以及网络的参数等数据, 都是使用张量来进行描述。
张量的使用和Numpy中的ndarrays很类似, 区别在于张量可以在GPU或其它专用硬件上运行, 这样可以得到更快的加速效果。如果你对ndarrays很熟悉的话, 张量的使用对你来说就很容易了。如果不太熟悉的话, 希望这篇有关张量API的快速入门教程能够帮到你。
import torch
import numpy as np
一、张量初始化/创建
【对齐paddle】list/numpy 转为tensor可以合并一种; 总共三种; paddle张量的创建
张量有很多种不同的初始化方法, 先来看看四个简单的例子:
1. 直接生成张量
由原始数据直接生成张量, 张量类型由原始数据类型决定。 List[int] 或者 Numpy 都可以
data = [[1, 2], [3, 4]]
x_data = torch.tensor(data)
print(x_data, x_data.shape, x_data.dtype)
----------------------------
tensor([[1, 2],
[3, 4]]) torch.Size([2, 2]) torch.int64
2. 通过 numpy 数组来生成张量
由已有的Numpy数组来生成张量(反过来也可以由张量来生成Numpy数组
np_array = np.array(data)
x_np_1 = torch.tensor(np_array)
x_np = torch.from_numpy(np_array)
print(np_array)
print(x_np_1)
print(x_np)
--------------------------------------
[[1 2]
[3 4]]
tensor([[1, 2],
[3, 4]], dtype=torch.int32)
tensor([[1, 2],
[3, 4]], dtype=torch.int32)
3. 通过已有张量来生成新的张量
新的张量将继承已有张量的数据属性(结构、类型), 也可以重新指定新的数据类型。
x_ones = torch.ones_like(x_data) # 保留 x_data 的属性
print(f"Ones Tensor:
{x_ones}
")
-------------------------------------------------
Ones Tensor:
tensor([[1, 1],
[1, 1]])
x_rand = torch.rand_like(x_data, dtype=torch.float) # 重写 x_data 的数据类型
int -> float
print(f"Random Tensor:
{x_rand}
")
----------------------------------------------------
Random Tensor:
tensor([[0.0381, 0.5780],
[0.3963, 0.0840]])
4.通过指定数据维度来生成张量(特定要求初始化)
shape是元组类型【具体要求按照torch.rand() 等函数要求,不局限 元组】, 用来描述张量的维数, 下面3个函数通过传入shape来指定生成张量的维数。
shape = (2,3,)
rand_tensor = torch.rand(shape)
ones_tensor = torch.ones(shape)
zeros_tensor = torch.zeros(shape)
print(f"Random Tensor:
{rand_tensor}
")
print(f"Ones Tensor:
{ones_tensor}
")
print(f"Zeros Tensor:
{zeros_tensor}")
----------------------------------------------------
Random Tensor:
tensor([[0.0266, 0.0553, 0.9843],
[0.0398, 0.8964, 0.3457]])
Ones Tensor:
tensor([[1., 1., 1.],
[1., 1., 1.]])
Zeros Tensor:
tensor([[0., 0., 0.],
[0., 0., 0.]])
二、random 相关(也可以看做生成) 10个函数
二、张量属性
维数、数据类型以及它们所存储的设备(CPU或GPU)
- 1)维数: tensor.shape
- 2)数据类型: tensor.dtype
- 3)数据存储设备: tensor.device
tensor = torch.rand(3,4)
print(f"Shape of tensor: {tensor.shape}")
print(f"Datatype of tensor: {tensor.dtype}")
print(f"Device tensor is stored on: {tensor.device}")
--------------------------------------------------------
Shape of tensor: torch.Size([3, 4]) # 维数
Datatype of tensor: torch.float32 # 数据类型
Device tensor is stored on: cpu # 存储设备
三、张量计算/操作:具体可以参考paddle整理:paddle01-Tensor相关操作 【完】
转置、索引、切片、数学运算、线性代数、随机采样等等:
# 判断当前环境GPU是否可用, 然后将tensor导入GPU内运行
if torch.cuda.is_available():
tensor = tensor.to('cuda')
参考:
- ApacheCN 教程: 张量: https://pytorch.apachecn.org/docs/1.7/03.html