?網站| ?文檔|安裝指南|教程|範例|推特|領英|中等的
Optuna是一個自動超參數最佳化軟體框架,專為機器學習而設計。它具有命令式、按運行定義風格的使用者 API。由於我們的按運行定義API,使用 Optuna 編寫的程式碼具有高度模組化性,Optuna 使用者可以動態建立超參數的搜尋空間。
Terminator
文章,該文章在 Optuna 4.0 中進行了擴展。JournalStorage
文章,這篇文章已在 Optuna 4.0 中穩定下來。pip install -U optuna
安裝它。在這裡查找最新資訊並查看我們的文章。 Optuna 具有以下現代功能:
我們使用術語研究和試驗如下:
請參考下面的範例程式碼。研究的目標是透過多次試驗(例如n_trials=100
)找出最佳的超參數值集(例如regressor
和svr_c
)。 Optuna 是一個專為自動化和加速最佳化研究而設計的框架。
import ...
# Define an objective function to be minimized.
def objective ( trial ):
# Invoke suggest methods of a Trial object to generate hyperparameters.
regressor_name = trial . suggest_categorical ( 'regressor' , [ 'SVR' , 'RandomForest' ])
if regressor_name == 'SVR' :
svr_c = trial . suggest_float ( 'svr_c' , 1e-10 , 1e10 , log = True )
regressor_obj = sklearn . svm . SVR ( C = svr_c )
else :
rf_max_depth = trial . suggest_int ( 'rf_max_depth' , 2 , 32 )
regressor_obj = sklearn . ensemble . RandomForestRegressor ( max_depth = rf_max_depth )
X , y = sklearn . datasets . fetch_california_housing ( return_X_y = True )
X_train , X_val , y_train , y_val = sklearn . model_selection . train_test_split ( X , y , random_state = 0 )
regressor_obj . fit ( X_train , y_train )
y_pred = regressor_obj . predict ( X_val )
error = sklearn . metrics . mean_squared_error ( y_val , y_pred )
return error # An objective value linked with the Trial object.
study = optuna . create_study () # Create a new study.
study . optimize ( objective , n_trials = 100 ) # Invoke optimization of the objective function.
筆記
更多範例可以在 optuna/optuna-examples 中找到。
這些範例涵蓋了不同的問題設置,例如多目標最佳化、約束優化、剪枝和分散式最佳化。
Optuna 可在 Python 套件索引和 Anaconda Cloud 上取得。
# PyPI
$ pip install optuna
# Anaconda Cloud
$ conda install -c conda-forge optuna
重要的
Optuna 支援 Python 3.8 或更高版本。
此外,我們也在 DockerHub 上提供 Optuna docker 映像。
Optuna 具有與各種第三方函式庫的整合功能。整合可以在 optuna/optuna-integration 中找到,文件可以在此處找到。
Optuna Dashboard 是 Optuna 的即時 Web 儀表板。您可以透過圖表查看優化歷史記錄、超參數重要性等。您不需要建立Python腳本來呼叫Optuna的視覺化功能。歡迎提出功能請求和錯誤回報!
optuna-dashboard
可以透過 pip 安裝:
$ pip install optuna-dashboard
提示
請使用下面的範例程式碼查看 Optuna Dashboard 的便利性。
將以下程式碼儲存為optimize_toy.py
。
import optuna
def objective ( trial ):
x1 = trial . suggest_float ( "x1" , - 100 , 100 )
x2 = trial . suggest_float ( "x2" , - 100 , 100 )
return x1 ** 2 + 0.01 * x2 ** 2
study = optuna . create_study ( storage = "sqlite:///db.sqlite3" ) # Create a new study with database.
study . optimize ( objective , n_trials = 100 )
然後嘗試以下命令:
# Run the study specified above
$ python optimize_toy.py
# Launch the dashboard based on the storage `sqlite:///db.sqlite3`
$ optuna-dashboard sqlite:///db.sqlite3
...
Listening on http://localhost:8080/
Hit Ctrl-C to quit.
OptunaHub 是 Optuna 的功能分享平台。您可以使用註冊的功能並發布您的套件。
optunahub
可以透過 pip 安裝:
$ pip install optunahub
# Install AutoSampler dependencies (CPU only is sufficient for PyTorch)
$ pip install cmaes scipy torch --extra-index-url https://download.pytorch.org/whl/cpu
您可以使用optunahub.load_module
載入已註冊的模組。
import optuna
import optunahub
def objective ( trial : optuna . Trial ) -> float :
x = trial . suggest_float ( "x" , - 5 , 5 )
y = trial . suggest_float ( "y" , - 5 , 5 )
return x ** 2 + y ** 2
module = optunahub . load_module ( package = "samplers/auto_sampler" )
study = optuna . create_study ( sampler = module . AutoSampler ())
study . optimize ( objective , n_trials = 10 )
print ( study . best_trial . value , study . best_trial . params )
有關更多詳細信息,請參閱 optunahub 文件。
您可以透過 optunahub-registry 發佈您的套件。請參閱 OptunaHub 教學。
我們非常歡迎對 Optuna 做出任何貢獻!
如果您是 Optuna 的新手,請查看優先事項。它們相對簡單、定義明確,通常是您熟悉貢獻工作流程和其他開發人員的良好起點。
如果您已經為 Optuna 做出貢獻,我們會推薦其他歡迎貢獻的問題。
有關如何為專案做出貢獻的一般準則,請查看 CONTRIBUTING.md。
如果您在某個研究專案中使用 Optuna,請引用我們的 KDD 論文「Optuna:下一代超參數優化框架」:
@inproceedings { akiba2019optuna ,
title = { {O}ptuna: A Next-Generation Hyperparameter Optimization Framework } ,
author = { Akiba, Takuya and Sano, Shotaro and Yanase, Toshihiko and Ohta, Takeru and Koyama, Masanori } ,
booktitle = { The 25th ACM SIGKDD International Conference on Knowledge Discovery & Data Mining } ,
pages = { 2623--2631 } ,
year = { 2019 }
}
麻省理工學院許可證(請參閱許可證)。
Optuna 使用 SciPy 和 fdlibm 專案的程式碼(請參閱 LICENSE_THIRD_PARTY)。