国产成人精品999视频&日本一区二区亚洲人妻精品&久久久精品国产99久久精&99热这里只有成人精品国产&精品国产剧情av一区二区&成人亚洲精品久久久久app&国产精品美女高潮抽搐A片

Pytorch 備忘清單

Pytorch 是一種開源機(jī)器學(xué)習(xí)框架,可加速從研究原型設(shè)計(jì)到生產(chǎn)部署的過程,備忘單是 官網(wǎng) 備忘清單為您提供了 Pytorch 基本語法和初步應(yīng)用參考

入門

介紹

認(rèn)識 Pytorch

from __future__ import print_function
import torch
x = torch.empty(5, 3)
>>> print(x)
tensor([
    [2.4835e+27, 2.5428e+30, 1.0877e-19],
    [1.5163e+23, 2.2012e+12, 3.7899e+22],
    [5.2480e+05, 1.0175e+31, 9.7056e+24],
    [1.6283e+32, 3.7913e+22, 3.9653e+28],
    [1.0876e-19, 6.2027e+26, 2.3685e+21]
])

Tensors 張量: 張量的概念類似于Numpy中的ndarray數(shù)據(jù)結(jié)構(gòu), 最大的區(qū)別在于Tensor可以利用GPU的加速功能.

創(chuàng)建一個(gè)全零矩陣

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]])

創(chuàng)建一個(gè)全零矩陣并可指定數(shù)據(jù)元素的類型為long

數(shù)據(jù)創(chuàng)建張量

x = torch.tensor([2.5, 3.5])
>>> print(x)
tensor([2.5000, 3.3000])

Pytorch 的基本語法

加法操作(1)

y = torch.rand(5, 3)
>>> print(x + y)
tensor([[ 1.6978, -1.6979,  0.3093],
        [ 0.4953,  0.3954,  0.0595],
        [-0.9540,  0.3353,  0.1251],
        [ 0.6883,  0.9775,  1.1764],
        [ 2.6784,  0.1209,  1.5542]])

加法操作(2)

>>> print(torch.add(x, y))
tensor([[ 1.6978, -1.6979,  0.3093],
        [ 0.4953,  0.3954,  0.0595],
        [-0.9540,  0.3353,  0.1251],
        [ 0.6883,  0.9775,  1.1764],
        [ 2.6784,  0.1209,  1.5542]])

加法操作(3)

# 提前設(shè)定一個(gè)空的張量
result = torch.empty(5, 3)
# 將空的張量作為加法的結(jié)果存儲張量
 torch.add(x, y, out=result)
>>> print(result)
tensor([[ 1.6978, -1.6979,  0.3093],
        [ 0.4953,  0.3954,  0.0595],
        [-0.9540,  0.3353,  0.1251],
        [ 0.6883,  0.9775,  1.1764],
        [ 2.6784,  0.1209,  1.5542]])

加法操作(4)

y.add_(x)
>>> print(y)
tensor([[ 1.6978, -1.6979,  0.3093],
        [ 0.4953,  0.3954,  0.0595],
        [-0.9540,  0.3353,  0.1251],
        [ 0.6883,  0.9775,  1.1764],
        [ 2.6784,  0.1209,  1.5542]])

注意: 所有 in-place 的操作函數(shù)都有一個(gè)下劃線的后綴。 比如 x.copy_(y), x.add_(y), 都會直接改變x的值

張量操作

>>> print(x[:, 1])
tensor([-2.0902, -0.4489, -0.1441,  0.8035, -0.8341])

張量形狀

x = torch.randn(4, 4)
# tensor.view()操作需要保證數(shù)據(jù)元素的總數(shù)量不變
y = x.view(16)
# -1代表自動匹配個(gè)數(shù)
z = x.view(-1, 8)
>>> print(x.size(), y.size(), z.size())
torch.Size([4, 4]) torch.Size([16]) torch.Size([2, 8])

取張量元素

x = torch.randn(1)
>>> print(x)
>>> print(x.item())
tensor([-0.3531])
-0.3530771732330322

Torch Tensor 和 Numpy array互換

a = torch.ones(5)
>>> print(a)
tensor([1., 1., 1., 1., 1.])

Torch Tensor和Numpy array共享底層的內(nèi)存空間, 因此改變其中一個(gè)的值, 另一個(gè)也會隨之被改變

Torch Tensor 轉(zhuǎn)換為 Numpy array

b = a.numpy()
>>> print(b)
[1. 1. 1. 1. 1.]

Numpy array轉(zhuǎn)換為Torch Tensor

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)

注意: 所有在CPU上的Tensors, 除了CharTensor, 都可以轉(zhuǎn)換為Numpy array并可以反向轉(zhuǎn)換.

導(dǎo)入 Imports

一般

# 根包
import torch
# 數(shù)據(jù)集表示和加載
from torch.utils.data import Dataset, DataLoader

神經(jīng)網(wǎng)絡(luò) API

# 計(jì)算圖
import torch.autograd as autograd
# 計(jì)算圖中的張量節(jié)點(diǎn)
from torch import Tensor
# 神經(jīng)網(wǎng)絡(luò)
import torch.nn as nn
# 層、激活等
import torch.nn.functional as F
# 優(yōu)化器,例如 梯度下降、ADAM等
import torch.optim as optim
# 混合前端裝飾器和跟蹤 jit
from torch.jit import script, trace

Torchscript 和 JIT

torch.jit.trace()

使用你的模塊或函數(shù)和一個(gè)例子,數(shù)據(jù)輸入,并追溯計(jì)算步驟,數(shù)據(jù)在模型中前進(jìn)時(shí)遇到的情況

@script

裝飾器用于指示被跟蹤代碼中的數(shù)據(jù)相關(guān)控制流

ONNX

torch.onnx.export(model, dummy data, xxxx.proto)
# 導(dǎo)出 ONNX 格式
# 使用經(jīng)過訓(xùn)練的模型模型,dummy
# 數(shù)據(jù)和所需的文件名

model = onnx.load("alexnet.proto")
# 加載 ONNX 模型
onnx.checker.check_model(model)
# 檢查模型,IT 是否結(jié)構(gòu)良好

onnx.helper.printable_graph(model.graph)
# 打印一個(gè)人類可讀的,圖的表示

Vision

# 視覺數(shù)據(jù)集,架構(gòu) & 變換
from torchvision import datasets, models, transforms
# 組合轉(zhuǎn)換
import torchvision.transforms as transforms

分布式訓(xùn)練

# 分布式通信
import torch.distributed as dist
# 內(nèi)存共享進(jìn)程
from torch.multiprocessing import Process

另見