1. HOME
  2. ブログ
  3. IT技術
  4. 【前編】YAMLを使ってPyTorchのOptimizerのパラメータ管理をすごく簡単にする方法

【前編】YAMLを使ってPyTorchのOptimizerのパラメータ管理をすごく簡単にする方法

前編~YAML で Optimizer のパラメータ管理が簡単に!~

みなさんは、Optimizer をどのように設定していますか?

よくあるのは、ArgumentParser などでコマンドラインから指定する方法だと思います。

でも、Optimizer やパラメータ追加のたびに、いちいちコードを書き換えるのは面倒…

そんな悩みを解決してくれるのが「YAML」です!

Optimizer のパラメータ管理が簡単になるだけでなく、コード自体もより単純でスッキリしたものになりますよ。

YAML とは

「YAML(YAML Ain’t a Markup Language)」は、構造化データをわかりやすく記述するために生まれたデータフォーマットです。

設定ファイルやデータの保存・交換をする際によく用いられています。

同じデータフォーマットである XML と似ていますが、XML よりは読みやすく書きやすい傾向にあります。

また、Python と同じくインデントを使うのが特徴です。

【YAML 公式ドキュメント】
https://yaml.org/

YAML がないと面倒なケース

YAML の利便性を知ってもらうため、まずは「できないこともないけど、ちょっと面倒だな…」というケースを見ていきましょう!

サンプルコード:main1.py

まずは、Optimizer を作成するだけのプログラムを作成していきます。

実行するときには、「Optimizerの名前」 --optim と「学習率」 --lr を引数として指定します。

SGD 作成

以下では、SGD を作成します。

> はコマンドプロンプトのことです。

Adam 作成

次に、Adam を作成します。

拡張性がない!

これ以上拡張しないのであれば、コーディングの量も少ないですし、特に問題はありません。

ただし、機械学習の訓練中は様々な Optimizer やパラメータを試す必要があります。

「拡張性」という点から考えると、上記のコードは後々面倒なことになりますね。

サンプルコード:main2.py

次に、SGD 特有の引数である「momentum」を追加でサポートしましょう。

上記の main1.py をコピーして main2.py を作り、下記の変更を加えます。

momentum を追加

まず、新しい引数である momentum をつけたします。

make_optimizer に momentum 引数を追加

make_optimizer に momentum の引数をつけたします。

args.momentum を追加

make_optimizer を呼び出すときに、args.momentum を追加で渡します。

momentum の指定なし実行はデフォルト「0」が適用される

momentum はオプションです。

そのため、指定しないで実行すると、デフォルトの「0」が採用されます。

指定して実行した場合

momentum を指定して実行すれば、結果に値が反映されます。

Adam は指定にかかわらず変化なし

ちなみに、Adam は momentum を使わないので、指定しても変化はありません。

コード修正に手間がかかりすぎる!

この調子でもっと引数を追加したり、より多くの Optimizer をサポートしていく事は可能です。

ただし、新しいパラメータを追加する毎に3箇所でコード修正を施さなければなりません。

その上、コマンドラインからの指定だと、使うべきパラメータの判断がしにくい問題もあります。

YAML で設定を簡単にしよう!

上記のようなサンプルコードは、設定を YAML で記述し、ファイルから読み込むようにすれば、面倒がなくなります。

コマンドラインをシンプルにする

config1.yaml を作成

新たに main3.py として書き直したプログラムを使います(後ほど解説します)。

例として、config1.yaml を以下のように記述します。

main3.py を実行

この設定ファイルを使って、main3.py を実行します。

SGD が正しく作成されました。

YAML なしの場合と比べて、コマンドラインがスッキリしましたね。

パラメータを追加する

次は、パラメータを追加してみましょう。

config2.yaml を作成し、momentum を追加

config1.yaml をコピーして config2.yaml を作り、momentum を追加します。

main3.py を実行

実行の仕方は、さっきと同じです。

設定ファイルのパスを指定して実行しましょう!

コード変更は不要

ちゃんと momentum の値が反映されていますね。

YAML でパラメータ値を記述しただけで、コードの変更は必要ありません

異なる Optimizer を設定する

今度は、異なる Optimizer を設定しましょう。

config3.yaml を作成し、Adam を設定

config3.yaml を作って、Adam を設定します。

main3.py を実行

実行すると、こちらも期待通りの結果になります。

コード変更は不要

Optimizer の設定を変えましたが、やはりコードの変更は必要ありません

YAML で記述した設定ファイルのみの変更です。

YAML 設定ファイルを書き換え、別の Optimizer を作成する

もう一つ、別の Optimizer を使ってみましょう。

config4.yaml を作成し、Adagrad を設定

config4.yaml を作って、Adagrad を設定します。

パラメータの数も増やしましょう。

main3.py を実行

これも、期待通りに動作します。

パラメータ管理が楽になる

このように、YAML 形式で書いた設定ファイルの中身を変えるだけで、様々な Optimizer を作成する事ができます。

この方法だと、訓練用の設定ファイルを複数準備して使い分けができるので、パラメータ管理が楽になります。

後半へつづく!

後半の記事はこちら!

記事を書いた人

\ 3度の飯より技術が好き /
(株)ライトコードは、WEB・アプリ・ゲーム開発に強い「好きを仕事にするエンジニア集団」です。
システム開発依頼・お見積もりはこちらまでお願いします。
また、WEB・スマホ系エンジニアを積極採用中です!
※現在、多数のお問合せを頂いており、返信に、多少お時間を頂く場合がございます。

こちらの記事もオススメ!


ライトコードよりお知らせ

にゃんこ師匠にゃんこ師匠
システム開発のご相談やご依頼はこちら
ミツオカミツオカ
ライトコードの採用募集はこちら
にゃんこ師匠にゃんこ師匠
社長と一杯飲みながらお話してみたい方はこちら
ミツオカミツオカ
フリーランスエンジニア様の募集はこちら
にゃんこ師匠にゃんこ師匠
その他、お問い合わせはこちら
ミツオカミツオカ
   
お気軽にお問い合わせください!せっかくなので、別の記事もぜひ読んでいって下さいね!

一緒に働いてくれる仲間を募集しております!

ライトコードでは、仲間を募集しております!

当社のモットーは「好きなことを仕事にするエンジニア集団」「エンジニアによるエンジニアのための会社」。エンジニアであるあなたの「やってみたいこと」を全力で応援する会社です。

また、ライトコードは現在、急成長中!だからこそ、あなたにお任せしたいやりがいのあるお仕事は沢山あります。「コアメンバー」として活躍してくれる、あなたからのご応募をお待ちしております!

なお、ご応募の前に、「話しだけ聞いてみたい」「社内の雰囲気を知りたい」という方はこちらをご覧ください。

ライトコードでは一緒に働いていただける方を募集しております!

採用情報はこちら

書いた人はこんな人

ライトコードメディア編集部
ライトコードメディア編集部
「好きなことを仕事にするエンジニア集団」の(株)ライトコードのメディア編集部が書いている記事です。

関連記事