Измените гиперпараметр num_classes для инкрементного обучения SageMaker

#python-3.x #amazon-sagemaker

#python-3.x #amazon-sagemaker

Вопрос:

Я выполняю инкрементное обучение модели, которую я уже обучал в SageMaker. Я хочу добавить данные в существующие классы, а также создать новые классы. В первой модели было 4 класса (num_classes = 4), но я хочу сохранить эти классы, а также добавить 3 дополнительных класса.

В документации говорится, что гиперпараметр num_classes должен быть одинаковым при выполнении инкрементного обучения. Но если это так, это означает, что я не могу добавлять классы в свою существующую модель, мне пришлось бы начинать с нуля каждый раз, когда я хотел изменить количество классов. Это точно? Или есть способ обновить существующую модель и изменить количество классов, на которых она обучается?

Вот пример ноутбука, который я использую для задания инкрементного обучения: https://github.com/awslabs/amazon-sagemaker-examples/blob/master/introduction_to_amazon_algorithms/imageclassification_caltech/Image-classification-incremental-training-highlevel.ipynb

Смотрите параметр num_classes здесь

Ответ №1:

Для инкрементного обучения с помощью встроенного алгоритма классификации изображений SageMaker входные гиперпараметры как новой модели, так и предварительно обученной модели должны иметь одинаковые настройки для num_layers , image_shape и num_classes входных параметров. Потому что эти параметры определяют сетевую архитектуру.

Как правило, для вновь добавленных классов вы должны создать новый набор данных со старыми и новыми классами и обновить веса модели в новом наборе данных. Насколько я знаю, это невозможно с помощью алгоритма классификации изображений SageMaker.

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

1. Это то, что я тоже нашел. Я надеялся, что есть какой-то обходной путь. Я занимаюсь обучением передаче, а SageMaker использует модель ResNet для классификации изображений. Поскольку модель ResNet основана на ImageNet с примерно 1000 классами, каждый раз, когда мы переносим обучение, мы по существу меняем num_classes, поэтому теоретически мы должны иметь возможность изменять num_classes и при инкрементном обучении.