Aprendizagem PyTorch: 1. O que é PyTorch?

1. O que é PyTorch

Ele é um pacote de computação científica baseado em Python. Existem dois tipos de usuários-alvo

  • Para usar GPU em vez de numpy
  • Uma plataforma de pesquisa de aprendizado profundo: fornecendo o máximo de flexibilidade e velocidade

Começar

Tensores

Tensores são semelhantes a ndarrays entorpecidos, a diferença é que os tensores podem usar GPU para acelerar os cálculos

from __future__ import print_function
import torch

Construa uma matriz 5 * 3 não inicializada:

x = torch.Tensor(5, 3)
print(x)
输出:
tensor([[ 0.0000e+00,  0.0000e+00,  1.3004e-42],
        [ 0.0000e+00,  7.0065e-45,  0.0000e+00],
        [-3.8593e+35,  7.8753e-43,  0.0000e+00],
        [ 0.0000e+00,  1.8368e-40,  0.0000e+00],
        [-3.8197e+35,  7.8753e-43,  0.0000e+00]])
Construa uma matriz zero, usando o tipo longo
x = torch.zeros(5, 3, dtype=torch.long)
print(x)
输出:
tensor([[0, 0, 0],
        [0, 0, 0],
        [0, 0, 0],
        [0, 0, 0],
        [0, 0, 0]])

Construa um tensor diretamente dos dados:

x = torch.tensor([5.5, 3])
print(x)
输出:

tensor([5.5000, 3.0000])

Ou construa um tensor a partir de um tensor existente. Esses métodos reutilizarão os atributos do tensor de entrada, por exemplo, dtype, a menos que o usuário forneça um novo valor

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

x = torch.randn_like(x, dtype=torch.float)    # 覆盖类型!
print(x)                                      # result 的size相同

输出:

tensor([[1., 1., 1.],
        [1., 1., 1.],
        [1., 1., 1.],
        [1., 1., 1.],
        [1., 1., 1.]], dtype=torch.float64)
tensor([[ 1.1701, -0.8342, -0.6769],
        [-1.3060,  0.3636,  0.6758],
        [ 1.9133,  0.3494,  1.1412],
        [ 0.9735, -0.9492, -0.3082],
        [ 0.9469, -0.6815, -1.3808]])

Pegue o tamanho do tensor

print(x.size())

输出:

torch.Size([5, 3])

Nota

torch.SizeNa verdade, é uma tupla, portanto, suporta todas as operações em tuplas.

operativo

Existem várias formas gramaticais de operações em tensores. Vamos usar a adição como um exemplo para explicar.

Grammar 1

y = torch.rand(5, 3)
print(x + y)

输出:

tensor([[ 1.7199, -0.1819, -0.1543],
        [-0.5413,  1.1591,  1.4098],
        [ 2.0421,  0.5578,  2.0645],
        [ 1.7301, -0.3236,  0.4616],
        [ 1.2805, -0.4026, -0.6916]])

Grammar Two

print(torch.add(x, y))

输出:

tensor([[ 1.7199, -0.1819, -0.1543],
        [-0.5413,  1.1591,  1.4098],
        [ 2.0421,  0.5578,  2.0645],
        [ 1.7301, -0.3236,  0.4616],
        [ 1.2805, -0.4026, -0.6916]])

Sintaxe 3:

Dê um tensor de saída como parâmetro

result = torch.empty(5, 3)
torch.add(x, y, out=result)
print(result)

输出:

tensor([[ 1.7199, -0.1819, -0.1543],
        [-0.5413,  1.1591,  1.4098],
        [ 2.0421,  0.5578,  2.0645],
        [ 1.7301, -0.3236,  0.4616],
        [ 1.2805, -0.4026, -0.6916]])

 

Sintaxe 4:

Operação no local (no local)

# 把x加到y上
y.add_(x)
print(y)

输出:

tensor([[ 1.7199, -0.1819, -0.1543],
        [-0.5413,  1.1591,  1.4098],
        [ 2.0421,  0.5578,  2.0645],
        [ 1.7301, -0.3236,  0.4616],
        [ 1.2805, -0.4026, -0.6916]])

Nota

Qualquer operação que altera um tensor local possui um _sufixo. Por exemplo x.copy_(y), a  x.t_()operação mudará x.

Você pode usar todas as numpyoperações de índice.

Você pode usar várias funções sofisticadas de indexação semelhantes ao NumPy padrão

print(x[:, 1])

输出:

tensor([-0.8342,  0.3636,  0.3494, -0.9492, -0.6815])

Redimensionar: Se quiser redimensionar / remodelar o tensor, você pode usar torch.view:

x = torch.randn(4, 4)
y = x.view(16)
z = x.view(-1, 8)  # -1的意思是没有指定维度
print(x.size(), y.size(), z.size())

输出:

torch.Size([4, 4]) torch.Size([16]) torch.Size([2, 8])

Se você tiver um único tensor de elemento, use .item()o valor como um número Python

x = torch.randn(1)
print(x)
print(x.item())

输出:

tensor([0.3441])
0.34412217140197754

Leia mais tarde

Existem mais de cem operações de tensor descritas aqui , incluindo transposição, indexação, operações matemáticas, álgebra linear, números aleatórios, etc.

ponte entorpecida

Converter um tensor de tocha em uma matriz numpy ou vice-versa é fácil.

Tensores de tocha e matrizes entorpecidas compartilharão memória potencial, e mudar um também mudará o outro.

Converter tensor da tocha em matriz numpy

a = torch.ones(5)
print(a)

输出:

tensor([1., 1., 1., 1., 1.])

b = a.numpy()
print(b)
print(type(b))

输出:

[ 1.  1.  1.  1.  1.]
<class 'numpy.ndarray'>

Por meio das operações a seguir, vemos como o valor da matriz numpy muda.

a.add_(1)
print(a)
print(b)

输出:

tensor([2., 2., 2., 2., 2.])
[ 2.  2.  2.  2.  2.]

Converter matriz numpy em tensor de tocha

Veja como alterar a matriz numpy altera automaticamente o tensor da tocha.

import numpy as np
a = np.ones(5)
b = torch.from_numpy(a)
np.add(a, 1, out=a)
print(a)
print(b)

输出:

[ 2.  2.  2.  2.  2.]
tensor([2., 2., 2., 2., 2.], dtype=torch.float64)

Todos os tensores na CPU, exceto os tensores de caracteres, oferecem suporte à conversão entre numpy.

Tensor CUDA

Você pode usar o método .to para mover o tensor para qualquer dispositivo.

# let us run this cell only if CUDA is available
# We will use ``torch.device`` objects to move tensors in and out of GPU
if torch.cuda.is_available():
    device = torch.device("cuda")          # a CUDA device object
    y = torch.ones_like(x, device=device)  # directly create a tensor on GPU
    x = x.to(device)                       # or just use strings ``.to("cuda")``
    z = x + y
    print(z)
    print(z.to("cpu", torch.double))       # ``.to`` can also change dtype together!

输出:

tensor([1.3441], device='cuda:0')
tensor([1.3441], dtype=torch.float64)

 

Acho que você gosta

Origin blog.csdn.net/qq_40716944/article/details/107789158
Recomendado
Clasificación