Использовать разные аргументы на основе разных файлов? - PullRequest
0 голосов
/ 23 апреля 2019

У меня есть следующие 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 предикат.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

in train.py Я использую

из get_input_args import 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 Ответ

0 голосов
/ 24 апреля 2019

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

из train.py import cp_path

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

...