Pytorch 张量
标量(0D)
只包含一个元素的张量为标量。类型通常为FloatTensor或LongTensor
1 | import torch |
向量(1D)
1 | import torch |
out:
torch.Size([4])
矩阵(2D)
1 | x = torch.FloatTensor([[1,2],[3,4]]) |
out:
torch.Size([2, 2])
三维向量
多个矩阵累加在一起。比如一张图片,有三个通道,每个通道都有一个矩阵。此处的pic2.jpg是一个28x28x3的图片。
1 | import numpy as np |
out:
torch.Size([28, 28, 3])
切片张量
这里和python的用法一样
1 | sales = torch.FloatTensor([1.0,2.0,3.0,4.0,5.0]) |
out:
tensor([1., 2.])
对于前面的如果需要其中一个通道。一种用切片向量,一种用opencv的split方法。
1 | import numpy as np |
四维张量
对于多张图片,批处理那种
五维张量
视频数据。
GPU上的张量
1 | import torch |
out:
CPU cost: 7.888931035995483
GPU cost: 0.1765275001525879
常见的方法
判断GPU是否可用
1 | if torch.cuda.is_available(): |
生成空矩阵
没有初始化
1 | import torch |
out:
tensor([[9.3673e-39, 9.5511e-39, 1.0194e-38],
[4.2246e-39, 1.0286e-38, 1.0653e-38],
[1.0194e-38, 8.4490e-39, 1.0469e-38],
[9.3674e-39, 9.9184e-39, 8.7245e-39],
[9.2755e-39, 8.9082e-39, 9.9184e-39]])
随机初始化
1 | # 构造一个随机初始化的矩阵 |
out:
tensor([[0.4749, 0.0095, 0.4786],
[0.5207, 0.4228, 0.0364],
[0.8313, 0.9352, 0.6975],
[0.2701, 0.5206, 0.8709],
[0.3670, 0.3378, 0.9704]])
创建零矩阵
1 | # 构造一个矩阵全为0,数据类型是long类型的 |
out:
tensor([[0, 0, 0],
[0, 0, 0],
[0, 0, 0],
[0, 0, 0],
[0, 0, 0]])
构造一个张量
1 | #构造一个张量,直接使用数据 |
out:
tensor([5.5000, 3.0000])
基于一个已存在的tensor创建一个
1 | # 创建一个tensor基于已经存在的tensor |
out:
tensor([[1., 1., 1.],
[1., 1., 1.],
[1., 1., 1.],
[1., 1., 1.],
[1., 1., 1.]], dtype=torch.float64)
tensor([[-0.7830, 0.2870, 0.3721],
[ 0.2931, 0.4255, 0.3800],
[-0.1016, 0.6011, -0.7567],
[ 0.4526, -1.0510, -0.4116],
[ 1.4605, 1.4378, 0.4322]])
获取维度信息
1 | #获取维度信息 |
out:
torch.Size([5, 3])
加法
1 | #######################加法#################### |
out:
tensor([[2., 2., 2.],
[2., 2., 2.],
[2., 2., 2.],
[2., 2., 2.],
[2., 2., 2.]])
numpy一样标准的索引和切片
1 | import torch |
out:
tensor([[1., 0., 1., 1.],
[1., 0., 1., 1.],
[1., 0., 1., 1.],
[1., 0., 1., 1.]])
乘法
1 | a = torch.rand(2,2) |
矩阵乘法计算,行乘列求和的那种
1 | mul = tensor.matmul(tensor.t()) |
out:
tensor([[3., 3., 3., 3.],
[3., 3., 3., 3.],
[3., 3., 3., 3.],
[3., 3., 3., 3.]])
tensor([[3., 3., 3., 3.],
[3., 3., 3., 3.],
[3., 3., 3., 3.],
[3., 3., 3., 3.]])
连接张量
连接张量可以使用torch.cat。 将给定维数的张量顺序连接起来,也可以用torch.stack,另一种张量连接,略有不同
1 | t1 = torch.cat([tensor,tensor],dim=1) |
out:
tensor(
[[1., 0., 1., 1., 1., 0., 1., 1.],
[1., 0., 1., 1., 1., 0., 1., 1.],
[1., 0., 1., 1., 1., 0., 1., 1.],
[1., 0., 1., 1., 1., 0., 1., 1.]])
改变tensor的形状
1 | #改变tensor大小或形状 torch.view |
out:
torch.Size([4, 4]) torch.Size([16]) torch.Size([2, 8])
获取标量的值
1 | #如果只有一个tensor,使用item()可以获得这个value |
out:
tensor([1])
1
numpy和tensor相互转换
numpy转pytorch
1 | import numpy as np |
主要是torch.from_numpy()
pytorch转numpy
1 | tensor = torch_data.numpy() |
模型的保存和读取
1 | # 保存 |