Использовать разные аргументы на основе разных файлов?

#python-3.x #argparse

#python-3.x #argparse

Вопрос:

У меня есть следующие 2 функции с разными аргументами

 import argparse

def get_train_args():
    parser = argparse.ArgumentParser()

    parser.add_argument('data_dir')
    parser.add_argument('--save_dir', type = str, default = 'checkpoints/', help = 'Save checkpoint directory')
    parser.add_argument('--arch', nargs='?', type = str, const = 'VGG', default = 'VGG', help = 'Select architecture. Choose VGG or AlexNet', choices=['VGG', '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', nargs='?', type = str, const = 'gpu', default = 'gpu', help = 'Use GPU for training')

    return parser.parse_args()

def get_predict_args():
    parser = argparse.ArgumentParser()

    parser.add_argument('single_image', nargs='?', const = 'flowers/test/1/image_06743.jpg')
    parser.add_argument('checkpoint')
    parser.add_argument('--top_k', type = int, default = '5', help = 'Select number of top propabilities')
    parser.add_argument('--category_names', nargs='?', type = dict, const = cat_to_name.json, default = cat_to_name.json, help = 'Select the model learning rate')
    parser.add_argument('--gpu', nargs='?', type = str, const = 'gpu', default = 'gpu', help = 'Use GPU for inference')

    return parser.parse_args()

  

Моя проблема в том, что когда я пытаюсь запустить

python predict.py контрольная точка single_image

Я получаю

 usage: predict.py [-h] [--save_dir SAVE_DIR] [--arch [{VGG,AlexNet}]]
                  [--learning_rate LEARNING_RATE]
                  [--hidden_units HIDDEN_UNITS] [--epochs EPOCHS]
                  [--gpu [GPU]]
                  data_dir
predict.py: error: unrecognized arguments: checkpoint
  

в train.py я использую

из get_input_args импортируйте get_train_args

для запуска get_train_args()

в predict.py у меня есть

 from get_input_args import get_predict_args
from load_checkpoint import load_checkpoint
from train import cp_path

predict_arg = get_predict_args()

if predict_arg.gpu:
    device = 'cuda'
else:
    device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
print('device:', device)

# Load checkpoint from saved path
load_checkpoint(cp_path, device)
  

Каков наилучший способ организовать мой код так, чтобы каждый набор аргументов был доступен на основе файла, который запускается в терминале?

Комментарии:

1. Ошибка выглядит как predict.py ran get_train_args . Как или почему это произошло, трудно сказать, поскольку вы только что предоставили часть predict.py кода.

2. @hpaulj Я обновил OP кодом в predict.py

Ответ №1:

В predict.py я использовал

из train.py импортировать cp_path

Это заставляло train.py сначала запускаться, прежде чем импортировать predict.py аргументы.