Pythonのargparseライブラリは、コマンドライン引数を処理するための強力なツールです。しかし、Jupyter Notebookでargparseを使用するときにはいくつかの問題があります。その一つは、Jupyter Notebookがコマンドライン引数をサポートしていないことです。
しかし、この問題を解決する方法があります。argparseのparse_args()
関数に空のリストを渡すことで、Jupyter Notebookでもargparseを使用できます。以下にその例を示します。
import argparse
# argparseのインスタンスを作成
parser = argparse.ArgumentParser(description='ChainerMN example: MNIST')
# 引数を追加
parser.add_argument('--batchsize', '-b', type=int, default=100, help='Number of images in each mini-batch')
parser.add_argument('--communicator', type=str, default='hierarchical', help='Type of communicator')
parser.add_argument('--epoch', '-e', type=int, default=20, help='Number of sweeps over the dataset to train')
parser.add_argument('--gpu', '-g', action='store_true', help='Use GPU')
parser.add_argument('--out', '-o', default='result', help='Directory to output the result')
parser.add_argument('--resume', '-r', default='', help='Resume the training from snapshot')
parser.add_argument('--unit', '-u', type=int, default=1000, help='Number of units')
# コマンドライン引数を解析
args = parser.parse_args(args=[])
このようにすると、Jupyter Notebook上でもコマンドライン引数を模倣することができます。引数を指定する場合は、args=[]
の[]
内にコマンドラインで打ち込む順にリストに入れます。例えば、以下のように引数を指定してプログラムを実行する場合、
$ python test.py --batchsize 200 --epoch 100 -g
この実行と同じ引数指定をして、Jupyter上で実行する場合は、該当部分を、
args = parser.parse_args(args=['--batchsize','200','--epoch','100','-g'])
とすれば、実行できます。
この方法を使えば、Jupyter Notebook上でargparseを活用し、コードの再利用性を高めることができます。皆さんもぜひ試してみてください。