Pytorch 是一種開源機器(qi)學習框架,可(ke)加速從研(yan)究原型設計到生產部署的(de)過程,備(bei)忘單是 官網 備(bei)忘清單為您(nin)提供了 基本語(yu)法和初(chu)步應用參考
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 張量(liang): 張量(liang)的(de)(de)概念類似(si)于(yu)Numpy中的(de)(de)ndarray數據結構, 最大的(de)(de)區別在于(yu)Tensor可以利(li)用GPU的(de)(de)加速功能.
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]])
創建一個全零矩陣并可(ke)指定數據元素的類型為long
x = torch.tensor([2.5, 3.5])
>>> print(x)
tensor([2.5000, 3.3000])
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]])
>>> 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]])
# 提前設定(ding)一(yi)個空的張(zhang)量
result = torch.empty(5, 3)
# 將空的張量作為加法的結果存儲張量
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]])
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
的操作函數都有一個下劃線的后綴。
比如 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()操(cao)作需(xu)要保證數據元素的總數量不變
y = x.view(16)
# -1代表自動匹配個數
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
a = torch.ones(5)
>>> print(a)
tensor([1., 1., 1., 1., 1.])
Torch Tensor和Numpy array共享底(di)層(ceng)的內存空間, 因此改變其中一個的值, 另一個也會隨之被(bei)改變
b = a.numpy()
>>> print(b)
[1. 1. 1. 1. 1.]
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)
注意: 所有(you)在CPU上(shang)的Tensors, 除了(le)CharTensor, 都可(ke)以轉換為(wei)Numpy array并可(ke)以反向轉換.
# 根包
import torch
# 數據(ju)集表示(shi)和加載
from torch.utils.data import Dataset, DataLoader
# 計算圖(tu)
import torch.autograd as autograd
# 計算圖中的張量(liang)節點(dian)
from torch import Tensor
# 神經網絡
import torch.nn as nn
# 層、激活等
import torch.nn.functional as F
# 優(you)化(hua)器(qi),例如 梯度(du)下降、ADAM等
import torch.optim as optim
# 混(hun)合前端(duan)裝飾器和跟蹤 jit
from torch.jit import script, trace
torch.jit.trace()
使用(yong)你的模(mo)塊或(huo)函數和一個例子(zi),數據(ju)輸入,并(bing)追溯計(ji)算步驟,數據(ju)在模(mo)型中前進(jin)時遇(yu)到(dao)的情況
@script
裝(zhuang)飾器用于指示被跟(gen)蹤代碼中(zhong)的數據相關控制流(liu)
torch.onnx.export(model, dummy data, xxxx.proto)
# 導出 ONNX 格式
# 使用經過訓練的模型模型,dummy
# 數據和所需的文件名
model = onnx.load("alexnet.proto")
# 加(jia)載 ONNX 模型
onnx.checker.check_model(model)
# 檢查模型,IT 是否結構良(liang)好
onnx.helper.printable_graph(model.graph)
# 打印(yin)一(yi)個人類可讀的,圖的表示
# 視覺數據(ju)集,架構 & 變換
from torchvision import datasets, models, transforms
# 組合(he)轉換
import torchvision.transforms as transforms
# 分布式(shi)通(tong)信
import torch.distributed as dist
# 內存共享進程(cheng)
from torch.multiprocessing import Process