这里介绍一下Pytorch 模块的基本操作。在Pytorch 中,数据的操作类型为tensor (张量类型)。什么是张量呢?推荐自主阅读维基百科张量(超链接点击跳转)来进行学习。
- 导入
Pytoch 模块
import torch
print(torch.__version__)
"""
输出结果:
1.9.0+cpu
"""
注意这里导入时使用的关键字是torch 而不是Pytorch . 其次我们可以看到这里的输出结果表示我们安装的是cpu 版本,有些电脑支持GPU 也可以安装对应的GPU 版本。
- 创建一个
tensor 对象
import torch
t1 = torch.Tensor([1, 2, 3])
print(t1)
"""
输出结果:
tensor([1., 2., 3.])
"""
我们可以看到输出的数据类型为tensor 类型。
- 将
Numpy 中使用的类型转化为Pytorch 中可以使用的类型
import torch
import numpy as np
array1 = np.arange(12).reshape(3, 4)
t1 = torch.Tensor(array1)
print(t1)
"""
输出结果:
tensor([[ 0., 1., 2., 3.],
[ 4., 5., 6., 7.],
[ 8., 9., 10., 11.]])
"""
可以看到我们成功将ndarray 类型数据转换为了tensor 类型的数据。
- 创建三行四列空的
tensor 对象
import torch
t1 = torch.empty([3, 4])
print(t1)
"""
输出结果:
tensor([[9.3674e-39, 1.0929e-38, 1.0469e-38, 1.0561e-38],
[1.0286e-38, 1.0653e-38, 1.0194e-38, 4.6838e-39],
[5.1429e-39, 4.9592e-39, 9.9184e-39, 9.0000e-39]])
"""
这里需要注意空并不代表没有数据,此时,在我们未指定数据值的情况下,系统会自动生成一些非常小的数据。类似的还有torch.ones() 和torch.zeros() 函数。
- 创建值位于
[0, 1) 区间内三行四列的随机数
import torch
t1 = torch.rand([3, 4])
print(t1)
"""
输出结果:
tensor([[0.5059, 0.3887, 0.8215, 0.5488],
[0.8683, 0.1002, 0.8799, 0.0522],
[0.6802, 0.7736, 0.6704, 0.1614]])
"""
- 创建值位于
[0, 3) 之间三行四列的随机整数
import torch
t1 = torch.randint(low=0, high=3, size=[3, 4])
print(t1)
"""
输出结果:
tensor([[2, 1, 0, 2],
[2, 2, 0, 0],
[1, 2, 1, 0]])
"""
7.获取tensor 中的数据,当tensor 中只有一个元素可用时tensor.item()
import torch
t1 = torch.tensor(1)
print(t1)
print(t1.item())
"""
输出结果:
tensor(1)
1
"""
- 将
tensor 类型的数据转换为ndarray 类型
import torch
t1 = torch.tensor([1, 2])
print(t1.numpy())
"""
输出结果:
[1 2]
"""
- 获取
tensor 对象的尺寸(形状)
import torch
t1 = torch.tensor([[[1, 2, 3]]])
print(t1.size())
print(t1.size(0))
print(t1.size(1))
print(t1.size(2))
"""
输出结果:
torch.Size([1, 1, 3])
1
1
3
"""
我们可以看到,当给定参数0 时代表输出第一个维度中的尺寸,1 代表第二个维度中的尺寸,2 代表第三个维度中的尺寸。
- 改变
tensor 的尺寸(形状)
import torch
t1 = torch.tensor([[[1, 2],
[2, 3],
[3, 4]]])
print(t1.view(-1))
print(t1.view(2, 3))
print(t1.view(2, -1))
print(t1.view(3, 2))
"""
输出结果:
tensor([1., 2., 2., 3., 3., 4.])
tensor([[1., 2., 2.],
[3., 3., 4.]])
tensor([[1., 2., 2.],
[3., 3., 4.]])
tensor([[1., 2.],
[2., 3.],
[3., 4.]])
"""
t1.view(-1) 表示将tensor 变为一维的,t1.view(2, 3) 表示将tensor 变为两行三列的,t1.view(2, -1) 表示将tensor 变为两行三列的,其中-1 表示由编译器自动计算列数。
- 获取
tensor 的维度,最大,最小值和标准差。
import torch
t1 = torch.tensor([[[1, 2],
[2, 3],
[3, 4]]])
print(t1.dim())
print(t1.max())
print(t1.min())
print(t1.std())
"""
输出结果:
3
tensor(4.)
tensor(1.)
tensor(1.0488)
"""
- 低维度(一维,二维)
tensor 的转置操作
t1 = torch.tensor(1)
print(f"The original tensor is: {t1}")
print(f"The transpose tensor of t1 is {t1.t()}")
print(f"The transpose tensor of t1 is {torch.transpose(input=t1, dim0=0, dim1=-1)}")
t1 = torch.tensor([[1, 2], [3, 4]])
print(f"The original tensor is: {t1}")
print(f"The transpose tensor of t1 is {t1.t()}")
print(f"The transpose tensor of t1 is {torch.transpose(input=t1, dim0=0, dim1=1)}")
"""
输出结果:
The original tensor is: 1
The transpose tensor of t1 is 1
The transpose tensor of t1 is 1
The original tensor is: tensor([[1, 2],
[3, 4]])
The transpose tensor of t1 is tensor([[1, 3],
[2, 4]])
The transpose tensor of t1 is tensor([[1, 3],
[2, 4]])
"""
我们可以看到对于一维或者二维tensor 可以使用.t() 或者.transpose() 函数进行转置. 对于高级tensor 的转置操作可以看这里Pytorch中高阶tensor的转置操作(超链接点击跳转)。
tensor 切片操作
import torch
import numpy as np
t1 = torch.tensor(np.arange(36).reshape((3, 3, 4)))
print(t1[1, 2, 1])
print(t1[1, :, :])
"""
输出结果:
tensor(21, dtype=torch.int32)
tensor([[12, 13, 14, 15],
[16, 17, 18, 19],
[20, 21, 22, 23]], dtype=torch.int32)
"""
14.输出tensor 中元素的数据类型
import torch
import numpy as np
t1 = torch.tensor(np.arange(24).reshape((2, 3, 4)))
print(t1.dtype)
"""
输出结果:
torch.int32
"""
15.定义tensor 时设定内部元素数据类型
import torch
import numpy as np
t1 = torch.tensor(1, dtype=torch.double)
print(t1.dtype)
t1 = torch.tensor(np.array(12, dtype=np.int32))
print(t1.dtype)
t1 = torch.LongTensor(1, 2)
print(t1.dtype)
t1 = torch.DoubleTensor(1, 2)
print(t1.dtype)
"""
输出结果:
torch.float64
torch.int32
torch.int64
torch.float64
"""
16.tensor 的加法运算
import torch
t1 = torch.ones(3, 5)
print(t1)
t2 = torch.rand((3, 5))
print(t2)
print(t1 + t2)
print(torch.add(t1, t2))
"""
输出结果:
tensor([[1., 1., 1., 1., 1.],
[1., 1., 1., 1., 1.],
[1., 1., 1., 1., 1.]])
tensor([[0.5156, 0.1977, 0.9491, 0.4509, 0.7190],
[0.9628, 0.4868, 0.9708, 0.9781, 0.7506],
[0.3628, 0.0885, 0.7869, 0.9531, 0.4079]])
tensor([[1.5156, 1.1977, 1.9491, 1.4509, 1.7190],
[1.9628, 1.4868, 1.9708, 1.9781, 1.7506],
[1.3628, 1.0885, 1.7869, 1.9531, 1.4079]])
tensor([[1.5156, 1.1977, 1.9491, 1.4509, 1.7190],
[1.9628, 1.4868, 1.9708, 1.9781, 1.7506],
[1.3628, 1.0885, 1.7869, 1.9531, 1.4079]])
"""
相应的减法,乘法和除法运算可以类比于加法运算。关于四则运算的进阶写法,可以参考这篇Pytorch中的四则运算高级写法。
码字不易,如果大家觉得有用,请高抬贵手给一个赞让我上推荐让更多的人看到吧~
|