動機
深層学習モデルなど、いろいろとプロトタイプを作成するとき、
起動パラメータを設定ファイルにして、履歴に残るようにしたいときがある。
そんなときのために、簡易に使える設定読み込みモジュールがあるといいな、ということで作成。
環境
- 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
の サブカテゴリtrain
のlr
にアクセスする場合は、
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 変数の名称が一意になるように、うまいこと設計してください♪