В марте IBM анонсировала Глубокое обучение как услугу (DLaaS), которая является частью IBM Watson Studio. Ниже я опишу, как использовать этот сервис для обучения моделей и как оптимизировать гиперпараметры, чтобы легко найти модель наилучшего качества.

Я не специалист по данным, но мне сказали, что поиск правильных гиперпараметров часто является утомительной задачей с множеством проб и ошибок. Вот интро сервиса из документации:

Как специалисту по данным, вам необходимо обучить множество моделей, чтобы определить правильную комбинацию данных в сочетании с гиперпараметрами для оптимизации производительности ваших нейронных сетей. Вы хотите проводить больше экспериментов быстрее. Вы хотите обучать более глубокие сети и исследовать более широкие пространства гиперпараметров. IBM Watson Machine Learning ускоряет этот итеративный цикл, упрощая процесс обучения моделей параллельно с вычислительным кластером графического процессора по запросу.

Чтобы научиться оптимизировать гиперпараметры (HPO), я использовал TensorFlow For Poets для классификации изображений цветов с помощью трансферного обучения. С помощью HPO оптимизируется количество тренировочных шагов.

Это снимок экрана IBM Watson Studio с определением обучения и одним гиперпараметром «how_many_training_steps» со значениями от 100 до 2000.

Это результат эксперимента. Это показывает, что вы должны использовать не менее 700 тренировочных прогонов.

Я выложил образец с открытым исходным кодом на GitHub.

Большую часть кода можно повторно использовать из исходного примера. В коде нужно изменить всего две вещи:

  • Получение значений гиперпараметров от Watson
  • Хранение результатов

Получение значений гиперпараметров от Watson

Значения гиперпараметров хранятся в файле JSON:

from random import randint
import json
test_metrics = []
how_many_training_steps = 4000
instance_id = randint(0,9999)
try:
  with open("config.json", 'r') as f:
    json_obj = json.load(f)
    how_many_training_steps = int(json_obj["how_many_training_steps"])
except:
  pass
print('how_many_training_steps: ' + str(how_many_training_steps))

Сохранение результатов

В конце тренировочного прогона необходимо создать еще один файл JSON, содержащий метрики теста. Для каждой эпохи добавляются метрики:

test_metrics.append((i, {"accuracy": float(validation_accuracy)}))

Это код для сохранения файла JSON:

training_out =[]
for test_metric in test_metrics:
  out = {'steps':test_metric[0]}
  for (metric,value) in test_metric[1].items():
    out[metric] = value
    training_out.append(out)
  with open('{}/val_dict_list.json'.format(os.environ['RESULT_DIR']), 'w') as f:
    json.dump(training_out, f)

Если вы хотите запустить этот пример самостоятельно, получите код с GitHub и получите бесплатную учетную запись IBM Cloud. Чтобы узнать больше о HPO в Watson Studio, ознакомьтесь с документацией.

Первоначально опубликовано на сайте heidloff.net 26 июня 2018 г.