В марте 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 г.