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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

配置优化算法和超参

發布時間:2023/11/28 生活经验 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 配置优化算法和超参 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

配置優化算法和超參
當搭建好神經網絡模型后,需要經過訓練才能用來做預測。而訓練的過程就是網絡模型中的參數被優化的過程,通常采用反向傳播算法和指定的 Optimizer 更新參數,本文重點介紹在 OneFlow 中如何設置 Optimizer 和 超參(Hyperparameters) 。
文章主要內容如下:
? 用于訓練的作業函數和用于預測的作業函數的配置示例;
? optimizer 及 學習策略的使用;
? 由于錯誤配置導致的常見錯誤及解決方法
可以在不了解 OneFlow 設計和概念的情況下,直接采用 配置示例 部分的訓練或預測配置;更詳細的說明請參考optimizer API 文檔
作業函數配置的基本概念
在 識別 MNIST 手寫體數字 一文中,已經了解了 oneflow.global_function 裝飾器及作業函數的概念,本文的配置,建立在此基礎上。
可以通過向該裝飾器傳遞 function_config 參數達到配置作業函數的目的。
如果對于 oneflow.global_function 還不了解,請先參閱 識別 MNIST 手寫體數字 及 作業函數的定義與調用。
配置示例
預測配置
以下代碼中定義了一個用于預測的作業函數:eval_job。
通過 get_eval_config() 定義了 eval_job() 的配置,并將 get_eval_config() 作為 @flow.global_function 的參數,應用到 eval_job() 函數。同時,通過設置參數 type=“predict” 來表明該作業函數用于預測,這樣,OneFlow 不會在這個作業函數中進行反向傳播。
def get_eval_config():
config = flow.function_config()
config.default_data_type(flow.float)
return config

@flow.global_function(type=“predict”, get_eval_config())
def eval_job() -> tp.Numpy:

build up neural network here

訓練配置
如果指定 @flow.global_function 的 type 參數為 train,就能夠得到一個用于訓練的作業函數。
以下代碼中,train_job 為用于訓練的作業函數,采用默認的 function_config 配置(因此沒有向 function_config 傳參)。
因為 OneFlow 會為 train 類型的作業函數進行反向傳播,因此需要在作業函數中指定 optimizer、學習率等超參數的設定:
@flow.global_function(type=“train”)
def train_job(
images: tp.Numpy.Placeholder((BATCH_SIZE, 1, 28, 28), dtype=flow.float),
labels: tp.Numpy.Placeholder((BATCH_SIZE,), dtype=flow.int32),
) -> tp.Numpy:
with flow.scope.placement(“gpu”, “0:0”):
logits = lenet(images, train=True)
loss = flow.nn.sparse_softmax_cross_entropy_with_logits(
labels, logits, name=“softmax_loss”
)

lr_scheduler = flow.optimizer.PiecewiseConstantScheduler([], [0.1])
flow.optimizer.SGD(lr_scheduler, momentum=0).minimize(loss)
return loss

以上代碼中:

  1. flow.optimizer.PiecewiseConstantScheduler 設置了學習率(0.1)及學習策略(PiecewiseConstantScheduler,分段縮放策略),OneFlow 中還內置了其它學習策略,如:CosineScheduler、CustomScheduler、InverseTimeScheduler 等。
  2. 在 flow.optimizer.SGD(lr_scheduler, momentum=0).minimize(loss) 設置 optimizer 為 SGD,并指定優化目標為 loss。OneFlow 中內置了多種 optimizer,它們分別是:SGD、Adam、AdamW、LazyAdam、LARS、RMSProp,可參閱 API 文檔獲取使用方法及算法細節。
    FAQ
    ? 報錯 Check failed: job().job_conf().train_conf().has_model_update_conf()
    如果作業函數的 type 為 “train”,但是沒有設置 optimizer 及優化目標,那么在反向傳播時,OneFlow 會因為不知道如何更新參數而報錯。解決方法:為訓練作業函數配置 optimizer并指定優化目標。
    ? 報錯 Check failed: NeedBackwardOp
    如果作業函數的 type 為 “predict”,卻(錯誤地)配置了 optimizer 時,因為 OneFlow 不會為 predict 類型的作業函數生成反向圖,所以此時 optimizer 無法拿到反向的數據。解決方法:去掉 predict 類型的作業函數中的 optimizer 相關語句。

總結

以上是生活随笔為你收集整理的配置优化算法和超参的全部內容,希望文章能夠幫你解決所遇到的問題。

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