Pytorch实践中文教程(1)
前言
PyTorch 是一個基于Torch框架的開源Python機器學習庫,用于NLP,CV等深度學習應用。它的開發人員是 Facebookd的人工智能小組,它不僅可以利用GPU加速,同時還實現了動態神經網絡,這點和現在流行的主流框架如TensorFlow不同。 PyTorch同時還有兩個高級功能: 張量計算(如Numpy) 和自動求導。
除了Facebook之外,Twitter、GMU和Salesforce等機構也都采用了PyTorch。
TensorFlow和Caffe都是命令式的靜態編程語言,,首先必須構建一個神經網絡,在訓練過程中結構不會發生變化,如果想要改 變網絡的結構,就必須從頭開始。但是對于PyTorch,通過 反向求導技術,可以讓你任意實時改變神經網絡。這一靈活 是PyTorch對比TensorFlow的最大優勢。
另外,PyTorch的代碼對比TensorFlow而言,更加簡潔直觀,底層代碼也更容易看懂,這對于使用 它并且計劃理解底層得人是一件特別棒的事情。
所以,總結一下PyTorch的優點:
當然,一枚硬幣有兩面,PyTorch也不例外,對比TensorFlow,其在功能全面性上差強人意,目前,PyTorch還不支持快速傅里葉、沿維翻轉張量和檢查無窮與非數值張量;針對移動 端、嵌入式部署以及高性能服務器端的部署其性能表現有待提升;其次因為這個框 架較新,使得 他的社區沒有那么強大,在文檔方面其核心庫大部分都沒有文檔。
目錄
文章目錄
- 前言
- 目錄
- 正文
- 什么是PyTorch
- 概念基礎
- Tensors(張量)
- 運算
- 減法:方式1
- 減法:方式2
- 維度
- 取值
正文
首先是安裝Pytorch,可以參照這篇:
Windows下pytorch安裝
好了,現在可以開始熟悉PyTorch了。
什么是PyTorch
PyTorch 是一個基于Python的深度學習包,主要為兩類人提供服務:
概念基礎
Tensors(張量)
Tensors是一種類似于NumPy的ndayyays的數據結構,具有多維數組的所有優點,同時,基于PyTorch的特殊實現,你可以用GPU來加速你的數組運算。
# 首先導入torch包 from __future__ import print_function import torch讓我們小試牛刀一下,構造一個4*4的二維隨機數組。
x=torch.rand(4,4) print(x)程序輸出
tensor([[0.6254, 0.1690, 0.4922, 0.0543],[0.6057, 0.0293, 0.3909, 0.2498],[0.0916, 0.0795, 0.5616, 0.8738],[0.3008, 0.3016, 0.8778, 0.7976]])```大家可以注意一下,輸出的是Tensor標識的一個數據。另外有一個需要特別注意的地方,在初始化一個空數組時,結果可能和我們想象的不一樣。```b x=torch.empty(4,2) print(x)程序輸出
tensor([[-8.2481e+24, 7.2727e-43],[-8.2485e+24, 7.2727e-43],[-8.2485e+24, 7.2727e-43],[-8.2485e+24, 7.2727e-43]])可以發現,輸出結果,和我們想象中有點點兒區別,但也沒什么大礙。
PyTorch不僅可以設置數組的維度,同時還可以設置數組初始化時的數據類型。
接下來我們來構建一個lond型的tensor吧。
結果
tensor([[0, 0, 0],[0, 0, 0],[0, 0, 0],[0, 0, 0],[0, 0, 0]])```b可以與設置為torch.float的做一下對比:```btensor([[0., 0., 0., 0.],[0., 0., 0., 0.],[0., 0., 0., 0.],[0., 0., 0., 0.]])``` 和numpy一樣,Pytorch可以設置數組初始化時的數值: ```bx=torch.tensor([4.5,2]) print(x)#結果 tensor([4.5000, 2.0000])在批量初始化同維數組時,可以利用已經存在的數組的相關信息。
x = x.new_ones(4, 4, dtype=torch.double) # new_*系列方法需要維度print(x) x = torch.randn_like(x, dtype=torch.float) # 重新設置數據類型print(x) print(x.size) # 結果有相同的維度# 結果tensor([[1., 1., 1., 1.],[1., 1., 1., 1.],[1., 1., 1., 1.],[1., 1., 1., 1.]], dtype=torch.float64) tensor([[ 0.9930, 0.8410, -0.5197, -0.3821],[ 1.4312, -0.1829, 2.0677, -0.3969],[ 0.3915, 0.9932, -0.4115, 0.9079],[-0.6334, 0.8982, -0.2081, -0.4650]]) torch.Size([4, 4])運算
接下來,本文將以減法為例演示,PyTorch如何實現四則運算。
減法:方式1
y=torch.randn(4,4) print(x-y) #輸出 tensor([[ 0.2948, 0.4200, -1.2566, -0.4528],[ 1.1510, -1.0804, 2.0055, -1.3292],[ 0.2645, 0.3557, -1.2443, 0.8334],[-1.0146, 0.6967, -0.9362, -1.2695]])減法:方式2
# 可以指定輸出的存儲變量 result=torch.empty(4,4) torch.min(x,y,out=result) print(result) # 輸出 tensor([[ 0.6982, 0.4210, -0.5197, -0.3821],[ 0.2802, -0.1829, 0.0622, -0.3969],[ 0.1270, 0.6375, -0.4115, 0.0745],[-0.6334, 0.2014, -0.2081, -0.4650]])有的時候我們并不想增加我們的內存使用量
可以使用以下方式:
通過在相應的操作后面加上斜線,結果將會被放到第一個變量上。
維度
在操作Tensor的時候,可以使用和Numpy類似的操作。
比如:
如果,你想改變Tensor的維度,則可以使用view方法
x=torch.randn(4,8) y=x.view(32) z=x.view(-1,8) print(x.size(),y.size(),z.size()) # 結果 torch.Size([4, 8]) torch.Size([32]) torch.Size([4, 8])取值
類似于Numpy,torch也有可以直接獲得變量值的方法:
x = torch.ones(1) print(x) print(x.item()) print(x) print(x.item()) #結果 tensor([1.]) 1.0未完待續
關注公眾號,輸入‘torch1’,可以獲得本文的可交互代碼
總結
以上是生活随笔為你收集整理的Pytorch实践中文教程(1)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: oracle truncate 日期,【
- 下一篇: web笔记Error:That IP a