1. 程式人生 > >【DeepLearning】【PyTorch (1)】PyTorch官方教程個人筆記

【DeepLearning】【PyTorch (1)】PyTorch官方教程個人筆記

PyTorch 官方教程 Getting Started 第一部分 Deep Learning with PyTorch: A 60 Minute Blitz 筆記

文章目錄

1. What is PyTorch?

What is PyTorch?


PyTorch 是基於 Python 的科學計算包,目的有兩個:

  1. 神經網路上的NumPy.
  2. 敏捷高效的深度學習框架.

PyTorch是Torch在Python上的移植,Torch是基於Lua語言的的深度學習框架。因此,PyTorch繼承了Torch靈活的動態圖特性,與Python語言簡潔的語法特性。基於這兩個特性,PyTorch可以輕鬆地與NumPy互動。NumPy將array放入CPU加速計算,PyTorch將Tensor放入GPU加速計算


PyTorch 和 TensorFlow 類似,使用 Tensor 組織資料。Tensor(張量) 和 NumPy 的 ndarray(多維陣列) 相似 。

torch package 包含基於高維張量的資料結構和計算它們的操作方式,預設使用 CPU 計算。它們也有 CUDA 版本,可以使用 GPU 計算。

from __future__ import print_function
import torch

建立未初始化的 5x3 矩陣:

x = torch.empty(5, 3)
print(x)

Out:

tensor([[4.1371e-07, 4.5822e-41, 6.7807e-06],
        [4.5822e-41, 0.0000e+00, 0.0000e+00],
        [0.0000e+00, 0.0000e+00, 0.0000e+00],
        [0.0000e+00, 0.0000e+00, 0.0000e+00],
        [0.0000e+00, 0.0000e+00, 0.0000e+00]])

建立隨機初始化的矩陣:

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

Out:

tensor([[0.3814, 0.6408, 0.5860],
        [0.4887, 0.5330, 0.8477],
        [0.5300, 0.5962, 0.5901],
        [0.3305, 0.5589, 0.7821],
        [0.4265, 0.6637, 0.2600]])

建立0矩陣初始化的矩陣,資料型別為長整型:

x = torch.zeros(5, 3, dtype=torch.long)
print(x)

Out:

tensor([[0, 0, 0],
        [0, 0, 0],
        [0, 0, 0],
        [0, 0, 0],
        [0, 0, 0]])

建立矩陣,從 Python 資料結構獲得資料:

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

Out:

tensor([5.5000, 3.0000])

上面所建立x是一個torch.Tensor。它就是高維張量,其每一個元素的資料型別都相同。
Torch 定義了8位CPU張量型別和8位GPU張量型別。點選這裡

print(type(x))

Out

<class 'torch.Tensor'>

每個torch.Tensor都有它的torch.dtypetorch.devicetorch.layout,這些都是它的屬性(Tensor Attributes)

2. Autograd: Automatic Differentiation

Autograd: Automatic Differentiation


與TensorFlow的靜態圖方式不同,PyTorch使用動態圖的方式計算梯度反向傳播。

PyTorch的動態圖特性依賴其自動微分機制(Autograd mechanics)。動微分機制(Autograd mechanics)具體由torch.autograd包實現。

torch.Tensor.requires_grad屬性設定為True,將開始跟蹤在這個tensor上的所有operations。當完成對這個tensor的所有operatio後,呼叫.backward(),自動計算它的所有梯度,它的梯度值積累儲存在.grad屬性裡。

呼叫.detach()停止追蹤計算曆史。

將程式碼塊包裹在with torch.no_grad():內,可以強制停止追蹤計算曆史,即使程式碼塊內的tensor的requires_grad=True

torch.autograd.Function類對自動微分機制(Autograd mechanics)非常重要。

TensorFunction是相互連線的,共同建立一個無環的計算圖。每個tensor都有一個.grad_fn屬性,關聯到建立這個TensorFunction上。如果這個Tensor不是由Function建立的,而是由使用者建立的,則它的grad_fn = None

數學上,如果有一個向量值函式 y = f ( x ) \vec{y}=f(\vec{x}) y \vec{y} 對每個 x \vec{x} 的梯度組成一個雅克比矩陣(Jacobian matrix):
J = ( y 1 x 1 y m x 1 y 1 x n y m x n ) J =\left(\begin{array}{ccc} \frac{\partial y_{1}}{\partial x_{1}} &amp; \cdots &amp; \frac{\partial y_{m}}{\partial x_{1}}\\ \vdots &amp; \ddots &amp; \vdots\\ \frac{\partial y_{1}}{\partial x_{n}} &amp; \cdots &amp; \frac{\partial y_{m}}{\partial x_{n}} \end{array}\right)

一般地,torch.autograd是計算雅克比矩陣-向量內積的引擎。也就是說,給定任意向量 v = ( v 1 v 2 v m ) T v=\left(\begin{array}{cccc} v_{1} &amp; v_{2} &amp; \cdots &amp; v_{m}\end{array}\right)^{T} ,計算內積 J v J\cdot v 。當 v v 是標量函式 l = g ( y ) l=g\left(\vec{y}\right) 的梯度時,也就是, v = ( l y 1 l y m ) T v=\left(\begin{array}{ccc}\frac{\partial l}{\partial y_{1}} &amp; \cdots &amp; \frac{\partial l}{\partial y_{m}}\end{array}\right)^{T} ,那麼,根據鏈式法則,雅克比矩陣-向量內積就是 l l x \vec{x} 的梯度:

J v = ( y 1 x 1 y m x 1 y 1 x n y m x n ) ( l y 1 l y m ) = ( l x 1 l x n ) J\cdot v=\left(\begin{array}{ccc} \frac{\partial y_{1}}{\partial x_{1}} &amp; \cdots &amp; \frac{\partial y_{m}}{\partial x_{1}}\\ \vdots &amp; \ddots &amp; \vdots\\ \frac{\partial y_{1}}{\partial x_{n}} &amp; \cdots &amp; \frac{\partial y_{m}}{\partial x_{n}} \end{array}\right)\left(\begin{array}{c} \frac{\partial l}{\partial y_{1}}\\ \vdots\\ \frac{\partial l}{\partial y_{m}} \end{array}\right)=\left(\begin{array}{c} \frac{\partial l}{\partial x_{1}}\\ \vdots\\ \frac{\partial l}{\partial x_{n}} \end{array}\right)

相關推薦

DeepLearningPyTorch (1)PyTorch官方教程個人筆記

PyTorch 官方教程 Getting Started 第一部分 Deep Learning with PyTorch: A 60 Minute Blitz 筆記 文章目錄 1. What is PyTorch? 2. Autogr

原創 Spark動手實踐 1Hadoop2.7.3安裝部署實際動手

dmi 遠程 nag proc host 一個 error img 連接 目錄: 第一部分:操作系統準備工作:   1. 安裝部署CentOS7.3 1611   2. CentOS7軟件安裝(net-tools, wget, vim等)   3. 更新CentOS

二分匹配入門專題1G - Asteroids poj3041最小頂點覆蓋

navigate nav mini resp not define 一個 present exp Bessie wants to navigate her spaceship through a dangerous asteroid field in the shape o

mNOIP模擬賽Day 1 T2 數顏色

name esp fine www. tar pre ring 由於 使用 題目傳送門:https://www.luogu.org/problemnew/show/P3939 題外話:寫完這題後本地跑了下極限數據,用時1.5s,於是馬上用fread+fwrite優化至0.

luogu P3372 線段樹1模板

esp algorithm n) col LG uil shu amp urn 線段樹的模板題 update區間修改,query區間求和 1 #include <iostream> 2 #include <cstdio> 3 #include

數據結構總結1-數據結構的自述

它的 除了 友情 設計 提高自己 ear hellip 編程人員 aid 一、數據結構的自我介紹 大家好,餓叫數據結構,是用來提高程序員的程序設計水平的。 官方定義我為:數據結構是指相互之間存在著一種或多種關系的數據元素的集合和該集合中數據元素之間的關系組成。記為:

AD9854原理圖、PCB設計原始檔,AD9854的簡要介紹及使用心得和一些建議——電路模組使用心得1

原理圖: 鄙人習慣在原理圖上將各種細節標註清楚~ PCB : 3D封裝看著舒服~ 晶片主要特點: 1. 高達300MHz的系統時鐘; 2. 能輸出一般調製訊號,FSK,BPSK,PSK,CHIRP,AM等; 3. 100MHz時具有80dB的信噪比; 4.

ML模型詳細推導1- 線性迴歸

線性迴歸 0. 資料集和目標 1. 模型 2. 策略 3. 演算法(模型求解) 3.1 正規方程法 3.2 梯度下降法 4. 廣義線性模型 學習過程主要順著 周志華《機器學習》第三章線性模型

java自定義註解1java自定義註解-屬性

        關於自定義註解,以前專案種應用的不多,最近看新專案過程中發現了挺多自定義註解相關內容,使用起來比較巧妙,於是 總結了兩種方式,記錄如下:         第一種:結合反射進行屬性注入,程式碼如下:

Untiy3d-編輯器相關1Unity中的一些特殊的資料夾

1.Editor(只要叫這個名字的資料夾,可以存在多個) 叫這名字的資料夾下所有資原始檔和指令碼檔案都不會被打到包中。指令碼也只有編輯時候能用。編輯器相關的資源可以放入此檔案中;   2.Editor Default Resources(Assets下根目錄) 不會打包到包

題解 P3372 模板線段樹 1

線段樹模板題 所以,我偏不用線段樹 奇了怪了 主要思路:平衡樹——Splay Splay是可以很好的維護區間的。 我這裡主要講如何用Splay維護區間。 我們知道Splay是嚴格按照中序遍歷的順序的,用rotate操作並不會改變這種性質,所以我們我們可以考慮一下一棵二叉樹的中序遍歷的特點。 如果

Java學習之路---1List的ArrayList和LinkedList的KTV點歌系統修改

本程式碼是參考書籍敲出 ,加入了部分自己的東西讓程式完善一些,謝謝!!! KTVArrayList程式碼: 1 import java.util.Scanner; 2 import java.util.ArrayList; 3 4 public class KTVByArrayList {

AD17軟體選中原理圖中的器件從而選中PCB中的封裝點亮顯示 Altium designer 小技巧1

今天給大家分享一個AD的小技巧,我之前用的AD15.0的版本,在PCB佈局的時候常常會用到一個小技巧:通過原理圖中選中器件從而點亮PCB中對應的封裝。這樣子的好處就是非常方便抓取模組器件,從而快速的佈局,就像下圖中這樣: 在我們佈局的時候,就可以一個模組一個模組的來抓取之後佈局,比如我想要抓

Ancient Cipher 字串+排序紫書例題4.1

題意:給定兩個字串,你可以替換或者置換,替換是指可以將相同的字母替換為任意一個字母,而置換是指將字母替換為下一個,如A替換B,B替換為C,,,Z替換為A。你需要判斷是否可以通過一系列操作使兩個字串相等。 思路:既然可以替換和置換,那麼我們就可以用兩個陣列統計兩個字串中各個字

飛機設計知識學習1 伺服彈性試驗

        飛機上裝有感受飛機運動的感測器(如加速度、俯仰速率、滾轉速率及偏航速率等)以測量飛機的飛行引數二由於飛機不是完全剛性的,因此這些感測器能夠測量到諸如機身彎曲及扭轉等彈性變形引起的結構加速度和角速率訊號,通過控制面位置感測器也測量到

C++ 程式語言學習1

2019.01.03  C++學習 ---------------------------------------------------------------------------------------------------------------------------

機器學習層次聚類演算法-1HCA(Hierarchical Clustering Alg)的原理講解 + 示例展示數學求解過程

層次聚類(Hierarchical Clustering)是聚類演算法的一種,通過計算不同類別資料點間的相似度來建立一棵有層次的巢狀聚類樹。在聚類樹中,不同類別的原始資料點是樹的最低層,樹的頂層是一個聚類的根節點。建立聚類樹有自下而上合併和自上而下分裂兩種方法,本篇文章介紹合併方法。層次聚類的合併演算法層次聚

ML經典書籍系列1解讀PRML

本書第8章之前的生成模型都是很簡單的,就是一個基本概率分佈加一個先驗。第8章之後,講了對基本模型的混合和時序擴充套件,其實各種概率生成模型就是這兩個東西拼起來的,無非就是時序擴充套件一般就是用馬爾科夫性,共享成分一般就用混合,更進一步用更多層次的混合。 4.本書重點和圖模型的相關演算法 1) 引數的似然估計(

演算法題: 求一個整數陣列中,通過元素加減運算得到指定結果的所有運算過程. 例如5,4,6,7,1= 9 ?

題目: 給定一個整數陣列int[] a (a.length > 1),和一個整數值 m,試輸出所有運算結果等於m的運算過程。可使用的運算方式只有加法和減法。陣列元素最多參與一次運算。例如,給定陣列【5,4,6,7,1】和整數9,輸出運算結果為9的運算過程如下: +

第十週專案1二叉樹演算法驗證(一)

/* Copyright (c)2017,煙臺大學計算機與控制工程學院 All rights reserved. 檔名稱:33.cpp 作 者:尚文哲 完成日期:2017年11月9日 問題描述: 執行並重複測試教學內容中涉及的演算法。改