日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > python >内容正文

python

pytorch和python有什么区别_PyTorch到底好用在哪里?

發(fā)布時(shí)間:2024/8/23 python 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 pytorch和python有什么区别_PyTorch到底好用在哪里? 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

先來回答一下你提的幾個(gè)問題:Pytorch連最基本的maximum, minimum, tile等等這些numpy和tensorflow中最簡(jiǎn)單的運(yùn)算都沒有,用view來reshape還會(huì)報(bào)錯(cuò)contiguous(雖然我知道怎么解決),官方手冊(cè)也查不到相應(yīng)說明,這個(gè)東西到底好用在哪里?

你說的那幾個(gè)函數(shù)pytorch中都有(或者可以實(shí)現(xiàn))maximum: torch.max() 同時(shí)包含了numpy.max 和numpy.maximum的功能

minimum:torch.min()

np.tile(arr,(100,100)) 等價(jià)于 tensor.repeat(100,100)

contiguous的問題我經(jīng)常聽別人提問,但我從未遇到過(我?guī)缀鯊奈凑{(diào)用過`tensor.contiguous()`),大多數(shù)人也很少會(huì)把tensor弄成不連續(xù)。之所以tensor會(huì)不連續(xù),是為了能夠共享內(nèi)存,更高效的內(nèi)存利用(其實(shí)只要PyTorch在設(shè)計(jì)的時(shí)候把所有的不連續(xù)操作都返回一個(gè)連續(xù)的tensor即可解決這個(gè)問題,但是不值得,大多數(shù)不連續(xù)的tensor都會(huì)進(jìn)行一個(gè)reduce操作,然后就變成了連續(xù)的了)。

numpy那么多函數(shù),PyTorch不可能都支持,即使不支持,也可以在numpy中實(shí)現(xiàn),然后轉(zhuǎn)成tensor,畢竟numpy和tensor之間的轉(zhuǎn)換極其高效快速(他們共享內(nèi)存).這個(gè)東西到底好用在哪里?

還是說就是定義網(wǎng)絡(luò)結(jié)構(gòu)簡(jiǎn)單?

PyTorch到底好在哪,其實(shí)我也只是有個(gè)朦朧的感覺,總覺的用的舒服自在,用其它框架的時(shí)候總是覺得這里或者那里別扭。第一次用PyTorch幾乎是無痛上手,而且隨著使用的增加,更是越來越喜歡:

PyTorch不僅僅是定義網(wǎng)絡(luò)結(jié)構(gòu)簡(jiǎn)單,而且還很直觀靈活。靜態(tài)圖的網(wǎng)絡(luò)定義都是聲明式的,而動(dòng)態(tài)圖可以隨意的調(diào)用函數(shù)(if,for,list什么的隨便用),兩者的差距不是一點(diǎn)點(diǎn)。網(wǎng)絡(luò)的定義在任何框架中都應(yīng)該是屬于最基礎(chǔ)最簡(jiǎn)單的一個(gè)內(nèi)容,即使是接口繁多的tensorflow,通過不斷的查文檔,新手也能把模型搭起來或者是看懂別人的模型。這個(gè)PyTorch也不例外,它的優(yōu)勢(shì)在于模型定義十分直觀易懂,很容易看懂看別人寫的代碼。可以看看pytorch/vision 里面的幾個(gè)經(jīng)典的網(wǎng)絡(luò)定義,我覺得很難找到比它更簡(jiǎn)潔易懂的模型定義了。

網(wǎng)絡(luò)模型定義只是很基礎(chǔ)的一部分,更重要的是模型的使用。比如在使用預(yù)訓(xùn)練模型finetue時(shí),我們需要修改預(yù)訓(xùn)練模型某些層,新增某些層,刪除某些層,新增的層希望給他較高的學(xué)習(xí)率,之前預(yù)訓(xùn)練的層希望學(xué)習(xí)率設(shè)為0。scene-baseline 是我前幾天為AI challenger 場(chǎng)景分類寫的baseline,可以參考一下,只用了幾行代碼就實(shí)現(xiàn)了預(yù)訓(xùn)練模型finetune(新增某些層,刪除某些層,修改某些層),以及為不同層設(shè)置不同學(xué)習(xí)率 scene-baseline-optimizer 。

再比如在盡可能不修改原來模型源代碼的情況下,獲取預(yù)訓(xùn)練好模型的某些層的輸出(Fast Neural Style需要用到),或者是使用多個(gè)預(yù)訓(xùn)練好的子模型,分別初始化一個(gè)復(fù)雜模型的某一部分,因?yàn)樽幽P偷慕Y(jié)構(gòu)都是相似的,所以可以讓這些子模型共享某些層的參數(shù)(知乎看山杯我就用了這個(gè)策略。表述的可能很復(fù)雜,其實(shí)在模型的構(gòu)建只用了幾行)

談太多框架的使用,可能比較枯燥,只有你自己用了才知道,PyTorch真的是越用越順手。

下面說幾點(diǎn)其它的看法,沒有什么條理,不論證舉例,只說想法,只是個(gè)人看法,不必太認(rèn)真:

1.PyTorch比TF更符合Unix/Python哲學(xué)

Unix哲學(xué):做一件事,并把它做好。(真的要在做實(shí)驗(yàn)的時(shí)候考慮如何把模型部署到手機(jī),利用TPU加速?)

Unix哲學(xué):KISS(keep it simple, stupid)。github上TF有接近100萬行代碼,PyTorch只有它的十分之一多一點(diǎn)。TensorFlow創(chuàng)造了 圖、會(huì)話、命名空間、PlaceHolder 等一大堆全新的概念,簡(jiǎn)直就是一門新的語言。TensorFlow是Make It Complicated ,TensorFlow+Keras是Make It Complicated And Hide It。而Keras的Hide it又違反了Python的哲學(xué)(扁平勝于嵌套 ),喪失了靈活性。而PyTorch就是tensor-autograd-nn 三級(jí)封裝~ 簡(jiǎn)潔易懂

Python之禪:盡量找一種,最好是唯一一種直觀易懂的實(shí)現(xiàn)方案(猜猜TF中RNN有多少種實(shí)現(xiàn),猜猜除了Keras、Sonnet、TFLearn、TensorLayer、Slim、PrettyLayer之外tensorflow還有多少個(gè)第三方API )。PyTorch的不同人寫的代碼都差不多,很容易看懂。The Zen of Python, by Tim Peters

優(yōu)美勝于丑陋

明了勝于晦澀

簡(jiǎn)潔勝于復(fù)雜 復(fù)雜勝于凌亂

扁平勝于嵌套

間隔勝于緊湊

可讀性很重要

即便假借特例的實(shí)用性之名,也不可違背這些規(guī)則

不要包容所有錯(cuò)誤,除非你確定需要這樣做

當(dāng)存在多種可能,不要嘗試去猜測(cè)

而是盡量找一種,最好是唯一一種直觀易懂的實(shí)現(xiàn)方案雖然這并不容易,因?yàn)槟悴皇?Python 之父

做也許好過不做,但不假思索就動(dòng)手還不如不做

如果你很難向人描述你的實(shí)現(xiàn),那肯定不是一個(gè)好實(shí)現(xiàn)命名空間是一種絕妙的理念,我們應(yīng)當(dāng)多加利用

如果你很難向人描述你的實(shí)現(xiàn),那肯定不是一個(gè)好實(shí)現(xiàn)

2.快速

在大多數(shù)人寫的代碼中PyTorch都比TensorFlow快,并不是說TensorFlow慢,只是你要用TensorFlow寫出同等速度的代碼會(huì)稍微困難一些(單單是數(shù)據(jù)加載這一塊就會(huì)難倒許多人)

3.強(qiáng)大的社區(qū)

facebook的FAIR強(qiáng)力支持,FAIR是全球TOP3的AI研究機(jī)構(gòu)。PyTorch論壇,文檔,tutorial,一應(yīng)俱全。FAIR的幾位工程師更是全職維護(hù)開發(fā),github上PyTorch每天都有許多pull request和討論。

你很難聽到有誰說TF好用,最多是諸如谷歌支持,社區(qū)強(qiáng)大,文檔完善,功能齊全等等。但是PyTorch你只要深度用過一段時(shí)間,就會(huì)喜歡上它的。很多人自來水安利PyTorch,當(dāng)然不是facebook給錢,或者是博得多少點(diǎn)擊量,真的是因?yàn)樗糜昧恕?/p>

其實(shí)關(guān)于TensorFlow還有一點(diǎn)讓我頗為不滿的是,現(xiàn)在媒體總是覺得谷歌的東西就是最好的,每回TensorFlow有什么更新,都要搞個(gè)大新聞。而且,谷歌喜歡把一個(gè)項(xiàng)目的目標(biāo)當(dāng)成這個(gè)項(xiàng)目的特點(diǎn)來宣傳,但是TensorFlow的實(shí)際表現(xiàn),配不上它的名氣。

4.簡(jiǎn)潔易懂的代碼

一個(gè)框架你不懂源碼,你就不能完全掌握它的運(yùn)行原理,像tensorflow的`sess.run`簡(jiǎn)直就是個(gè)黑箱。而PyTorch幾乎是我用過框架中源碼最易懂的,任何一個(gè)操作,不論多么高級(jí)復(fù)雜,都能輕松的找到它對(duì)應(yīng)tensor操作(Caffe/tinydnn也挺簡(jiǎn)潔的,但是我的C++比較渣)

nn.Module代碼是PyTorch中對(duì)所有模型對(duì)象的封裝,我覺得幾乎所有人都應(yīng)該看看,深度學(xué)習(xí)框架的設(shè)計(jì)可以很簡(jiǎn)單!現(xiàn)在Gluon,Sonnet,nnabla等框架也都開始模仿這個(gè)設(shè)計(jì)api~

5.快速實(shí)現(xiàn)

深度學(xué)習(xí)煉丹的過程中,我們肯定都有許多奇思妙想,但這些奇思妙想需要做實(shí)驗(yàn)來驗(yàn)證。如果實(shí)現(xiàn)比較困難費(fèi)時(shí),在不確定這個(gè)想法是否有效的情況下,我們很容易打退堂鼓。PyTorch可以解放你的想法,用tensor的思維思考代碼,一切操作皆tensor,一切tensor能做的,PyTorch都能做到,而且做的像操作tensor一樣。

用TensorFlow 我能找到很多別人的代碼

用PyTorch 我能輕松實(shí)現(xiàn)自己的想法

而且github上很多tensorflow的代碼也不能跑了不是嗎?畢竟TF常年一步一大更新,不怎么考慮向后兼容。隨著同學(xué)的更新TF,我眼睜睜看的我的TF代碼從運(yùn)行正常,到警告,到報(bào)錯(cuò)

PyTorch實(shí)現(xiàn)的項(xiàng)目在github上也有很多,不是嗎?基本上所有的研究方向都能找到質(zhì)量很高的PyTorch開源方案。

6.關(guān)于PyTorch的幾個(gè)誤解

PyTorch社區(qū)不強(qiáng)大 ?:看上文

PyTorch 文檔不齊全?:我覺得PyTorch的文檔幾乎是所有框架中最好的,這些文檔都是作者在設(shè)計(jì)的時(shí)候就寫好的,不是別人看著代碼,憑借著自己理解寫的。 而且PyTorch文檔中的給出了很多示例,在IPython下可以直接拷貝運(yùn)行,做實(shí)驗(yàn)測(cè)試。

PyTorch中沒有TensorBoard? lanpa/tensorboard-pytorch 不僅功能強(qiáng)大(支持Tensorboard幾乎所有的操作,連計(jì)算圖都支持,只是顯示效果不好),而且接口簡(jiǎn)單(比tf的tensorboard api易用)。而且除了Tensorboard還有Visdom可以用~

PyTorch動(dòng)態(tài)圖性能比較差?見上文,同等水平的人用PyTorch寫出來的代碼普遍要比TensorFlow快。當(dāng)然我認(rèn)為極限情況下TensorFlow會(huì)比PyTorch快,詳情可以看TensorFlow官方的benchmark,只是寫的代碼很復(fù)雜,普通用戶寫不出來。

總感覺表述有點(diǎn)匱乏,表達(dá)也不是很流暢,還有很多沒表達(dá)出來的。可以看看其他人是怎么說的:

PyTorch和TensorFlow到底哪個(gè)更好?看看一線開發(fā)者怎么說 (帖子是3月份初發(fā)的,這時(shí)候PyTorch才發(fā)布一個(gè)多月,但幾乎所有用過的人已經(jīng)都在夸贊)

總結(jié)

以上是生活随笔為你收集整理的pytorch和python有什么区别_PyTorch到底好用在哪里?的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。