官术网_书友最值得收藏!

1.3 為什么用PyTorch

通過(guò)將模型應(yīng)用到例證,深度學(xué)習(xí)允許我們執(zhí)行很多復(fù)雜任務(wù),如機(jī)器翻譯、玩戰(zhàn)略游戲以及在雜亂無(wú)章的場(chǎng)景中識(shí)別物體等。為了在實(shí)踐中做到這一點(diǎn),我們需要靈活且高效的工具,以便能夠適用于這些復(fù)雜任務(wù),能夠在合理的時(shí)間內(nèi)對(duì)大量數(shù)據(jù)進(jìn)行訓(xùn)練。我們需要已被訓(xùn)練過(guò)的模型在輸入變量變化的情況下正確執(zhí)行。接下來(lái)看看我們決定使用PyTorch的一些原因。

PyTorch很容易被推廣,因?yàn)樗芎?jiǎn)單。許多研究人員和實(shí)踐者發(fā)現(xiàn)它易于學(xué)習(xí)、使用、擴(kuò)展和調(diào)試。它是Python化的,雖然和任何復(fù)雜領(lǐng)域一樣,它有注意事項(xiàng)和最佳實(shí)踐示例,但對(duì)于以前使用過(guò)Python的開(kāi)發(fā)人員來(lái)說(shuō),使用該庫(kù)和使用其他Python庫(kù)一樣。

更具體地說(shuō),在PyTorch中編寫(xiě)深度學(xué)習(xí)機(jī)是很自然的事情。PyTorch為我們提供了一種數(shù)據(jù)類(lèi)型,即張量,通常用來(lái)存儲(chǔ)數(shù)字、向量、矩陣和數(shù)組。此外,PyTorch還提供了操作它們的函數(shù),我們可以使用這些函數(shù)來(lái)增量編程。如果我們?cè)敢猓€可以進(jìn)行交互式編程,就像平常使用Python一樣。如果你知道NumPy,那么你對(duì)交互式編程應(yīng)是非常熟悉的。

PyTorch具備2個(gè)特性,使得它與深度學(xué)習(xí)關(guān)聯(lián)緊密。首先,它使用GPU加速計(jì)算,通常比在CPU上執(zhí)行相同的計(jì)算速度快50倍。其次,PyTorch提供了支持通用數(shù)學(xué)表達(dá)式數(shù)值優(yōu)化的工具,該工具用于訓(xùn)練深度學(xué)習(xí)模型。請(qǐng)注意,這2個(gè)特性適用于一般的科學(xué)計(jì)算,而不只適用于深度學(xué)習(xí)。事實(shí)上,我們完全可以將PyTorch描述為一個(gè)在Python中為科學(xué)計(jì)算提供優(yōu)化支持的高性能庫(kù)。

PyTorch設(shè)計(jì)的驅(qū)動(dòng)因素之一是表現(xiàn)力,它允許開(kāi)發(fā)人員實(shí)現(xiàn)復(fù)雜的模型,而不會(huì)被PyTorch庫(kù)強(qiáng)加過(guò)高的復(fù)雜性(PyTorch不是一個(gè)框架)。PyTorch可以說(shuō)是最無(wú)縫地將深度學(xué)習(xí)領(lǐng)域的思想轉(zhuǎn)化為Python代碼的軟件之一。因此,PyTorch在研究中得到廣泛的采用,國(guó)際會(huì)議上的高引用次數(shù)就證明了這一點(diǎn)[3]

PyTorch從研發(fā)到成為產(chǎn)品的過(guò)程是一件值得關(guān)注的事情。雖然PyTorch最初專(zhuān)注于研究工作流,但它已經(jīng)配備了高性能的C++運(yùn)行環(huán)境,用于部署模型進(jìn)行推理而不依賴Python,并且還可用于設(shè)計(jì)和訓(xùn)練C++模型。它還提供了與其他語(yǔ)言的綁定,以及用于部署到移動(dòng)設(shè)備的接口。這些特性允許我們利用PyTorch的靈活性,還允許我們的程序在難以獲得完整的Python運(yùn)行環(huán)境或可能需要極大的開(kāi)銷(xiāo)的情況下運(yùn)行。

當(dāng)然,易用性和高性能是很容易做到的,我們希望當(dāng)你深入閱讀本書(shū)的時(shí)候,會(huì)認(rèn)同這句話。

深度學(xué)習(xí)競(jìng)爭(zhēng)格局

雖然所有的類(lèi)比都有瑕疵,但2017年1月PyTorch 0.1的發(fā)布標(biāo)志著深度學(xué)習(xí)庫(kù)、包裝器和數(shù)據(jù)交換格式從“寒武紀(jì)”爆炸式增長(zhǎng)過(guò)渡到一個(gè)整合和統(tǒng)一的時(shí)代。

注意 

當(dāng)前深度學(xué)習(xí)發(fā)展迅速,以至于當(dāng)你讀到本書(shū)的印刷版時(shí),它可能已經(jīng)過(guò)時(shí)了。如果你不了解這里提到的一些庫(kù)也很正常。

PyTorch第1個(gè)測(cè)試版本發(fā)布時(shí)情況如下。

  • Theano和TensorFlow是最早的低級(jí)別庫(kù),它們使用一個(gè)模型,該模型讓用戶自定義一個(gè)計(jì)算圖,然后執(zhí)行它。
  • Lasagne和Keras是Theano的高級(jí)包裝器,同時(shí)Keras還對(duì)TensorFlow和CNTK進(jìn)行了包裝。
  • Caffe、Chainer、DyNet、Torch(以Lua為基礎(chǔ)的PyTorch前身)、MXNet、CNTK、DL4J等庫(kù)在深度學(xué)習(xí)生態(tài)系統(tǒng)中占據(jù)了不同的位置。

在接下來(lái)大約2年的時(shí)間里,情況發(fā)生了巨大的變化。除了一些特定領(lǐng)域的庫(kù),隨著其他深度學(xué)習(xí)庫(kù)使用量的減少,PyTorch和TensorFlow社區(qū)的地位得到了鞏固。變化情況可以總結(jié)為以下幾點(diǎn)。

  • Theano是最早的深度學(xué)習(xí)框架之一,目前它已經(jīng)停止開(kāi)發(fā)。
  • TensorFlow:
    • 完全對(duì)Keras進(jìn)行封裝,將其提升為一流的API;
    • 提供了一種立即執(zhí)行的“急切模式(eager mode)”,這種模式有點(diǎn)兒類(lèi)似于PyTorch處理計(jì)算的方式;
    • TensorFlow 2.0默認(rèn)采用急切模式。
  • JAX是谷歌的一個(gè)庫(kù),它是獨(dú)立于TensorFlow開(kāi)發(fā)的,作為一個(gè)與GPU、Autograd和JIT編譯器具有對(duì)等功能的NumPy庫(kù),它已經(jīng)開(kāi)始獲得關(guān)注。
  • PyTorch:
    • Caffe2完全并入PyTorch,作為其后端模塊;
    • 替換了從基于Lua的Torch項(xiàng)目重用的大多數(shù)低級(jí)別代碼;
    • 增加對(duì)開(kāi)放式神經(jīng)網(wǎng)絡(luò)交換(Open Neural Network Exchange,ONNX)的支持,這是一種與外部框架無(wú)關(guān)的模型描述和交換格式;
    • 增加一種稱(chēng)為“TorchScript”的延遲執(zhí)行的“圖模型”運(yùn)行環(huán)境;
    • 發(fā)布了1.0版本;
    • 取代CNTK和Chainer成為各自企業(yè)贊助商選擇的框架。

TensorFlow擁有強(qiáng)大的生產(chǎn)線、廣泛的行業(yè)社區(qū)以及巨大的市場(chǎng)份額。由于使用方便,PyTorch在研究和教學(xué)領(lǐng)域取得了巨大進(jìn)展,并且隨著研究人員和畢業(yè)的學(xué)生進(jìn)入該行業(yè),PyTorch的勢(shì)頭越來(lái)越好。它還在生產(chǎn)解決方案方面積累了經(jīng)驗(yàn)。有趣的是,隨著TorchScript和急切模式的出現(xiàn),PyTorch和TensorFlow的特征集開(kāi)始趨同,盡管在這些特征的呈現(xiàn)和整體體驗(yàn)上仍然存在很大的差異。

主站蜘蛛池模板: 台东市| 封开县| 左权县| 洛宁县| 腾冲县| 鄂尔多斯市| 米林县| 祁东县| 温宿县| 临汾市| 汕头市| 新巴尔虎左旗| 双柏县| 宁海县| 化州市| 新乡市| 赤壁市| 驻马店市| 延长县| 奉化市| 吴桥县| 开原市| 宜丰县| 大丰市| 安塞县| 富源县| 东光县| 满城县| 尼木县| 饶河县| 恭城| 循化| 西林县| 寿宁县| 云南省| 嘉义市| 成都市| 金平| 泰州市| 社旗县| 阿巴嘎旗|