導航:首頁 > 源碼編譯 > pytorch編譯慢

pytorch編譯慢

發布時間:2022-10-02 16:59:46

Ⅰ pytorch-cpu下載慢

下載慢可能與網速有關,也有可能與你的電腦性能不佳有關,優化電腦系統。可以提高運行效率。

Ⅱ 【python 】性能優化系列:隨機數

最近在做的項目重點部分與大量生成隨機數有關,維度高達[1700000,10000],需要生成 10 x 30 次左右,這里遇到內存和速度的雙重瓶頸,特地研究了一下如何優化隨機數。

優化時間測試所需的分析工具在另一篇博客《性能優化系列一:分析工具》中提到。

原生的python中也有隨機模塊生成 random.randint 和 random.random 等,但是速度非常慢,numpy 速度可以大幅提升。一般都採用numpy生成隨機數。

比較常用的就是以上幾種。在需要生成大量隨機數的情況下,或生成偽隨機數的情況下,python 3.7 常用 RandomState 。

直接生成大規模非稀疏矩陣如下,經常遇到 MemoryError 的錯誤,大概是同時生成多個float64精度的大規模隨機矩陣伺服器內存不夠,而random state 似乎也沒提供調整類型的attr,

這時最好使用即使生成即使銷毀,僅保留種子作為索引,同樣,多個CPU之間共享大規模矩陣涉及到共享內存或數據傳輸同步較慢的問題,最好也共享seed而不是直接共享矩陣。

ps. 這里注意一般我們設置time.time()為種子時,對於並發性程序是無效的,不要在並發程序中同時定義,建議生成一個seed list 列表再從中取。

這里可以對大規模矩陣進行分片以進行後續的np 乘法,再切片賦值,以時間換內存。這種情況的麻煩在於如果設定隨機數種子會導致每個分片的隨機數相同。可以利用一個最初seed(爺爺種子)randint生成 一組切片組數的seed(父親種子),再每次從中取不同的隨機數。

在上述切片方法嘗試之後,可以解決內存問題。但是時間非常慢,特別是採取s = 1時在standard normal 上調用170萬次的時間長達3000s,line search一下搜索了大約100000為切片值仍然太慢。在文檔中發現了 BitGenerator 和 Generator ,大約可以提速到原來的 1/3。

除了Numpy和基本模塊之外,AES CTR 加密演算法生成隨機數也很快,但是並不能有比較方便的方式控制每次生成的一樣。參見以下reference。

tensorflow 和 pytorch 也都有大規模生成隨機tensor的方式。性能待考。

1. 超快生成隨機數的方式CSDN博客
2. tensorflow 生成隨機tensor

Ⅲ python深度學習框架學哪個

Python 深度學習生態系統在這幾年中的演變實屬驚艷。pylearn2,已經不再被積極地開發或者維護,大量的深度學習庫開始接替它的位置。這些庫每一個都各有千秋。我們已經在 indico 的產品或者開發中使用了以下列表中的大部分的技術,但是對於剩下一些我們沒有使用的,我將會借鑒他人的經驗來幫助給出 Python 深度學習生態系統的清晰的、詳盡的理解。
確切地說,我們將會關註:
Theano
Lasagne
Blocks
TensorFlow
Keras
MXNet
PyTorch
下面是對這 7 大 Python 深度學習框架的描述以及優缺點的介紹。
Theano
描述:Theano 是一個 Python 庫,允許你定義、優化並且有效地評估涉及到多維數組的數學表達式。它與 GPUs 一起工作並且在符號微分方面表現優秀。
概述:Theano 是數值計算的主力,它支持了許多我們列表當中的其他的深度學習框架。Theano 由 Frédéric Bastien 創建,這是蒙特利爾大學機器學習研究所(MILA)背後的一個非常優秀的研究團隊。它的 API 水平較低,並且為了寫出效率高的 Theano,你需要對隱藏在其他框架幕後的演算法相當的熟悉。如果你有著豐富的學術機器學習知識,正在尋找你的模型的精細的控制方法,或者想要實現一個新奇的或者不同尋常的模型,Theano 是你的首選庫。總而言之,為了靈活性,Theano 犧牲了易用性。
優點:
靈活
正確使用時的高性能
缺點:
較高的學習難度
低水平的 API
編譯復雜的符號圖可能很慢
Lasagne
描述:在 Theano 上建立和訓練神經網路的輕量級庫
概述:因為 Theano 致力於成為符號數學中最先且最好的庫,Lasagne 提供了在 Theano 頂部的抽象,這使得它更適合於深度學習。它主要由當前 DeepMind 研究科學家 Sander Dieleman 編寫並維護。Lasagne 並非是根據符號變數之間的函數關系來指定網路模型,而是允許用戶在層級思考,為用戶提供了例如「Conv2DLayer」和「DropoutLayer」的構建塊。Lasagne 在犧牲了很少的靈活性的同時,提供了豐富的公共組件來幫助圖層定義、圖層初始化、模型正則化、模型監控和模型訓練。
優點:
仍舊非常靈活
比 Theano 更高級的抽象
文檔和代碼中包含了各種 Pasta Puns
缺點:
社區小
Blocks
描述:用於構建和訓練神經網路的 Theano 框架
概述:與 Lasagne 類似,Blocks 是在 Theano 頂部添加一個抽象層使深度學習模型比編寫原始的 Theano 更清晰、更簡單、定義更加標准化。它是由蒙特利爾大學機器學習研究所(MILA)編寫,其中一些人為搭建 Theano 和第一個神經網路定義的高級介面(已經淘汰的 PyLearn2)貢獻了自己的一份力量。比起 Lasagne,Blocks 靈活一點,代價是入門台階較高,想要高效的使用它有不小的難度。除此之外,Blocks 對遞歸神經網路架構(recurrent neural network architectures)有很好的支持,所以如果你有興趣探索這種類型的模型,它值得一看。除了 TensorFlow,對於許多我們已經部署在 indico 產品中的 API,Blocks 是其首選庫。
優點:
仍舊非常靈活
比 Theano 更高級的抽象
易於測試
缺點:
較高的學習難度
更小的社區
TensorFlow
描述:用於數值計算的使用數據流圖的開源軟體庫
概述:TensorFlow 是較低級別的符號庫(比如 Theano)和較高級別的網路規范庫(比如 Blocks 和 Lasagne)的混合。即使它是 Python 深度學習庫集合的最新成員,在 Google Brain 團隊支持下,它可能已經是最大的活躍社區了。它支持在多 GPUs 上運行深度學習模型,為高效的數據流水線提供使用程序,並具有用於模型的檢查,可視化和序列化的內置模塊。最近,TensorFlow 團隊決定支持 Keras(我們列表中下一個深度學習庫)。雖然 TensorFlow 有著自己的缺點,但是社區似乎同意這一決定,社區的龐大規模和項目背後巨大的動力意味著學習 TensorFlow 是一次安全的賭注。因此,TensorFlow 是我們今天在 indico 選擇的深度學習庫。
優點:
由軟體巨頭 Google 支持
非常大的社區
低級和高級介面網路訓練
比基於 Theano 配置更快的模型編譯
完全地多 GPU 支持
缺點:
雖然 Tensorflow 正在追趕,但是最初在許多基準上比基於 Theano 的慢。
RNN 支持仍不如 Theano
Keras
描述:Python 的深度學習庫。支持 Convnets、遞歸神經網路等。在 Theano 或者 TensorFlow 上運行。
概述:Keras 也許是水平最高,對用戶最友好的庫了。由 Francis Chollet(Google Brain 團隊中的另一個成員)編寫和維護。它允許用戶選擇其所構建的模型是在 Theano 上或是在 TensorFlow 上的符號圖上執行。Keras 的用戶界面受啟發於 Torch,所以如果你以前有過使用 Lua 語言的機器學習經驗,Keras 絕對值得一看。由於部分非常優秀的文檔和其相對易用性,Keras 的社區非常大並且非常活躍。最近,TensorFlow 團隊宣布計劃與 Keras 一起支持內置,所以很快 Keras 將是 TensorFlow 項目的一個分組。
優點:
可供選擇的 Theano 或者 TensorFlow 後端
直觀、高級別的埠
更易學習
缺點:
不太靈活,比其他選擇更規范
MXNet
描述:MXNet 是一個旨在提高效率和靈活性的深度學習框架。
概述:MXNet 是亞馬遜(Amazon)選擇的深度學習庫,並且也許是最優秀的庫。它擁有類似於 Theano 和 TensorFlow 的數據流圖,為多 GPU 配置提供了良好的配置,有著類似於 Lasagne 和 Blocks 更高級別的模型構建塊,並且可以在你可以想像的任何硬體上運行(包括手機)。對 Python 的支持只是其冰山一角—MXNet 同樣提供了對 R、Julia、C++、Scala、Matlab,和 Javascript 的介面。如果你正在尋找最佳的性能,選擇 MXNet 吧,但是你必須願意處理與之相對的一些 MXNet 的怪癖。
優點:
速度的標桿
非常靈活
缺點:
最小的社區
比 Theano 更困難的學習難度
PyTorch
描述:Python 中的張量(Tensors)和動態神經網路,有著強大的 GPU 加速。
概述:剛剛放出一段時間,PyTorch 就已經是我們 Python 深度學習框架列表中的一個新的成員了。它是從 Lua 的 Torch 庫到 Python 的鬆散埠,由於它由 Facebook 的 人工智慧研究團隊(Artificial Intelligence Research team (FAIR))支持且因為它用於處理動態計算圖(Theano,TensorFlow 或者其他衍生品沒有的特性,編譯者註:現在 TensorFlow 好像支持動態計算圖),它變得非常的有名。PyTorch 在 Python 深度學習生態系統將扮演怎樣的角色還不得而知,但所有的跡象都表明,PyTorch 是我們列表中其他框架的一個非常棒的選擇。
優點:
來自 Facebook 組織的支持
完全地對動態圖的支持
高級和低級 API 的混合
缺點:
比其他選擇,PyTorch 還不太成熟

linux伺服器如何切換pytorch版本

方法/步驟
Anaconda安裝:安裝Anaconda ,首先想到的是到官方網站下載,不過速度太慢X1;之前有聽說過清華鏡像源有豐富的牆外資源,逛了下後發現該鏡像源確實很強大,備份了普通人所需的大部分開源軟體安裝包

如何在Linux下安裝Pytorch
選擇安裝包 Anaconda2-4.4.0-Linux-x86_64.sh(_64為64位)下載,千萬不要選擇最新的安裝包(最新的Anaconda_5.0.1用的gcc版本為7.2,後續安裝時提示gcc不能編譯一個文件)

如何在Linux下安裝Pytorch
補充一點,如果安裝過程中添加環境變數選了"no",你需要手動添加環境變數時,可能在網上搜到的是"vi ~/.bashrc"這個命令,但是我推薦使用命令"gedit

~/.bashrc"以文本格式打開環境配置
如何在Linux下安裝Pytorch
另外,如果你在安裝的時候沒看到本文之前的內容選擇了最新版本的Anaconda,那你可能需要重新安裝Anaconda。

Github配置:接下來要安裝Pytorch了,直接在Pytorch官網上選擇自己需要的配置,然後復制類似於"conda install pytorch torchvision -c soumith"命令到終端,接下來就准備開始Pytorch之旅

如何在Linux下安裝Pytorch
但是意料之中的意外還是來了,安裝包的下載速度太慢X2。接著查看相關的資料,了解到可以通過Pytorch源文件的方法來安裝。Pytorch源文件安裝的方式需要通過git工具把源庫文件clone到本地(有網友指出download zip的方式下載PyTorch的源代碼,在進行編譯安裝時會報錯),而該指令需要有Github的帳號,並且需要配置ssh密鑰

如何在Linux下安裝Pytorch
Pytorch安裝:歷經重重困難,終於到了安裝Pytorch的時刻了。再等一等,現在你還需要先配置環境變數NO_CUDA(本人只裝CPU版本)和CMAKE_PREFIX_PATH(通過命令gedit ~/.bashrc可以通過文本方式打開.bashrc文件),接著用Anaconda安裝Pytorch的依賴包,最後在進行Pytorch的安裝。

第三次安裝完畢時出現了如下提示語句,發現沒有error或者warning等詞語就沒管;結果進入python模式,輸入import torch時出現提示"ImportError:No mole named _C";

如何在Linux下安裝Pytorch
我電腦上的usr/local/lib/python2.7/site-packages/torch文件夾下沒有任何文件,回想之前安裝Pytorch時的安裝提示,發現需要用pytorch/torch.egg-info里的文件替掉/home/gene_leee/anaconda2/lib/python2.7/site-packages/torch-0.4.0a0+0fd9682-py2.7.egg-info里的文件,再次實驗發現成功導入torch

如何在Linux下安裝Pytorch
需要知道命令"python setup.py clean",用於清除上次安裝失敗的殘余文件

如何在Linux下安裝Pytorch
接下來安裝TorchVision,TorchVision為PyTorch提供視頻和圖像方面的支持,包括資料庫和模型等,安裝好了之後可以很方便地導入很多圖像資料庫,比如cifar-10;按照TorchVision官網的方法2,成功安裝。

Ⅳ 零基礎學python好找工作嗎

Python 深度學習生態系統在這幾年中的演變實屬驚艷。pylearn2,已經不再被積極地開發或者維護,大量的深度學習庫開始接替它的位置。這些庫每一個都各有千秋。我們已經在 indico 的產品或者開發中使用了以下列表中的大部分的技術,但是對於剩下一些我們沒有使用的,我將會借鑒他人的經驗來幫助給出 Python 深度學習生態系統的清晰的、詳盡的理解。
確切地說,我們將會關註:
Theano
Lasagne
Blocks
TensorFlow
Keras
MXNet
PyTorch
下面是對這 7 大 Python 深度學習框架的描述以及優缺點的介紹。
Theano
描述:Theano 是一個 Python 庫,允許你定義、優化並且有效地評估涉及到多維數組的數學表達式。它與 GPUs 一起工作並且在符號微分方面表現優秀。
概述:Theano 是數值計算的主力,它支持了許多我們列表當中的其他的深度學習框架。Theano 由 Frédéric Bastien 創建,這是蒙特利爾大學機器學習研究所(MILA)背後的一個非常優秀的研究團隊。它的 API 水平較低,並且為了寫出效率高的 Theano,你需要對隱藏在其他框架幕後的演算法相當的熟悉。如果你有著豐富的學術機器學習知識,正在尋找你的模型的精細的控制方法,或者想要實現一個新奇的或者不同尋常的模型,Theano 是你的首選庫。總而言之,為了靈活性,Theano 犧牲了易用性。
優點:
靈活
正確使用時的高性能
缺點:
較高的學習難度
低水平的 API
編譯復雜的符號圖可能很慢
Lasagne
描述:在 Theano 上建立和訓練神經網路的輕量級庫
概述:因為 Theano 致力於成為符號數學中最先且最好的庫,Lasagne 提供了在 Theano 頂部的抽象,這使得它更適合於深度學習。它主要由當前 DeepMind 研究科學家 Sander Dieleman 編寫並維護。Lasagne 並非是根據符號變數之間的函數關系來指定網路模型,而是允許用戶在層級思考,為用戶提供了例如「Conv2DLayer」和「DropoutLayer」的構建塊。Lasagne 在犧牲了很少的靈活性的同時,提供了豐富的公共組件來幫助圖層定義、圖層初始化、模型正則化、模型監控和模型訓練。
優點:
仍舊非常靈活
比 Theano 更高級的抽象
文檔和代碼中包含了各種 Pasta Puns
缺點:
社區小
Blocks
描述:用於構建和訓練神經網路的 Theano 框架
概述:與 Lasagne 類似,Blocks 是在 Theano 頂部添加一個抽象層使深度學習模型比編寫原始的 Theano 更清晰、更簡單、定義更加標准化。它是由蒙特利爾大學機器學習研究所(MILA)編寫,其中一些人為搭建 Theano 和第一個神經網路定義的高級介面(已經淘汰的 PyLearn2)貢獻了自己的一份力量。比起 Lasagne,Blocks 靈活一點,代價是入門台階較高,想要高效的使用它有不小的難度。除此之外,Blocks 對遞歸神經網路架構(recurrent neural network architectures)有很好的支持,所以如果你有興趣探索這種類型的模型,它值得一看。除了 TensorFlow,對於許多我們已經部署在 indico 產品中的 API,Blocks 是其首選庫。
優點:
仍舊非常靈活
比 Theano 更高級的抽象
易於測試
缺點:
較高的學習難度
更小的社區
TensorFlow
描述:用於數值計算的使用數據流圖的開源軟體庫
概述:TensorFlow 是較低級別的符號庫(比如 Theano)和較高級別的網路規范庫(比如 Blocks 和 Lasagne)的混合。即使它是 Python 深度學習庫集合的最新成員,在 Google Brain 團隊支持下,它可能已經是最大的活躍社區了。它支持在多 GPUs 上運行深度學習模型,為高效的數據流水線提供使用程序,並具有用於模型的檢查,可視化和序列化的內置模塊。最近,TensorFlow 團隊決定支持 Keras(我們列表中下一個深度學習庫)。雖然 TensorFlow 有著自己的缺點,但是社區似乎同意這一決定,社區的龐大規模和項目背後巨大的動力意味著學習 TensorFlow 是一次安全的賭注。因此,TensorFlow 是我們今天在 indico 選擇的深度學習庫。
優點:
由軟體巨頭 Google 支持
非常大的社區
低級和高級介面網路訓練
比基於 Theano 配置更快的模型編譯
完全地多 GPU 支持
缺點:
雖然 Tensorflow 正在追趕,但是最初在許多基準上比基於 Theano 的慢。
RNN 支持仍不如 Theano
Keras
描述:Python 的深度學習庫。支持 Convnets、遞歸神經網路等。在 Theano 或者 TensorFlow 上運行。
概述:Keras 也許是水平最高,對用戶最友好的庫了。由 Francis Chollet(Google Brain 團隊中的另一個成員)編寫和維護。它允許用戶選擇其所構建的模型是在 Theano 上或是在 TensorFlow 上的符號圖上執行。Keras 的用戶界面受啟發於 Torch,所以如果你以前有過使用 Lua 語言的機器學習經驗,Keras 絕對值得一看。由於部分非常優秀的文檔和其相對易用性,Keras 的社區非常大並且非常活躍。最近,TensorFlow 團隊宣布計劃與 Keras 一起支持內置,所以很快 Keras 將是 TensorFlow 項目的一個分組。
優點:
可供選擇的 Theano 或者 TensorFlow 後端
直觀、高級別的埠
更易學習
缺點:
不太靈活,比其他選擇更規范
MXNet
描述:MXNet 是一個旨在提高效率和靈活性的深度學習框架。
概述:MXNet 是亞馬遜(Amazon)選擇的深度學習庫,並且也許是最優秀的庫。它擁有類似於 Theano 和 TensorFlow 的數據流圖,為多 GPU 配置提供了良好的配置,有著類似於 Lasagne 和 Blocks 更高級別的模型構建塊,並且可以在你可以想像的任何硬體上運行(包括手機)。對 Python 的支持只是其冰山一角—MXNet 同樣提供了對 R、Julia、C++、Scala、Matlab,和 Javascript 的介面。如果你正在尋找最佳的性能,選擇 MXNet 吧,但是你必須願意處理與之相對的一些 MXNet 的怪癖。
優點:
速度的標桿
非常靈活
缺點:
最小的社區
比 Theano 更困難的學習難度
PyTorch
描述:Python 中的張量(Tensors)和動態神經網路,有著強大的 GPU 加速。
概述:剛剛放出一段時間,PyTorch 就已經是我們 Python 深度學習框架列表中的一個新的成員了。它是從 Lua 的 Torch 庫到 Python 的鬆散埠,由於它由 Facebook 的 人工智慧研究團隊(Artificial Intelligence Research team (FAIR))支持且因為它用於處理動態計算圖(Theano,TensorFlow 或者其他衍生品沒有的特性,編譯者註:現在 TensorFlow 好像支持動態計算圖),它變得非常的有名。PyTorch 在 Python 深度學習生態系統將扮演怎樣的角色還不得而知,但所有的跡象都表明,PyTorch 是我們列表中其他框架的一個非常棒的選擇。
優點:
來自 Facebook 組織的支持
完全地對動態圖的支持
高級和低級 API 的混合
缺點:
比其他選擇,PyTorch 還不太成熟

Ⅵ Pytorch運算速度很慢怎麼辦

一般遇到這種情況,都是由於你的電腦配置太差導致的,可以用上北鯤雲超算來解決配置的問題,這樣能夠提供你Pytorch運算更多計算能力的拓展。

Ⅶ Pytorch-交叉熵

一條信息的信息量大小和它的不確定性有很大的關系 。一句話如果需要很多外部信息才能確定,我們就稱這句話的信息量比較大。比如你聽到「雲南西雙版納下雪了」,那你需要去看天氣預報、問當地人等等查證(因為雲南西雙版納從沒下過雪)。相反,如果和你說「人一天要吃三頓飯」,那這條信息的信息量就很小,因為這條信息的確定性很高。

那我們就能將事件 的信息量定義如下(其中 表示事件 發生的概率):

信息量是對於單個事件來說的 ,但是實際情況一件事有很多種發生的可能,比如擲骰子有可能出現6種情況,明天的天氣可能晴、多雲或者下雨等等。 熵是表示隨機變數不確定的度量,是對所有可能發生的事件產生的信息量的期望 。公式如下:

的曲線如下:

結合熵的公式(2)以及 曲線,當這些所有可能發生事件的概率比較小(接近0)或者比較大(接近1)時,熵的值會比較小;如果事件發生的概率既遠離0也遠離1時,熵的值就會比較大。

例如,如下三組事件比較:
1)事件概率均等,[0.2500, 0.2500, 0.2500, 0.2500],熵為2;
2)事件概率比較靠近0或者1,[0.1, 0.1, 0.1, 0.7],熵為1.3568;
3)事件概率極其靠近0或者1,[0.001, 0.001, 0.001, 0.999],熵為0.0313.

熵的一種比較特殊的情況就是擲硬幣 ,只有正、反兩種情況,該種情況(二項分布或者0-1分布)熵的計算可以簡化如下:

其中, 表示正面概率。

相對熵又稱KL散度,用於衡量對於同一個隨機變數 的兩個分布 和 之間的差異 。在機器學習中, 常用於描述樣本的真實分布 ,例如[1,0,0,0]表示樣本屬於第一類,而 則常常用於表示預測的分布 ,例如[0.7,0.1,0.1,0.1]。顯然使用q(x)來描述樣本不如 准確, 需要不斷地學習來擬合準確的分布 。

KL散度的公式如下:

KL散度的值越小表示兩個分布越接近。

我們將KL散度的公式進行變形,得到:

前半部分就是 的熵,後半部分就是我們的交叉熵:

機器學習中,我們常常使用KL散度來評估predict和label之間的差別,但是由於KL散度的前半部分是一個常量,所以我們常常將後半部分的交叉熵作為損失函數,其實二者是一樣的。

交叉熵代價函數(Cross-entropy cost function)是用來衡量人工神經網路(ANN)的預測值與實際值的一種方式。與二次代價函數相比,它能更有效地促進ANN的訓練。在介紹交叉熵代價函數之前,本文先簡要介紹二次代價函數,以及其存在的不足。

ANN的設計目的之一是為了使機器可以像人一樣學習知識。人在學習分析新事物時,當發現自己犯的錯誤越大時,改正的力度就越大。比如投籃:當運動員發現自己的投籃方向離正確方向越遠,那麼他調整的投籃角度就應該越大,籃球就更容易投進籃筐。同理, 我們希望:ANN在訓練時,如果預測值與實際值的誤差越大,那麼在反向傳播訓練的過程中,各種參數調整的幅度就要更大,從而使訓練更快收斂。 然而,如果使用二次代價函數訓練ANN,看到的實際效果是,如果誤差越大,參數調整的幅度可能更小,訓練更緩慢。

以一個神經元的二類分類訓練為例,進行兩次實驗(ANN常用的激活函數為sigmoid函數,該實驗也採用該函數):輸入一個相同的樣本數據x=1.0(該樣本對應的實際分類y=0);兩次實驗各自隨機初始化參數,從而在各自的第一次前向傳播後得到不同的輸出值,形成不同的代價(誤差):

在實驗1中,隨機初始化參數,使得第一次輸出值為0.82(該樣本對應的實際值為0);經過300次迭代訓練後,輸出值由0.82降到0.09,逼近實際值。而在實驗2中,第一次輸出值為0.98,同樣經過300迭代訓練,輸出值只降到了0.20。

從兩次實驗的代價曲線中可以看出: 實驗1的代價隨著訓練次數增加而快速降低,但實驗2的代價在一開始下降得非常緩慢;直觀上看,初始的誤差越大,收斂得越緩慢。

其實,誤差大導致訓練緩慢的原因在於使用了二次代價函數。二次代價函數的公式如下:

其中, 表示代價, 表示樣本, 表示實際值, 表示輸出值, 表示樣本的總數。為簡單起見,同樣一個樣本為例進行說明,此時二次代價函數為:

目前訓練ANN最有效的演算法是反向傳播演算法 。簡而言之,訓練ANN就是通過反向傳播代價,以減少代價為導向,調整參數。參數主要有:神經元之間的連接權重 ,以及每個神經元本身的偏置 。調參的方式是採用梯度下降演算法(Gradient descent),沿著梯度方向調整參數大小。 和 的梯度推導如下:

其中, 表示神經元的輸入, 表示激活函數。從以上公式可以看出, 和 的梯度跟激活函數的梯度成正比,激活函數的梯度越大, 和 的大小調整得越快,訓練收斂得就越快。而神經網路常用的激活函數為sigmoid函數,該函數的曲線如下所示:

如圖所示, 實驗2的初始輸出值(0.98)對應的梯度明顯小於實驗1的輸出值(0.82),因此實驗2的參數梯度下降得比實驗1慢。這就是初始的代價(誤差)越大,導致訓練越慢的原因。 與我們的期望不符,即:不能像人一樣,錯誤越大,改正的幅度越大,從而學習得越快。

可能有人會說,那就選擇一個梯度不變化或變化不明顯的激活函數不就解決問題了嗎?那樣雖然簡單粗暴地解決了這個問題,但可能會引起其他更多更麻煩的問題。而且,類似sigmoid這樣的函數(比如tanh函數)有很多優點,非常適合用來做激活函數,具體請自行google之。

換個思路,我們不換激活函數,而是換掉二次代價函數,改用交叉熵代價函數:

其中, 表示樣本, 表示樣本的總數。那麼,重新計算參數 的梯度:

因此, 的梯度公式中原來的 被消掉了;另外,該梯度公式中的 表示輸出值與實際值之間的誤差。所以,當誤差越大,梯度就越大,參數 調整得越快,訓練速度也就越快。 實際情況證明,交叉熵代價函數帶來的訓練效果往往比二次代價函數要好。

在實際分類任務中,要先將輸出層的輸出值經過Softmax函數,再經過log函數,最後才用交叉熵損失函數計算損失。

pytorch中有計算交叉熵損失的介面,即 F.cross_entropy() ,不過該介麵包含了Softmax函數、log函數、交叉熵損失函數。也就是說 F.cross_entropy() = F.softmax() + torch.log() + F.nnl_loss() 。即使如此,也要使用 F.cross_entropy() ,不僅是因為它簡單,更因為它能保證數值穩定。

機器學習的過程就是希望在訓練數據熵 模型學到的分布 真實的分布 越近越好,我們知道KL散度可以表示兩個分布之間的不同。

但我們沒有真實數據的分布,那麼只能退而求其次,希望模型學到的分布和訓練數據的分布 ,也就是把訓練數據當做模型和真實數據之間的代理人 。假設訓練數據是從總體中獨立同步分布采樣(Independent and identically distributed sampled)而來,那麼我們可以利用最小化訓練數據的經驗誤差來降低模型的泛化誤差。簡單說:

由此非常理想化的看法是如果 模型(左) 能夠學到 訓練數據(中) 的分布,那麼應該近似的學到了 真實數據(右) 的分布: 近似於 近似於

簡單的交叉熵,你真的懂了嗎?
交叉熵損失函數

Ⅷ pytorch0.4發行時間

pytorch0.4是在2018年4月25日發布的。PyTorch的GitHub主頁宣布PyTorch0.4.0發布。此次新版,除了平衡計算內存、支持更多概率分布、優化性能和修復Bug外,PyTorch還正式官方支持Windows系統,不再需要藉助其它開發者發布的第三方conda包。為Python3.5和3.6提供預編譯的Conda二進制文件和pipwheels。另外,Windows上的PyTorch不支持分布式訓練,可能比Linux/OSX慢一點,因為Visual、Studio支持較早版本的OpenMP。

Ⅸ 如何有效地閱讀PyTorch的源代碼

最近剛開始使用theano, 經驗不多,連個基本的模型都跑不通,於是去看了下Keras,源碼比較簡潔,可以當作theano的示例教程來看,感受如下:
文檔看似很全,每個layer是幹啥的,每個參數是啥都寫了,但是不去讀代碼,實際很多人是無法從文檔理解其具體用法的。這點看issue里的討論里可以看出。同樣,example似乎很多,而且都能直接run,還都是real world的數據集,看似很好,但是實際上,對於新手,如果需要的模型跟example里的不完全一樣,不容易搞懂到底需要把輸入輸出的數據搞成啥格式。舉個例子,example都是做的classification的,沒有做sequence labeling的例子,如果想拿來做個pos tagging,不知道數據如何組織。當然,這些其實花一天讀下代碼或者好好翻翻issue討論就可以解決了,但我相信不少人不會去認真讀代碼或者看討論,而是直接換個工具。我感覺目前的doc只有懂了代碼的人才能看懂,不懂得看文檔還是沒啥用。
2.項目很簡單所以開發者不多,但是很活躍,每天都有新東西加進去。今天增加了一個新的分支後端可以用theano或者tensorflow了,不過貌似由於不支持scan,backend用tensorflow的沒實現recurrent layer。他們也意識到文檔的問題,覺得需要為小白用戶多加點tutorial而不是光給develop看。
我沒用過其他的framework,僅說keras拿來學習theano基本用法,很不錯
庫本身的代碼,比較簡單易讀,我作為python菜鳥,也能看懂。目前model有sequential和grapgh兩種,前者並不是指recurrent而是說網路是一層層堆的(也包括recurrent).其他的主要概念包括layer,regularizer, optimizer,objective都分離開。layer用於build每層的輸出函數,model會用最後一層的輸出,根據objective和每個layer的regularizer來確定最終的cost,然後在update時用optimizer來更新參數。把這四個看下加上model里的fit函數,就會用theano啦。很多模型都能cover,seq2seq這種也有現成的可用。建議不要光看example,多看看github上的 issues討論,實在找不到,直接提問。效率方面,我不懂theano怎麼優化,感覺keras的這種封裝,沒什麼成本,跟自己用原生theano是一樣的。當然,theano本身就好慢啊。。估計是我不懂用吧。。
用於測試函數式返回的數值是否有錯。如果有錯,該函數返回

閱讀全文

與pytorch編譯慢相關的資料

熱點內容
成都市區建成面積演算法 瀏覽:656
智能家居單片機 瀏覽:93
買男裝用什麼app好 瀏覽:851
文件夾合並了怎麼拆開 瀏覽:256
波段副圖源碼無未來函數 瀏覽:84
livecn伺服器地址 瀏覽:257
程序員這個工作真的很吃香嗎 瀏覽:844
程序員和數學分析師待遇 瀏覽:678
壓縮氣彈簧怎麼拆 瀏覽:321
華為公有雲伺服器添加虛擬ip 瀏覽:209
程序員和運營哪個累 瀏覽:24
抖音安卓信息提示音怎麼設置 瀏覽:454
光速虛擬機的共享文件夾 瀏覽:248
程序員培訓機構發的朋友圈真實性 瀏覽:742
天乾地支簡單演算法 瀏覽:299
下載個壓縮文件 瀏覽:300
普通人電腦關機vs程序員關機 瀏覽:628
米酷建站源碼 瀏覽:115
氫氣app怎麼搜搭配 瀏覽:619
pdf綠盟 瀏覽:505