開源尋參工具 Optuna

Optuna是特別為機器學(xué)習(xí)而設(shè)計的一個自動超參數(shù)優(yōu)化軟件框架幽七。它具有命令式的谬运、隨運行而定義的用戶API爽冕。用Optuna編寫的代碼具有高度的模塊化仇祭,Optuna的用戶可以動態(tài)地構(gòu)造超參數(shù)的搜索空間披蕉。

參考

Akiba T, Sano S, Yanase T, et al. Optuna: A next-generation hyperparameter optimization framework[C]//Proceedings of the 25th ACM SIGKDD International Conference on Knowledge Discovery & Data Mining. 2019: 2623-2631.

官網(wǎng)
官方文檔

Optuna的使用

使用Optuna至少需要了解3個東西:Trail 對象颈畸,Study 對象和objective函數(shù)。

1. Trail 對象

一個trail實例是一個評估目標(biāo)函數(shù)的過程没讲。該實例被傳遞給一個目標(biāo)函數(shù)眯娱,并提供了獲取參數(shù)建議、管理狀態(tài)爬凑、設(shè)置/獲取用戶自定義的trail屬性的接口徙缴,以便Optuna用戶可以通過這些接口定義自定義的目標(biāo)函數(shù)。

對象方法如下:

方法 描述
report(value, step) Report an objective function value for a given step.
set_system_attr(key, value) 設(shè)置系統(tǒng)屬性
set_user_attr(key, value) 設(shè)置用戶屬性
should_prune() 是否應(yīng)被剪枝
suggest_categorical(name, choices) 為分類型參數(shù)建議一個值
suggest_discrete_uniform(name, low, high, q) 為離散型參數(shù)建議一個值
suggest_float(name, low, high, *, [step, log]) 為浮點型參數(shù)建議一個值
suggest_int(name, low, high, [step, log]) 為整型參數(shù)建議一個值
suggest_loguniform(name, low, high) 為對數(shù)域連續(xù)型參數(shù)建議一個值
suggest_uniform(name, low, high) 為連續(xù)型參數(shù)建議一個值

官方文檔中有較詳細的論述和用例,例如report和should_prune可以結(jié)合起來使用剪枝表現(xiàn)不好的trail于样,set_user_attr可用于保存模型的固定參數(shù)疏叨。

2. objective函數(shù)

objective函數(shù)需要用戶自己編寫,主要有下面三個要求:

  1. 以trail作為函數(shù)參數(shù)

  2. 定義超參數(shù)和尋參范圍

  3. 返回模型目標(biāo)函數(shù)值

一個簡單的objective函數(shù)例子如下:

def objective(trial: optuna.trial.Trial):  # 以trail作為參數(shù)
    x = trial.suggest_uniform("x", 0, 10)  # 定義參數(shù)和尋參范圍
    return x ** 2  # 返回模型目標(biāo)函數(shù)值

3. Study對象

一個study相當(dāng)于一個優(yōu)化任務(wù)穿剖,即一組試驗蚤蔓。這個對象提供接口來運行一個新的trail,訪問其歷史糊余,設(shè)置/獲取用戶自定義的study本身的屬性秀又。

4. 如何使用

下面的代碼展示了一個簡單的使用Optuna優(yōu)化超參數(shù)的例子,具體應(yīng)用的核心在于根據(jù)自己的模型改寫objective函數(shù)贬芥。

# 定義模型訓(xùn)練函數(shù)
def train(data, params):
    pass
    # 返回指標(biāo)吐辙,如損失,精度等
    return loss 

# 定義objective函數(shù)
def objective(trial: optuna.trial.Trial):
    # 定義模型超參數(shù)及其范圍
    params = {
        'n_layers_rnn': trial.suggest_int('n_layers_rnn', 1, 4),
        'n_units_rnn': trial.set_user_attr('n_units_rnn', 256),
        'activation': trial.suggest_categorical('activation', ['relu', 'tanh']),
        'dropout': trial.suggest_uniform('dropout', 0.1, 0.7),
        'lr': trial.suggest_loguniform('lr', 1e-6, 1e-2)
    }
    # 計算模型損失
    loss = train(data, params)
    # 返回損失
    return loss

# 創(chuàng)建優(yōu)化任務(wù)
study = optuna.create_study(direction='minimize')
# 執(zhí)行優(yōu)化任務(wù)蘸劈,設(shè)置運行100次trial
study.optimize(objective, n_trials=100)

# 最優(yōu)結(jié)果
trial_ = study.best_trial
print(f'min loss: {trial_.value}')  # 輸出最優(yōu)結(jié)果的損失值
print(f'best params: {trial_.params}')  # 輸出最優(yōu)結(jié)果的模型超參數(shù)
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末昏苏,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子威沫,更是在濱河造成了極大的恐慌捷雕,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,561評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件壹甥,死亡現(xiàn)場離奇詭異绞旅,居然都是意外死亡,警方通過查閱死者的電腦和手機陶夜,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,218評論 3 385
  • 文/潘曉璐 我一進店門桃序,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人溯职,你說我怎么就攤上這事精盅。” “怎么了谜酒?”我有些...
    開封第一講書人閱讀 157,162評論 0 348
  • 文/不壞的土叔 我叫張陵叹俏,是天一觀的道長。 經(jīng)常有香客問我僻族,道長粘驰,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,470評論 1 283
  • 正文 為了忘掉前任述么,我火速辦了婚禮蝌数,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘度秘。我一直安慰自己顶伞,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,550評論 6 385
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著唆貌,像睡著了一般滑潘。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上锨咙,一...
    開封第一講書人閱讀 49,806評論 1 290
  • 那天众羡,我揣著相機與錄音,去河邊找鬼蓖租。 笑死粱侣,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的蓖宦。 我是一名探鬼主播齐婴,決...
    沈念sama閱讀 38,951評論 3 407
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼稠茂!你這毒婦竟也來了柠偶?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,712評論 0 266
  • 序言:老撾萬榮一對情侶失蹤睬关,失蹤者是張志新(化名)和其女友劉穎诱担,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體电爹,經(jīng)...
    沈念sama閱讀 44,166評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡蔫仙,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,510評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了丐箩。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片摇邦。...
    茶點故事閱讀 38,643評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖屎勘,靈堂內(nèi)的尸體忽然破棺而出施籍,到底是詐尸還是另有隱情,我是刑警寧澤概漱,帶...
    沈念sama閱讀 34,306評論 4 330
  • 正文 年R本政府宣布丑慎,位于F島的核電站,受9級特大地震影響瓤摧,放射性物質(zhì)發(fā)生泄漏竿裂。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,930評論 3 313
  • 文/蒙蒙 一姻灶、第九天 我趴在偏房一處隱蔽的房頂上張望铛绰。 院中可真熱鬧诈茧,春花似錦产喉、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,745評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽这嚣。三九已至,卻和暖如春塞俱,著一層夾襖步出監(jiān)牢的瞬間姐帚,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,983評論 1 266
  • 我被黑心中介騙來泰國打工障涯, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留罐旗,地道東北人。 一個月前我還...
    沈念sama閱讀 46,351評論 2 360
  • 正文 我出身青樓唯蝶,卻偏偏與公主長得像九秀,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子粘我,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,509評論 2 348

推薦閱讀更多精彩內(nèi)容