Pytorch基本语法
Pytorch 是一个基于NUMPY的科学计算包,提供强大的GPU强大功能的能力
1. 创建矩阵的操作
1.1 创建一个没有初始化的矩阵
x = torch.empty(5, 3)
x
"""
tensor([[9.2755e-39, 1.0561e-38, 4.5919e-39],
[5.1429e-39, 4.9592e-39, 8.9082e-39],
[8.9082e-39, 1.0194e-38, 9.1837e-39],
[4.6837e-39, 9.9184e-39, 9.0000e-39],
[1.0561e-38, 1.0653e-38, 4.1327e-39]])
"""
1.2 创建一个有初始化的矩阵
x = torch.rand(5, 3)
x
"""
tensor([[0.6994, 0.8182, 0.5483],
[0.4059, 0.2710, 0.2547],
[0.6139, 0.8456, 0.7267],
[0.1269, 0.2007, 0.3993],
[0.3319, 0.1059, 0.7489]])
"""
1.3 创建一个全零矩阵并可指定数据元素的类型为long
x = torch.zeros(5, 3, dtype=torch.long)
x
"""
tensor([[0, 0, 0],
[0, 0, 0],
[0, 0, 0],
[0, 0, 0],
[0, 0, 0]])
"""
2. 张量
2.1 直接通过数据创建张量
x = torch.tensor([2.5, 3.5])
x
"""
tensor([2.5000, 3.5000])
"""
2.2 通过已有的张量创建相同的新张量
x = x.new_ones(5, 3, dtype=torch.double)
print(x)
y = torch.rand_like(x, dtype=torch.float64)
y
"""
tensor([[1., 1., 1.],
[1., 1., 1.],
[1., 1., 1.],
[1., 1., 1.],
[1., 1., 1.]], dtype=torch.float64)
tensor([[0.3504, 0.0446, 0.4382],
[0.3618, 0.6987, 0.5454],
[0.7959, 0.3712, 0.4525],
[0.5551, 0.0660, 0.7350],
[0.5212, 0.5692, 0.2077]], dtype=torch.float64)
"""
2.3 得到张量的尺寸形状 返回的是元组类型
x.size()
y.size()
a, b = x.size()
print(x)
print(y)
print(a, b)
"""
torch.Size([5, 3])
torch.Size([5, 3])
5 3
"""
2.4 用类似于numpy的方式对张量进行操作
print(x[:, 1])
print(x[:, :2])
"""
tensor([1., 1., 1., 1., 1.], dtype=torch.float64)
tensor([[1., 1.],
[1., 1.],
[1., 1.],
[1., 1.],
[1., 1.]], dtype=torch.float64)
"""
2.5 改变张量形状(需保证数据元素总数量不变)
x = torch.randn(4, 4)
y = x.view(16)
z = x.view(-1, 8)
print(x.size(), y.size(), z.size())
"""
torch.Size([4, 4]) torch.Size([16]) torch.Size([2, 8])
"""
2.6 如果张量中只有一个元素,可以用.item()将其取出,作为一个python number
x = torch.randn(1)
print(x)
x.item()
"""
tensor([-1.7955])
-1.7955442667007446
"""
3. Torch Tensor和numpy array之间的相互转换
3.1 转换成array
a = torch.ones(5)
print(a)
b = a.numpy()
b
"""
tensor([1., 1., 1., 1., 1.])
array([1., 1., 1., 1., 1.], dtype=float32)
"""
3.2 其中一个进行加法操作,另一个也随之操作
a.add_(1)
print(a,b)
"""
tensor([2., 2., 2., 2., 2.]) [2. 2. 2. 2. 2.]
"""
3.3 转换成tensor
import numpy as np
a = np.ones(5)
b = torch.from_numpy(a)
np.add(a, 1, out=a)
print(a, b)
"""
[2. 2. 2. 2. 2.] tensor([2., 2., 2., 2., 2.], dtype=torch.float64)
"""
3.4 tensor可以用.to()方法将其移动到任意设备上
if torch.cuda.is_available():
device = torch.device("cuda")
y = torch.ones_like(x, device=device)
x = x.to(device)
z = x + y
print(z)
print(z.to("cpu", torch.double))
"""
tensor([-0.7955], device='cuda:0')
tensor([-0.7955], dtype=torch.float64)
"""