Pythonのargparseモジュールは、コマンドラインオプションを簡単に実装できるツールです。特に、大量のパラメータを用意する必要がある実験などで重宝します。一方で、実験結果とともに使用したパラメータを保存したい状況は結構あると思われます。
ここでは、argparseに渡された引数を、人間にも読みやすいJSON形式で保存する方法を紹介します。
import json
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("--param1", type=str, default="test")
parser.add_argument("--param2", type=int, default=100)
parser.add_argument("--param3", type=float, nargs="+", default=[0.1, 0.2, 0.3])
args = parser.parse_args()
with open("./params.json", mode="w") as f:
json.dump(args.__dict__, f, indent=4)
このコードでは、argparseに渡された引数をdict()に変換しています。その後、jsonに渡しインデントを追加することで、可読性の高い形で保存することができます。
しかし、json出力時にserializeできない型が含まれているとエラーを吐くことがあります。その対処法として、objectをstr型に変換する方法や、dump時にdefaultまたはclsを指定することでエンコード方式を指定する方法があります。
以上が、PythonのargparseとJSONを活用した引数の保存方法についての解説です。この方法を活用することで、実験の再現性を高めることができます。