欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Pytorch官方教程练习之Pytorch入门

程序员文章站 2022-06-11 22:43:03
...

什么是 PyTorch?
PyTorch 是一个基于 Python 的科学计算包,主要定位两类人群:

  • NumPy 的替代品,可以利用 GPU 的性能进行计算。
  • 深度学习研究平台拥有足够的灵活性和速度

1.定义张量

Tensors 类似于 NumPy 的 ndarrays ,同时 Tensors 可以使用 GPU 进行计算。
导入torch模块

import torch

构造5×5矩阵

x = torch.empty(5, 3) # torch.empty返回未被初始化的随机数,区别于torch.rand(初始化为均匀分布)等.
print(x)
# 输出
tensor([[5.3413e-39, 0.0000e+00, 5.3413e-39],
        [0.0000e+00, 2.6950e-36, 0.0000e+00],
        [2.6950e-36, 0.0000e+00, 2.6950e-36],
        [0.0000e+00, 2.6950e-36, 0.0000e+00],
        [2.6950e-36, 0.0000e+00, 2.6950e-36]])

构造随机初始化矩阵:

x = torch.rand(5, 3) # torch.rand为均匀分布, torch.randn为标准正态分布
print(x)
# 输出
tensor([[ 0.6291,  0.2581,  0.6414],
        [ 0.9739,  0.8243,  0.2276],
        [ 0.4184,  0.1815,  0.5131],
        [ 0.5533,  0.5440,  0.0718],
        [ 0.2908,  0.1850,  0.5297]])

构造一个矩阵全为 0,而且数据类型是 long。

x = torch.zeros(5, 3, dtype=torch.long) # torch.zeros将矩阵值全设为0,可随意数据类型。
print(x)
# 输出
tensor([[ 0,  0,  0],
        [ 0,  0,  0],
        [ 0,  0,  0],
        [ 0,  0,  0],
        [ 0,  0,  0]])

直接使用指定数据,构造张量(tensor)

x = torch.tensor([5.5, 3])
print(x)
# 输出
tensor([ 5.5000,  3.0000])

基于已经存在的 tensor,创建一个tensor。

x = x.new_ones(5, 3, dtype=torch.double)    
# new_* methods take in sizes
print(x)

x = torch.randn_like(x, dtype=torch.float)  
# override dtype!
print(x)                                    
# result has the same size
# 输出
tensor([[1., 1., 1.],
        [1., 1., 1.],
        [1., 1., 1.],
        [1., 1., 1.],
        [1., 1., 1.]], dtype=torch.float64)
tensor([[ 1.0042,  2.9077,  0.3418],
        [-1.7231, -0.1896,  0.2495],
        [ 1.4710, -0.6653, -0.0418],
        [ 0.4931,  0.7417,  0.3869],
        [ 0.2716, -0.2167, -0.1279]])

获取tensor的维度信息

print(x.size())# or print(x.shape)
# 输出
torch.Size([5, 3])

2.基本操作
加法

y = torch.rand(5, 3)
print(x + y)
# 输出
tensor([[-0.1859,  1.3970,  0.5236],
        [ 2.3854,  0.0707,  2.1970],
        [-0.3587,  1.2359,  1.8951],
        [-0.1189, -0.1376,  0.4647],
        [-1.8968,  2.0164,  0.1092]])
or
print(torch.add(x, y))
or
result = torch.empty(5, 3)
# 提供一个输出 tensor 作为参数
torch.add(x, y, out=result)
print(result)
# 输出
tensor([[-0.1859,  1.3970,  0.5236],
        [ 2.3854,  0.0707,  2.1970],
        [-0.3587,  1.2359,  1.8951],
        [-0.1189, -0.1376,  0.4647],
        [-1.8968,  2.0164,  0.1092]])

覆盖加法

# adds x to y
y.add_(x) # add_()代表把x加到y,并覆盖y原有的值,
# 如x.copy_(y)、x.t_()均会改变原值。
print(y)
# 输出
tensor([[-0.1859,  1.3970,  0.5236],
        [ 2.3854,  0.0707,  2.1970],
        [-0.3587,  1.2359,  1.8951],
        [-0.1189, -0.1376,  0.4647],
        [-1.8968,  2.0164,  0.1092]])

切片

print(x[:, 1]) # 对数组进行切片,:表示选取所有行;1表示切片0到1(但不包括1)范围,即切第0列。
# 输出
tensor([ 0.4477, -0.0048,  1.0878, -0.2174,  1.3609])

改变大小

x = torch.randn(4, 4)
y = x.view(16)# 将4行4列矩阵调整为1维数组16个数,即用view()调整大小。
z = x.view(-1, 8)  # -1表示根据其他参数调整矩阵大小,如,第二个参数为8,-1则表示2,即调整为2行8列矩阵。优点,不用计算,方便。
print(x.size(), y.size(), z.size())
# 输出
torch.Size([4, 4]) torch.Size([16]) torch.Size([2, 8])

获取tensor元素值

x = torch.randn(1)
print(x)
print(x.item())# item()用来获取tensor元素数值,但只能获取一个值, 
# 一般用于tensor的累加。如,running_loss += loss.item() 
#输出
tensor([-0.4464])
-0.44643348455429077

x不只含一个元素张量

x = torch.randn(2, 2)
print(x)
print(x[0, 1])
print(x[0, 1].item())# item()可获取某一指定位置元素值。

参考
http://pytorch123.com/