深度學(xué)習(xí)框架PyTorch入門(1)

本文是DEEP LEARNING WITH PYTORCH: A 60 MINUTE BLITZ的學(xué)習(xí)筆記

教程主要分為以下4個部分:

  • TENSORS (張量)
  • A GENTLE INTRODUCTION TO TORCH.AUTOGRAD (Autograd自動求導(dǎo))
  • NEURAL NETWORKS (神經(jīng)網(wǎng)絡(luò))
  • TRAINING A CLASSIFIER (訓(xùn)練一個分類器)

下面開始介紹第一部分:

張量(Tensors)是一種特殊的數(shù)據(jù)結(jié)構(gòu)喘漏,類似于數(shù)組(arrays)和矩陣(matrices)芥喇。在PyTorch中安皱,我們使用張量來編碼模型的輸入和輸出,以及模型的參數(shù)确憨。
除Tensors可以在GPU或其他專門的硬件上運行以加速計算外,其他非常類似于NumPy的ndarrays

import torch
import numpy as np
1. Tensor Initialization
1.1 Directly from data

Tensors can be created directly from data. The data type is automatically inferred.

data = [[1, 2], [3, 4]]
x_data = torch.tensor(data)
1.2 From a NumPy array

Tensors can be created from NumPy arrays.

np_array = np.array(data)
x_np = torch.from_numpy(np_array)
1.3 From another tensor

The new tensor retains the properties (shape, datatype) of the argument tensor, unless explicitly overridden.

x_ones = torch.ones_like(x_data) # retains the properties of x_data
print(f"Ones Tensor: \n {x_ones} \n")

x_rand = torch.rand_like(x_data, dtype=torch.float) # overrides the datatype of x_data
print(f"Random Tensor: \n {x_rand} \n")

我們發(fā)現(xiàn)蜒蕾,默認情況下新變量x_ones與參數(shù)張量x_data的數(shù)據(jù)類型確實相同及汉,除非對參數(shù)dtype進行顯式指定沮趣。

1.4 With random or constant values

shape is a tuple of tensor dimensions. In the functions below, it determines the dimensionality of the output tensor

shape = (2, 3,)
rand_tensor = torch.rand(shape)
ones_tensor = torch.ones(shape)
zeros_tensor = torch.zeros(shape)

print(f"Random Tensor: \n {rand_tensor} \n")
print(f"Ones Tensor: \n {ones_tensor} \n")
print(f"Zeros Tensor: \n {zeros_tensor}")
2. Tensor Attributes

Tensor attributes describe their shape, datatype, and the device on which they are stored.

tensor = torch.rand(3, 4)

print(f"Shape of tensor: {tensor.shape}")
print(f"Datatype of tensor: {tensor.dtype}")
print(f"Device tensor is stored on: {tensor.device}")
3. Tensor Operations

Over 100 tensor operations, including transposing, indexing, slicing, mathematical operations, linear algebra, random sampling...

# We move our tensor to the GPU if available
if torch.cuda.is_available():
  tensor = tensor.to('cuda')
  print(f"Device tensor is stored on: {tensor.device}")
3.1 Standard numpy-like indexing and slicing:
tensor = torch.ones(4, 4)
tensor[:,1] = 0
print(tensor)
3.2 Joining tensors

use torch.cat to concatenate a sequence of tensors along a given dimension

t1 = torch.cat([tensor, tensor, tensor], dim=1)
print(t1)

我們發(fā)現(xiàn)張量t1確實是3個張量tensor按第1軸即列(參數(shù)dim=1)拼接在一起

3.3 Multiplying tensors
# This computes the element-wise product
print(f"tensor.mul(tensor) \n {tensor.mul(tensor)} \n")
# Alternative syntax:
print(f"tensor * tensor \n {tensor * tensor}")

This computes the matrix multiplication between two tensors:

print(f"tensor.matmul(tensor.T) \n {tensor.matmul(tensor.T)} \n")
# Alternative syntax:
print(f"tensor @ tensor.T \n {tensor @ tensor.T}")

上圖的前者相當(dāng)于常規(guī)的向量化(兩個矩陣之間的對應(yīng)相同位置元素相乘),后者是矩陣乘法坷随,相當(dāng)于矩陣A與其轉(zhuǎn)置A^T相乘房铭,在這里即是\begin{bmatrix} 1 & 0 & 1 & 1 \\ 1 & 0 & 1 & 1 \\ 1 & 0 & 1 & 1 \\ 1 & 0 & 1 & 1 \\ \end{bmatrix} \begin{bmatrix} 1 & 1 & 1 & 1 \\ 0 & 0 & 0 & 0 \\ 1 & 1 & 1 & 1 \\ 1 & 1 & 1 & 1 \\ \end{bmatrix}驻龟。

3.4 In-place operations

Operations that have a _ suffix are in-place. For example: x.copy_(y), x.t_(), will change x.

In-place operations save some memory, but can be problematic when computing derivatives because of an immediate loss of history. Hence, their use is discouraged.

4. Bridge with NumPy

Tensors on the CPU and NumPy arrays can share their underlying memory locations, and changing one will change the other.

4.1 Tensor to NumPy array
t = torch.ones(5)
print(f"t: {t}")
n = t.numpy()
print(f"n: {n}")

t.add_(1)
print(f"t: {t}")
print(f"n: {n}")

A change in the tensor reflects in the NumPy array.

4.2 NumPy array to Tensor
n = np.ones(5)
t = torch.from_numpy(n)

np.add(n, 1, out=n)
print(f"t: {t}")
print(f"n: {n}")

很明顯,vice versa缸匪。


總結(jié)一下用到的API:
函數(shù):tensor(), from_numpy(), ones_like(), rand_like(), rand(), ones(), zeros(), cuda.is_available(), cat(), stack()
tensor的屬性和方法:shape, dtype, device, T, to(), mul(), matmul(), add_(), numpy(), copy_(), t_()
特殊符號:*, @

參考:

  1. https://pytorch.org/tutorials/beginner/deep_learning_60min_blitz.html
  2. https://pytorchbook.cn/chapter2/2.1.1.pytorch-basics-tensor/
  3. https://www.youtube.com/watch?v=u7x8RXwLKcA
  4. https://colab.research.google.com/github/pytorch/tutorials/blob/gh-pages/_downloads/3dbbd6931d76adb0dc37d4e88b328852/tensor_tutorial.ipynb
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末翁狐,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子凌蔬,更是在濱河造成了極大的恐慌露懒,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,126評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件砂心,死亡現(xiàn)場離奇詭異懈词,居然都是意外死亡,警方通過查閱死者的電腦和手機辩诞,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評論 2 382
  • 文/潘曉璐 我一進店門坎弯,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人译暂,你說我怎么就攤上這事荞怒。” “怎么了秧秉?”我有些...
    開封第一講書人閱讀 152,445評論 0 341
  • 文/不壞的土叔 我叫張陵褐桌,是天一觀的道長。 經(jīng)常有香客問我象迎,道長荧嵌,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,185評論 1 278
  • 正文 為了忘掉前任砾淌,我火速辦了婚禮啦撮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘汪厨。我一直安慰自己赃春,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 64,178評論 5 371
  • 文/花漫 我一把揭開白布劫乱。 她就那樣靜靜地躺著织中,像睡著了一般。 火紅的嫁衣襯著肌膚如雪衷戈。 梳的紋絲不亂的頭發(fā)上狭吼,一...
    開封第一講書人閱讀 48,970評論 1 284
  • 那天,我揣著相機與錄音殖妇,去河邊找鬼刁笙。 笑死,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的疲吸。 我是一名探鬼主播座每,決...
    沈念sama閱讀 38,276評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼摘悴!你這毒婦竟也來了尺栖?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,927評論 0 259
  • 序言:老撾萬榮一對情侶失蹤烦租,失蹤者是張志新(化名)和其女友劉穎延赌,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體叉橱,經(jīng)...
    沈念sama閱讀 43,400評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡挫以,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,883評論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了窃祝。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片掐松。...
    茶點故事閱讀 37,997評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖粪小,靈堂內(nèi)的尸體忽然破棺而出大磺,到底是詐尸還是另有隱情,我是刑警寧澤探膊,帶...
    沈念sama閱讀 33,646評論 4 322
  • 正文 年R本政府宣布杠愧,位于F島的核電站,受9級特大地震影響逞壁,放射性物質(zhì)發(fā)生泄漏流济。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,213評論 3 307
  • 文/蒙蒙 一腌闯、第九天 我趴在偏房一處隱蔽的房頂上張望绳瘟。 院中可真熱鬧,春花似錦姿骏、人聲如沸糖声。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,204評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽蘸泻。三九已至,卻和暖如春擅腰,著一層夾襖步出監(jiān)牢的瞬間蟋恬,已是汗流浹背翁潘。 一陣腳步聲響...
    開封第一講書人閱讀 31,423評論 1 260
  • 我被黑心中介騙來泰國打工趁冈, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 45,423評論 2 352
  • 正文 我出身青樓渗勘,卻偏偏與公主長得像沐绒,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子旺坠,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,722評論 2 345

推薦閱讀更多精彩內(nèi)容