5
3

More than 5 years have passed since last update.

argparseなソースコードをgoogle colaboratoryで動かすとき

Posted at

argparseなソースコード

ディープラーニングとか勉強してるとき,githubに挙げられてるソースコードをとりあえず動かしてみる。こういうソースってコンソールから動かせるように引数をargparseで受ける構造になってることが多い。でもGPUなんて無いときはgoogle colaboratoryにお世話になりますよね。
こんなときcolabにソースをコピペしていくことになるけど,argparseな変数を書き換えないといけないのでちょっとだけ面倒くさい。そこで,argparseを一発で書き換えられるようにした。

変換コード

# argparse的な部分をコピーする
txt = """

parser = argparse.ArgumentParser()
parser.add_argument('--out', type=str, default='result',
                    help='Output directory')
parser.add_argument('--dataset-name', type=str, default='mscoco', choices=["mscoco", "stair_captions"],
                    help='MSCOCO dataset root directory')
parser.add_argument('--mscoco-root', type=str, default='data',
                    help='MSCOCO dataset root directory')
parser.add_argument('--max-iters', type=int, default=50000,
                    help='Maximum number of iterations to train')
args = parser.parse_args()

"""

print("class args():")
print(" "*4+"def __init__(self):")
for _ in range(20):
  index = txt.find("add_argument")
  if index < 0:
    break
  txt = txt[index:]
  txt = txt[txt.find("--")+2:]
  variable = txt[:txt.find("'")].replace("-","_")
  txt = txt[txt.find("default"):]
  txt = txt[txt.find("=")+1:]
  val = txt[:txt.find(",")]
  print(" "*8+"self."+variable+" = "+val) 
print("args = args()")

これを動かすと,

class args():
    def __init__(self):
        self.out = 'result'
        self.dataset_name = 'mscoco'
        self.mscoco_root = 'data'
        self.max_iters = 50000
args = args()

という文字列が出力されるので,argparse的な部分と置き換えれば他のとこを修正する必要なく動かせる。

他にもっといい方法があるのかな。

5
3
1

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
5
3