1. Intro
-
Tensor是ML基本组成部分,用数字方式表示数据;
-
如将图像表示为:具有形状(shape)[3,224,224]的张量,
意味[color_channel,height,width],
图像中有三种颜色(红色,绿色,蓝色),宽224像素,高224像素;
import torch
torch.__version__
# 输出:'2.3.0+cpu'
# 输出:2.2.1+cu121
2. Scalar
-
Scalar:标量,点,0维张量;
-
scalar as single number aka zero dimension tensor
-
有大小,没方向,具体数据可表达,如重量,时间,长度,温度等;
# item:仅适应于单个元素的张量
scalar = torch.tensor(7)
scalar,scalar.ndim,scalar.item()
# 输出:(tensor(7), 0, 7)
3. Vector
-
Vector:向量,线,1维张量
-
vector as single dimension tensor but can contain many number;
-
也称矢量,由大小和方向共同决定的量,如力和速度等;
-
向量有两个维度:大小(箭头的长度)和方向(箭头所指的方向);
-
如可用[3,2]表述房中的[bedroom,bathroom],
或[3,2,2]表述[bedrooms,bathrooms,car_park]; -
此向量包含两个数字,但只有一个维度,可通过外部方括号([)
的数量来判断Pytorch中张量的维数,且只需计算一侧; -
另张量的另一个重要慨念:形状(shape)属性,表示内部元素是如何排列的;
大小为2,即此向量的形状:方括号内放置了2个元素;
vector = torch.tensor([7, 7])
vector,vector.ndim,vector.shape
# 输出:(tensor([7, 7]), 1, torch.Size([2]))
4. Matrix
-
Matrix:矩阵,面,2维张量;
-
按长方阵列排列的复数或实数集合,元素是实数的矩阵称为实矩阵,
元素是复数的矩阵称为复矩阵,而行数与列数都等于n的矩阵称为n阶矩阵或n阶方阵; -
m行n列的数称为m行n列的矩阵,简称m * n矩阵,记作:
matrix = torch.tensor([[7,8],[9,10]])
matrix,matrix.ndim,matrix.shape
# (tensor([[7, 8],[9,10]]),2,torch.Size([2,2]))
-
矩阵有两个维度,即单侧有两个方括号;
-
形状:大小为[2, 2],即宽度有两个元素,长度也有两个元素;
5. Tensor
-
Tensor:张量,体,三维张量,张量是多维数组,目的是能创造高维矩阵和向量;
-
multi-dimensional matrix containing single data type element;
-
张量属性:rank:维度数量;shape:行和列的数量;type:张量的元素类型;
-
张量可代表很多东西,想象excel中的表格,[1,3,3]:表示有一个3乘3的维度;
tensor = torch.tensor([[[1,2,3],[3,6,9],[2,4,5]]])
tensor,tensor.ndim,tensor.shape
# 输出:(tensor([[[1,2,3],[3,6,9],[2,4,5]]]),3,torch.Size([1,3,3]))
7. Random Tensor
-
作为数据科学家,可定义ML模型如何启动(start,initialization),
查看数据(look at,representation),更新(update,optimization)其随机数;
# 创建随机数张量
random_tensor = torch.rand(size=(3,4))
random_tensor,random_tensor.shape,random_tensor.ndim,random_tensor.dtype
(tensor([[0.2996, 0.7734, 0.3182, 0.0270],
[0.9750, 0.5131, 0.1038, 0.9679],
[0.2237, 0.1306, 0.6742, 0.3432]]),
torch.Size([3, 4]),2,torch.float32)
8. Zero and One
zero = torch.zeros(size=(3, 4))
zero,zero.dtype
(tensor([[0., 0., 0., 0.],
[0., 0., 0., 0.],
[0., 0., 0., 0.]]),
torch.float32)
one = torch.ones(size=(3, 4))
one,one.dtype
(tensor([[1., 1., 1., 1.],
[1., 1., 1., 1.],
[1., 1., 1., 1.]]),
torch.float32)
9. Range Tensor
-
torch.arange(start,end,step);
-
Python可通过range()创建范围,
PyTorch中torch.range()已弃用,请使用torch.arange();
Entry | Memo |
---|---|
start |
范围的开始,如0 |
end |
范围的结束,如10 |
step |
每个值之间的步长,如1 |
range_deprecation = torch.range(0,10)
arange = torch.arange(start=0,end=10,step=1)
range_deprecation,arange
C:\Users\Administrator\AppData\Local\Temp\ipykernel_16092\3310502601.py:1:
UserWarning: torch.range is deprecated and will be removed in a future
release because its behavior is inconsistent with Python's range builtin.
Instead, use torch.arange, which produces values in [start, end).
range_deprecation = torch.range(0,10)
(tensor([ 0., 1., 2., 3., 4., 5., 6., 7., 8., 9., 10.]),
tensor([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]))
|
10. Tensor Datatype
-
数据类型区别,有些针对CPU,有些针对GPU:
https://pytorch.org/docs/stable/tensors.html#data-types
Bit Float | Memo |
---|---|
16位浮点 |
torc.float16,torc.half |
32位浮点 |
torch.foat32,torch.floot |
64位浮点 |
torch.float64,torch.double |
|
-
创建特定数据类型的张量:
-
tensor默认数据类型:float32;即None,传torch.float32或torch.floot等;
-
device默认None;requires_grad:若true:则记录对张量执行的操作;
-
float_32_tensor = torch.tensor([3.0,6.0,9.0],dtype=None,device=None,requires_grad=False)
float_32_tensor.shape, float_32_tensor.dtype, float_32_tensor.device
# 输出:(torch.Size([3]),torch.float32,device(type='cpu'))
-
除形状问题(张量形状不匹配(match)),另还有数据类型datatype和设备device问题;
-
如A张量是torch.float32,B张量是torch.float16,A张量在CPU上,B张量在GPU上;
-
PyTorch最喜欢张量是相同的format(datatype),PyTorch最喜欢张量之间的计算在同一设备上;
# # torch.half也工作
float_16_tensor = torch.tensor([3.0,6.0,9.0],dtype=torch.float16)
float_16_tensor.dtype
# 输出:torch.float16