LoginSignup
2
0

More than 1 year has passed since last update.

pythonでの設定ファイルの作り方

Last updated at Posted at 2022-04-20

私が最もシンプルで分かり易いと思っているやり方です.
調べるとよく出てくるJSONはコメントが書けないデメリットがありそれを補うメリットが見出せませんでした.(私はpythonしか普段触っていないからこの方法が最適なだけで他の言語の方だとYAMLなどが良い場合もありそうです.)

設定ファイルとは

機械学習をやっていると,何かのパラメータを変更したローラー作戦をやりたくなることがあります.
そういったときに1つの変数の値だけを変更したメインのファイルを沢山つくるのは管理がとても大変です.
そのため,変更しそうなパラメータ類だけを抜き出したサブのファイルを作成して,そのファイルのみを複製して1つの実行ファイルでパラメタ読み込み→学習→別ファイルから別のパラメタ読み込み→学習...のループを回すやり方が一般的です.
このパラメータを抜き出したファイルのことを設定ファイル(あるいはconfigファイル)と呼びます.

設定ファイルの書き方

まずconfig.pyというpyファイルを作ります.
そこにconfigクラスを作りパラメータを羅列します.
(パラメータが沢山ある場合はココでクラスを分けて可読性を高めるのもアリです.)

config.py
class config: 
    def __init__(self):

        self.save_name = "work/rlt/rlt.npy"  
        self.a = 16 
        self.b = 4 
        self.save = True #保存するかどうか

設定ファイルの使い方

実行ファイルで読み込んで使います.

main.ipynb
from config import * #設定ファイルの名前
conf = config() #設定ファイルから読み込み

rlt = conf.a * conf.b
if conf.save:
    np.save(conf.save_name, rlt) 

こんな感じで使えます.

ローラーのやり方

最終的には実行ファイルを,config1.py, config2.py, config3.py ...と複製してローラー作戦時に使います.
その時はメインで実行したい部分を関数化してしまって,別でローラー用のコードを書く必要があります.

mainv2.ipynb
def multi(conf): #さっきのmain.ipynbでやってたことを関数にした
    rlt = conf.a * conf.b
    if conf.save:
        np.save(conf.save_name, rlt) 

config_files =["config1","config2","config3"] #ローラーしたい設定ファイルたち
for i in config_files:
    config = import_module(i) 
    conf = config.load_config() #設定ファイルから読み込み
    multi(conf)

おわり.

2
0
2

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
2
0