新手入門|使用Optuna進行Pytorch超參數(shù)調(diào)優(yōu)教程
使用Pytorch構(gòu)建深度學習模型的一系列指南中的第四篇來啦!Optuna作為主要面向深度學習超參數(shù)調(diào)優(yōu)開發(fā)的框架,在實現(xiàn)之初就考慮到了大型模型參數(shù)調(diào)優(yōu)的各種實際情況,并逐一針對它們設計了解決方案。今天學姐就帶大家學習如何使用Optuna進行Pytorch超參數(shù)調(diào)優(yōu)。
前三篇傳送門:
01?Optuna介紹
Optuna是一個自動超參數(shù)搜索的超參數(shù)優(yōu)化框架,可應用于機器學習和深度學習模型;Optuna使用了采樣和剪枝算法來優(yōu)化超參數(shù),所以非??焖俸透咝?;它還可以通過直觀的方式動態(tài)構(gòu)建超參數(shù)搜索空間。
本篇文章的重點是結(jié)合Pytorch和Optuna,在MNIST數(shù)據(jù)集上找到性能最佳的CNN模型。我將逐步展示應用Optuna所需的函數(shù)和要調(diào)整的超參數(shù)。
02?MNIST分類器與Optuna
先安裝Optuna庫
之后導入庫和數(shù)據(jù)集
接著將卷積神經(jīng)網(wǎng)絡一起定義到要調(diào)整的超參數(shù)
在Optuna中,目標是最小化/最大化目標函數(shù),它將一組超參數(shù)作為輸入并返回驗證分數(shù)。對于每個超參數(shù),需要考慮不同范圍的值。
優(yōu)化的過程稱為研究,而對目標函數(shù)的每次評估稱為試驗。“Suggest API”在模型架構(gòu)內(nèi)被調(diào)用,為每個試驗動態(tài)生成超參數(shù)。
可以定義超參數(shù)范圍的函數(shù):
suggest_int?建議為第二完全連接層的輸入單元設置整數(shù)值
suggest_float?建議dropout率的浮點值,在第二個卷積層(0-0.5,步長為0.1)和第一個線性層(0-0.3,步長為0.1)之后作為超參數(shù)引入。
suggest_categorical?建議優(yōu)化器的分類值,稍后將顯示
更多資料:
https://optuna.readthedocs.io/en/v1.4.0/reference/trial.html
定義了一個函數(shù)來嘗試訓練集中batch_size的不同值。它將訓練數(shù)據(jù)集和批大小作為輸入(稍后將在目標函數(shù)中定義),并返回訓練和驗證加載器對象。
03?最優(yōu)化(Optimization)
最重要的一步是定義目標函數(shù),它使用采樣程序來選擇每次試驗中的超參數(shù)值,并返回在該試驗中獲得的驗證準確度。
下面創(chuàng)建一個study對象來最大化目標函數(shù),然后使用study.optimize(objective,n_trials = 20)進行研究,將試驗次數(shù)定為20次。可以根據(jù)問題的復雜程度對其進行更改
為了更容易地可視化最近5次試驗中選擇的超參數(shù),我們可以構(gòu)建一個DataFrame對象:

性能最好的模型在第 20 次試驗中獲得了 98.9% 的驗證準確率。上面是該試驗中選擇的超參數(shù)值。
04?使用Optuna進行可視化
有許多有趣的可視化方法可以幫助查看優(yōu)化的不同方面。我們可以看到目標值如何隨著試驗次數(shù)的增加而增加。

x軸是試驗數(shù)據(jù),y軸是客觀值,對應于驗證精度。僅通過20次試驗,我們就可以看到我們獲得了90%以上的高分。
我們還可以證明不同超參數(shù)之間的關(guān)系。在這種情況下,我們只關(guān)注批量大小和學習率:

Contour Plot是一個3D圖,其中第三維由目標值構(gòu)成。從中心的集群(淺藍色表示驗證準確率非常高),我們可以觀察到這些結(jié)果是在中等學習率(介于0.001和0.01之間)和低/中等批量大小下獲得的。
使用平行坐標圖,我們可以觀察到所有已考慮到的優(yōu)化歷史:

另一個有用的表示由超參數(shù)重要性構(gòu)成。因此,可以了解到哪些超參數(shù)對模型的性能影響最大。

從圖中可以看出,學習率對目標值的影響最大,而其他超參數(shù)對學習率的影響很小。丟失率對性能的影響很小,但仍然需要降低過擬合的風險。
希望學姐的這篇文章能夠幫助你理解Optuna!
原文鏈接:
https://pub.towardsai.net/tuning-pytorch-hyperparameters-with-optuna-470edcfd4dc
學姐終于建群了~公眾號后臺回復“進群”拉你進群

分享收藏點贊在看