我的代码(train.py):
parser = argparse.ArgumentParser()
parser.add_argument('data_dir')
parser.add_argument('--save_dir', type = str, default = 'save_directory', help = 'Save checkpoint directory')
parser.add_argument('--arch', type = str, default = 'VGG', help = 'Select architecture. Choose VGG or AlexNet')
parser.add_argument('--learning_rate', type = float, default = '0.001', help = 'Select the model learning rate')
parser.add_argument('--hidden_units', type = int, default = '1024', help = 'Select the model hidden units')
parser.add_argument('--epochs', type = int, default = '2', help = 'Select the number of epochs')
parser.add_argument('--gpu', type = str, default = 'gpu', help = 'Select the device type. CPU or GPU.')
return parser.parse_args()
当我尝试运行
python train.py data_dir --arch
我明白了
train.py:错误:参数--arch:预期一个参数
为什么我的默认值不起作用?
答案 0 :(得分:2)
可以通过三种方式传递'--arch'
参数:
default
中的值。'--arch'
,它将使用const
中的值。由于最初未指定const
,因此此案例默认为None
,使其与第一种情况相同。'--arch <value>'
,它将使用<value>
。因此,您需要指定标志使用nargs='?'
和const
的值作为进一步可选参数:
parser.add_argument('--arch',
nargs='?',
type=str,
const='VGG',
default='VGG',
help='Select architecture. Choose VGG or AlexNet')
您可能还希望注意,您可以传递choices=['VGG', 'AlexNet']
来限制可用的选择(如果参数不在choices
中,则会引发错误)。
答案 1 :(得分:2)
当相应的参数不存在时,将替换默认值。
您已将--arch
定义为“一个接受字符串值的可选参数,如果不存在,则应为VGG
”
如果您通过--arch
,则它应该具有字符串值。如果您未通过--arch
,它将为VGG
。
您已经尝试过一些。那是一个错误的情况。