tf_Ptorch.jpg

  最近學到新的機器學習與人工智慧的框架:PyTorch 。本文利用常見的的影像資料集 MNIST 對這兩種框架比對辨識的速率和精確度,最後提出學習心得。

 

1. 建構深度學習模型

  PyTorch 裡有 torch.nn 程式庫支援線性傳遞模型(Linear),也有 ReLU 支援啟動函式(activation function)。
01_PyTorch_LinearNetwork.png

  Tensorflow/keras 有 Sequential() 程式庫支援線性傳遞模型(Linear),利用 Dense() 設定神經元的數目、啟動函式(activation function)、輸出入數量。

01_tf_in_out_neural.png

2. 損失與最佳化函數設定

   PyTorch 裡有 torch.nn.CrossEntropyLoss() 可對分類問題設定 cross entropy 損失函數。可利用 torch.optim.Adam() 設定最佳化函數。
02_PyTorch_optimAdam_LossCrossEntropy.png

  Tensorflow/keras Sequential() class 有 compile() 設定損失函數和最佳化函數。

02_tf_optimAdam_lossCrossEntropyl.png

3. GPU 支援

  這裡有明顯的差異:PyTorch 需要將用程式語句將資料綁定 GPU 設備。而 Tensorflow/keras 就不用在程式裡面加指令,只要直接裝 Tensorflow-gpu 和 keras-gpu  的程式庫就可以了!

 PyTorch 裡要先用 device=torch.device('cuda' if tch.cuda.is_available() else 'cpu') 設定 device
  如果 device 輸出是 GPU,表示執行的環境已經安裝 Nvidia GPU 驅動程式。PyTorch 程式就可以使用 GPU 來加速運作。

模型需要加入:
03_PyTorch_GPU_2_model.png

資料也需要

03_PyTorch_GPU_3_dataBind.png

4. 批次處理

  MNIST 資料集裡面有 60000 筆圖片資料,可以讓類神經網路一次學習多張圖片。這裡我們設一次學 500 張。

   PyTorch 使用 torch.utils.data.DataLoader() 設定一次讀取多張圖片。
04_PyTorch_BatchSize_500.png

  Tensorflow/keras 裡面的 Sequential class fit()可設定一次學習的資料筆數。

04_tf_BatchSize_500.png

5. 損失率與執行時間

  一樣的模型參數,一樣的 MNIST 資料集,我們就可以來判斷 PyTorch 與 Tensorflow 這兩種框架的結果。

這是 PyTorch 的表現
05_PyTorch_spent_loss.png

最後的損失 0.0737,花費 39.17

這是 Tensorflow/keras 的表現結果
損失 0.1109
05_tf_loss_acc1.png

時間 4.39 秒!

05_tf_loss_acc_time.png

結論

  單就時間來看,Tensorflow/keras 筆快了 9 倍! 但損失率來看,PyTorch 的表現略勝一籌。

 以我目前的使用心得,PyTorch 可以調整的地方比 Tensorflow/keras 還多。彈性比較高,比較適合作科技研究。
如果希望模型執行效率高,那可以選擇 Tensorflow/keras。

arrow
arrow
    創作者介紹
    創作者 小木屋 的頭像
    小木屋

    小木屋

    小木屋 發表在 痞客邦 留言(1) 人氣()