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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人工智能 > pytorch >内容正文

pytorch

斯坦福CS231n 2017最新课程:李飞飞详解深度学习的框架实现与对比

發布時間:2025/3/21 pytorch 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 斯坦福CS231n 2017最新课程:李飞飞详解深度学习的框架实现与对比 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.


斯坦福CS231n 2017最新課程:李飛飛詳解深度學習的框架實現與對比

By?ZhuZhiboSmith2017年6月19日 13:37

斯坦福大學的課程 CS231n (Convolutional Neural Networks for Visual Recognition) 作為深度學習和計算機視覺方面的重要基礎課程,在學界廣受推崇。今年 4 月,CS231n 再度開課,全新的 CS231n Spring 2017 仍舊由李飛飛帶頭,帶來了很多新鮮的內容。今天機器之心給大家分享的是其中的第八講——深度學習軟件(Deep Learning Software)。主要內容有:CPU 和 GPU 的對比;深度學習框架簡介;TensorFlow 和 PyTorch 的實例;以及各種深度學習框架的比較。

一、 CPU 和 GPU

?CPU:核芯的數量更少;

? ? 但是每一個核芯的速度更快,性能更強;

? ? 更適用于處理連續性(sequential)任務。

?

?GPU:核芯的數量更多;

? ? ?但是每一個核芯的處理速度較慢;

? ? ?更適用于并行(parallel)任務。


二、深度學習框架簡介

去年我們還僅有 Caffe、Torch、Theano 和 TensorFlow 這些深度學習框架可供使用;但是到了今年,在此基礎上我們又新增加了 Caffe2、Pytorch、TensorFlow、PaddlePaddle、 CNDK、MXNet 等等一系列新的框架,可謂「百花齊放」。如今最常用的框架當數 Pytorch 和 TensorFlow 了, 而 Caffe 和 Caffe2 次之。


深度學習框架的關鍵點在于:

(1)易于建造大型的計算機圖形;

(2)易于在計算機圖形中進行梯度計算;

(3)能在 GPU 上高效運行(cuDNN, cuBLA 等)

三、TensorFlow 簡單實例

下面我們將詳細說明一個在 TensorFlow 下訓練神經網絡的簡單實例:即用隨機數據訓練一個兩層的網絡,激活函數為 ReLU。

?

a. 定義計算機圖形


1. 為輸入 x,權重系數 w1、w2, 和目標函數 y 創建 placeholder:


2. 定義前向傳輸:這是為了計算 y 的預測值和誤差損失(loss);實際上這里是沒有計算過程的——僅僅是為了創建圖形!


3. 告訴 Tensorflow 去計算關于 w1 和 w2 的梯度損失;這里仍然不產生計算過程——僅僅是為了創建圖形。


b. 運行

現在已經完成了創建圖形的步驟,所以我們進入對圖形進行運算的部分。


創建 Numpy 數組,這個數組將會被填進上方的 placeholder 中。


對圖形進行運算:將 x、y、w1、w2 輸入到 numpy 數組中;得到關于損失(loss),w1 梯度和 w2 梯度的 numpy 數組。


訓練網絡:反復對圖形進行運算,用梯度(gradient)來更新權重(weights)。


把 w1 和 w2 的相應函數從 placeholder() 改為 Variable()。


添加 assign 操作來更新 w1 和 w2(圖形的一部分)。


對圖形進行一次運算來初始化 w1 和 w2,然后進行多次迭代訓練。


完整代碼如下:


但是產生一個問題:誤差損失(loss)并沒有下降!這是因為 Assign 指令實際上并沒有被執行。


這時我們就需要添加虛擬圖形節點,并且告訴圖形去計算虛擬節點。


可以使用 optimizer 來計算梯度和更新權重系數;記得要執行 optimizer 的輸出!


使用預先定義的常用損失函數:


使用 Xavier 進行初始化;tf.layer 會自動設置權重系數(weight)和偏置項(bias)!


c. 高級 Wrapper——Keras

Keras 可以理解為是一個在 TensorFlow 頂部的 layer,它可以讓一些工作變得更加簡單(也支持 Theano 后端)。


把模型目標定義成一系列的 layer :


定義優化器目標(optimizer object):


創建模型,明確規定損失函數(loss function):


僅用一行代碼就能訓練模型!


除了 Keras, 還有一些其他類型的高級容器(Wrapper)可供使用:


四、PyTorch 實例

PyTorch 是 Facebook 推出的深度學習框架,不論是在工業界還是學術界,它都得到了廣泛的應用。它包括三個等級的抽象概念:

  • 張量(Tensor):命令式的多維數組對象(ndarray),在 GPU 上運行;
  • 變量(Varaible):計算型圖形(computational graph)的節點;用于存儲數據和梯度(gradient)
  • 模塊(Module):代表一個神經網絡層;可以存儲狀態(state), 也可以存儲可學習的權重系數(learnable weights)

PyTorch 和 TensorFlow 中抽象概念的等價對應關系:

?

a. Pytorch 中的張量(Tensor)設置

PyTorch 中的張量就像 numpy 中的數組,但是這些張量可以在 GPU 上運行;

這里我們用 PyTorch 的張量設置了一個兩層網絡:


下面我們來分步解讀:

1. 為數據和權重(weights)創建隨機張量:


2. 設置前向傳播:計算預測值(prediction)和損失(loss):


3. 設置反向傳播:計算梯度(gradients):


4. 梯度下降(Gradient descent)和權重(weights)相對應:


5. 為了在 GPU 上運行,將張量(tensors)設置為 cuda 數據類型:


b. PyTorch 中的 Autogradient 設置

PyTorch 的張量(Tensors)和變量(Variables)擁有相同的應用編程接口 API。變量(Variables)可以記憶它們是怎么產生的(因為反向傳播的緣故)。


下面仍進行分步解讀:

?

1. 我們不希望(損失 loss 的)梯度和數據(data)有相關性,但我們希望梯度和權重(weights)是相關的。相關設置如圖:?


2. 這里的前向傳播看上去和上述張量(Tensor)的對應版本很相似,但是需要注意的是現在這里全部都是變量(variable)。


3. 計算損失函數對 w1 和 w2 的梯度(開始的時候梯度置零):


4. 讓梯度和權重(weights)相對應:


C. 定義新型 Autograd 函數

通過張量的前向和反向傳播來定義你自己的 autograd 函數:


可以在前向傳播中使用新的 autograd 函數:


d. PyTorch 中的神經網絡(nn)設置

用更高級的「容器」(wrapper)來處理神經網絡(neural nets), 和 Keras 相似。完整代碼如下:


下面進行分步解讀:

把我們的模型定義成一系列的 layers:


也要定義常用損失函數:


前向傳播:給模型輸入數據;給損失函數(loss function)輸入預測信息(prediction):


反向傳播:計算所有的梯度(gradients):


讓梯度和每一個模型參數對應:


下面我們添加一個優化器(optimizer):


在計算完梯度以后對所有的參數(parameters)進行更新:


E. PyTorch 中的神經網絡——定義新的模型

Pytorch 中的模塊(Module)其實是一個神經網絡層(neural net layer),需要注意它的輸入和輸出都是變量;模塊(Module)中包含著權重 (當作變量處理) 或者其他模塊;你可以使用 autograd 來定義你自己的模塊。詳細代碼如下:


下面進行分步解讀:

1. 把我們的整體模型定義成一個單一的模塊:


2. 用初始化程序來設置兩個子模塊(一個父模塊可以包含子模塊)


3. 用子模塊和變量上的 autograd ops 定義前向傳播;不需要定義反向傳播——因為 autograd 會作相應處理:


4. 創建并訓練一個模型實例:


E. PyTorch 中的資料存儲器(Dataloaders)

資料存儲器(DataLoader)包括一個數據集 (Dataset),而且給你提供了小批量處理(minibatching),「洗牌」處理(shuffling)和多線程處理(multithreading);當你需要載入自定義數據(custom data)時,寫下你自己的數據集類型(dataset class)就可以了。


通過遍歷存儲器(loader)來形成小批量(minibatch);存儲器會給你提供張量(Tensors), 所以你需要將其「打包」(wrap)進變量中:


注意:使用帶有 torchvision 的預先訓練好的模型(pretrained model)將會更加簡單易行。

F. Torch 和 pytorch 的簡單對比


結論:盡量使用 PyTorch 來做你的新項目。

五、Caffe2 簡介


六、深度學習框架之爭,究竟誰更勝一籌?





其實具體選擇何種框架來進行深度學習取決于我們要做什么。在參閱相關文獻之后,我們大致可以得出以下結論(僅供參考):

  • PyTorch 和 Torch 更適用于學術研究(research);TensorFlow,Caffe,Caffe2 則更適用于工業界的生產環境部署(industrial production)。
  • Caffe 適用于處理靜態圖像(static graph);Torch 和 PyTorch 更適用于動態圖像(dynamic graph);而 TensorFlow 在兩種情況下都很實用。
  • Tensorflow 和 Caffe2 可在移動端使用。 ?

附主要參考文獻CS231n_2017_Lecture8,鏈接可直接下載PPT:

  • http://cs231n.stanford.edu/slides/2017/cs231n_2017_lecture8.pdf

其他參考資料:

  • http://203.187.160.132:9011/dl.ee.cuhk.edu.hk/c3pr90ntc0td/slides/tutorial-caffe.pdf
  • http://203.187.160.132:9011/dl.ee.cuhk.edu.hk/c3pr90ntc0td/slides/DL_in_Action.pdf

總結

以上是生活随笔為你收集整理的斯坦福CS231n 2017最新课程:李飞飞详解深度学习的框架实现与对比的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 精品麻豆av | 国产自产一区二区 | 91欧美大片 | 国产噜噜噜噜噜久久久久久久久 | 老司机av福利 | 在线观看成人免费视频 | 日韩在线视频中文字幕 | 亚洲国产精品系列 | 久久精品色 | www.人人草| 午夜精品久久久内射近拍高清 | 欧美人体视频一区二区三区 | 成人日韩av| 色爱色| 婷婷四房综合激情五月 | 午夜国产在线观看 | 国产欧美日 | 在线视频免费观看 | 午夜久久久久久久久久 | 亚洲中文字幕97久久精品少妇 | 亚洲精品一区三区三区在线观看 | 久章草影院 | 91九色高潮| 欧美性生活一区二区 | wwwxx欧美| 欧美一级色 | 欧美人体做爰大胆视频 | 国产精品一级片在线观看 | 182午夜视频 | 日本熟伦人妇xxxx | 婷婷五月综合缴情在线视频 | 天堂网www. | 亚洲 欧美 国产 另类 | 97精品一区二区三区 | av永久 | 麻豆 国产 | 成人黄色网页 | 免费中文av| 91视频进入 | 91天堂在线观看 | 69国产在线 | 综合激情亚洲 | 午夜黄色 | 午夜噜噜| 蜜桃精品视频在线观看 | 性欧美在线 | xxxx国产片| 91九色在线 | 日本三级视频在线播放 | 被两个男人吃奶三p爽文 | 操屁股视频 | 99视频99 | 清冷男神被c的合不拢腿男男 | 爽妇网国产精品 | 四虎一级片 | 亚洲美女操 | av噜噜在线观看 | 高清中文字幕mv的电影 | 国产精品福利小视频 | 老子影院午夜精品无码 | 精品国产免费看 | 亚州春色 | 日韩欧美国产成人精品免费 | av观看一区 | 97青青草| 狠狠精品干练久久久无码中文字幕 | 天天爱天天色 | 日韩精品麻豆 | 黑人玩弄人妻一区二区绿帽子 | 久久久久久亚洲中文字幕无码 | 这里只有精品9 | 伊人888| 久久精品成人一区二区三区蜜臀 | 亚洲综合色吧 | 日韩三级不卡 | 欧美久久精品一级黑人c片 1000部多毛熟女毛茸茸 | 免费草逼网站 | 一本综合久久 | 国产成人一区二区 | av无码精品一区二区三区 | 撸啊撸在线视频 | 亚洲一区影视 | 亚洲国产大片 | 石原莉奈在线播放 | 天堂…中文在线最新版在线 | 成人黄性视频 | 亲子乱子伦xxxx | youjizz欧美| 欧美r级在线| 精品1卡二卡三卡四卡老狼 日韩三级网 | 国产情趣视频 | 催眠调教艳妇成肉便小说 | 老汉av在线 | 人妻久久一区二区三区 | 国产美女91 | www,四虎 | 国产xxxxx在线观看 | 亚洲欧美日韩一区二区三区在线观看 | 亚洲影视在线 |