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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 人工智能 > pytorch >内容正文

pytorch

numpy pytorch 接口对应_拆书分享篇深度学习框架PyTorch入门与实践

發(fā)布時間:2024/1/23 pytorch 54 豆豆
生活随笔 收集整理的這篇文章主要介紹了 numpy pytorch 接口对应_拆书分享篇深度学习框架PyTorch入门与实践 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

<<深度學(xué)習(xí)框架PyTorch入門與實踐>>讀書筆記

《深度學(xué)習(xí)框架PyTorch入門與實踐》讀后感

小作者:馬苗苗

?讀完<<深度學(xué)習(xí)框架PyTorch入門與實踐>>,我對PyTorch有了更多更全面的了解,首先介紹下常見的深度學(xué)習(xí)框架。

?常見的深度學(xué)習(xí)框架有TensorFlow、Caffe、Theano、Keras、MXNet、PyTorch等。這些深度學(xué)習(xí)框架被應(yīng)用于計算機視覺、語音識別、自然語言處理與生物信息學(xué)等領(lǐng)域,并獲取了極好的效果。

?通過對本書的閱讀結(jié)合我的使用經(jīng)驗簡單介紹下各個框架的優(yōu)缺點。Theano調(diào)試難、構(gòu)建圖慢,目前已停止開發(fā),不建議作為研究工具繼續(xù)學(xué)習(xí);TensorFlow社區(qū)強大,適合生產(chǎn)環(huán)境,但上手困難、不易學(xué)習(xí),且頻繁變動的接口導(dǎo)致新舊版本代碼調(diào)試總是會出bug;Keras入門最簡單,但其過度封裝導(dǎo)致不夠靈活,使用受限;Caffe/Caffe2缺少靈活性,文檔不夠完善,安裝麻煩,但簡潔快速,適合生產(chǎn)環(huán)境;MXNet文檔略混亂,但分布式性能強大,語言支持最多,適合AWS云平臺使用;CNTK社區(qū)不夠活躍,但是性能突出,擅長語音方面的相關(guān)研究。PyTorch高效快速、靈活易學(xué)習(xí)、調(diào)試方便、很適合研究使用,但其分布式并行支持有限,且難以部署到生產(chǎn)環(huán)境。

?下來介紹下PyTorch中重要的數(shù)據(jù)結(jié)構(gòu)以及構(gòu)建神經(jīng)網(wǎng)絡(luò)訓(xùn)練常用的操作。

?Tensor是PyTorch中重要的數(shù)據(jù)結(jié)構(gòu),只要使用PyTorch,就會用到Tensor,可認(rèn)為是高維數(shù)組,與numpy的ndarrays類似,支持很多操作,包括數(shù)學(xué)運算、線性代數(shù)、選擇、切片等,與numpy對象共享內(nèi)存,它們之間的轉(zhuǎn)換很快,幾乎不會消耗資源,且可通過.cuda()方法很方便地轉(zhuǎn)為GPU的Tensor,從而使用GPU加速。

?神經(jīng)網(wǎng)絡(luò)訓(xùn)練主要分為定義網(wǎng)絡(luò)、計算輸出、計算損失、反向傳播求梯度、優(yōu)化器優(yōu)化、模型保存這幾個步驟。接下來分別針對這幾個模塊介紹PyTorch中相應(yīng)的用法。

?Torch.nn是PyTorch專門為神經(jīng)網(wǎng)絡(luò)設(shè)計的模塊化接口。nn構(gòu)建于Autograd之上,可用來定義和運行神經(jīng)網(wǎng)絡(luò)。nn.Module是nn中最重要的類,包含網(wǎng)絡(luò)各層定義及forward方法,調(diào)用forward(input)方法,可返回前向傳播的結(jié)果。需要注意的是,定義網(wǎng)絡(luò)時,需要繼承nn.Module,并實現(xiàn)它的forward方法,把網(wǎng)絡(luò)中具有可學(xué)習(xí)的參數(shù)的層數(shù)放在構(gòu)造函數(shù)__init__中。若某一層(如ReLU)不具有可學(xué)習(xí)的參數(shù),則既可以放在構(gòu)造函數(shù)中,也可以不放。nn.functional也是nn中很常用的模塊,其與nn.Module主要區(qū)別在于,nn.Module實現(xiàn)的layers是一個特殊的類,都是由class Layer(nn.Module)定義,會自動提取可學(xué)習(xí)的參數(shù);而nn.functional中的函數(shù)更像是純函數(shù),由def function(input)定義。如果模型有可學(xué)習(xí)的參數(shù),最好用nn.Module,否則既可以使用nn.functional,也可以使用nn.Module。但建議dropout操作還使用nn.Dropout而不是nn.functional.dropout,因為dropout在訓(xùn)練和測試兩個階段的行為有所差別,使用nn.Module對象能夠通過model.eval操作加以區(qū)分。

?nn實現(xiàn)了神經(jīng)網(wǎng)絡(luò)中大多數(shù)的損失函數(shù),如nn.MSELoss用來計算均方誤差,nn.CrossEntropyLoss用來計算交叉熵?fù)p失等,也可以很方便靈活的自定義損失函數(shù)。調(diào)用.backward()時,PyTorch計算圖會動態(tài)生成并自動微分,也會自動計算圖中參數(shù)的導(dǎo)數(shù)。再調(diào)用.backward()前,要調(diào)用.zero_grad()對網(wǎng)絡(luò)中所有可學(xué)習(xí)參數(shù)的梯度清零。

?torch.optim中實現(xiàn)了深度學(xué)習(xí)中絕大多數(shù)的優(yōu)化方法,例如RMSProp、Adam、SGD等,其設(shè)計靈活,能夠很方便地擴展成自定義的優(yōu)化方法。參數(shù)優(yōu)化中可對不同子網(wǎng)絡(luò)設(shè)置不同的學(xué)習(xí)率,在finetune中經(jīng)常用到。調(diào)整學(xué)習(xí)率主要有兩種做法。一種是修改optimizer.param_groups中對應(yīng)的學(xué)習(xí)率,另一種是新建優(yōu)化器。但新建優(yōu)化器會重新初始化動量等初始狀態(tài)信息,對使用動量的優(yōu)化器來說,可能會造成損失函數(shù)在收斂過程中出現(xiàn)震蕩。

?通過torch.save(obj, file_name)等方法保存任意可序列化的對象,然后通過torch.load(file_name)方法加載保存的數(shù)據(jù)。對Module和Optimizer對象,建議保存對應(yīng)的state_dict。

總結(jié)

以上是生活随笔為你收集整理的numpy pytorch 接口对应_拆书分享篇深度学习框架PyTorch入门与实践的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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