LoginSignup
0
0

More than 5 years have passed since last update.

簡易な設定読み込みモジュールを作ってみた♪

Last updated at Posted at 2019-04-17

動機

深層学習モデルなど、いろいろとプロトタイプを作成するとき、
起動パラメータを設定ファイルにして、履歴に残るようにしたいときがある。
そんなときのために、簡易に使える設定読み込みモジュールがあるといいな、ということで作成。

環境

  • OS: 18.04.2 LTS (Bionic Beaver)
  • CPU: Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz / cpu cores: 4
  • Memory: 約60GiB
  • HDD: 約1.7TiB (Avail)
  • Python 3.6.5 (GCC 7.3.0) on pyenv
  • pycharm-community-2019.1.1

リポジトリ

ここ

インストール

pip で、リポジトリを指定してインストールします。

$ pip install git+https://github.com/tkosht/simple_config.git

動作確認

リポジトリをclone

example を実行するため、リポジトリをclone しておきます。

$ git clone https://github.com/tkosht/simple_config.git
$ cd simple_config/

example を実行

以下のようにして、example.py を、実行します。

$ cd $(git rev-parse --show-toplevel)/examples
$ python example.py
OK    # <- 出力されればOK

中身を見ていく

設定ファイル(.yml)

まずは、head (model1 カテゴリ)

$ head -n 5 config/project.yml 
model1:
    batch_size: 2048
    samples: 10000
    vector_size: 128
    epochs: 10

次は、tail (visdom カテゴリ)

$ tail -n 3 config/project.yml 
visdom:
    server: 0.0.0.0
    port: 8097

example.py の中身

example.py の中身は、こんな感じ。

# -*- coding: utf-8 -*-

from sconfig.config import Config


if __name__ == '__main__':
    cfg = Config()
    assert cfg.model1.batch_size == 2048
    assert cfg.model1.samples == 10000

    vis = cfg.get("visdom")
    assert vis.server == "0.0.0.0"
    assert vis.port == 8097

    cfg = Config('config/project.cfg', 'config/project.spc')
    assert cfg.model1.batch_size == 2048
    assert cfg.model1.samples == 10000

    vis = cfg.get("visdom")
    assert vis.server == "0.0.0.0"
    assert vis.port == 8097

    print("OK")

cfg から、カテゴリ名を変数名としてアクセスします。
カテゴリ model2 の サブカテゴリtrainlr にアクセスする場合は、

assert cfg.model2.train.lr == 0.001

または、

train = cfg.get("train")
assert train.lr == 0.001

のようにして、アクセスします。train までのパスがわからなくてもアクセスできる点が、プロトタイプ向きです笑。

ただ、cfg.get("train") は、辞書で最初に見つかったtrain という名称のオブジェクトを返すので、複数のtrain という名称の変数(or サブカテゴリ)がある場合は、どのオブジェクトが返されるかは、保証されない点(辞書オブジェクトのkeys の順序が保証されないことに起因)に注意が必要です。あくまで、シンプルなモジュールなので、そこはケアしない予定です。。

ということで、cfg.get() をご利用の際は、サブカテゴリ or 変数の名称が一意になるように、うまいこと設計してください♪

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0