7 нетривиальных советов и трюков для глубокого обучения |
||||||||||||||
МЕНЮ Искусственный интеллект Поиск Регистрация на сайте Помощь проекту ТЕМЫ Новости ИИ Искусственный интеллект Разработка ИИГолосовой помощник Городские сумасшедшие ИИ в медицине ИИ проекты Искусственные нейросети Слежка за людьми Угроза ИИ ИИ теория Внедрение ИИКомпьютерные науки Машинное обуч. (Ошибки) Машинное обучение Машинный перевод Реализация ИИ Реализация нейросетей Создание беспилотных авто Трезво про ИИ Философия ИИ Big data Работа разума и сознаниеМодель мозгаРобототехника, БПЛАТрансгуманизмОбработка текстаТеория эволюцииДополненная реальностьЖелезоКиберугрозыНаучный мирИТ индустрияРазработка ПОТеория информацииМатематикаЦифровая экономика
Генетические алгоритмы Капсульные нейросети Основы нейронных сетей Распознавание лиц Распознавание образов Распознавание речи Техническое зрение Чат-боты Авторизация |
2018-07-15 18:00 Неочевидные приемы для глубокого обучения, сокращающие время выполнения моделей и повышающие точность их результатов. Код прилагается. Модели глубокого обучения, например, сверточные нейронные сети, имеют множество гиперпараметров. При поиске их оптимальных величин по однородной сетке требуются аппаратные и временные ресурсы. Рассмотрим семь способов, как сократить время обучения моделей и повысить их точность. 1. Используйте для глубокого обучения мощные архитектуры Узнайте о преимуществах технологии переноса обучения (transfer learning) и изучите архитектуры сверточных нейросетей. Используйте профессионально сделанный на промышленных мощностях велосипед или хотя бы в деталях освойте его устройство прежде, чем изобретать свой. Соответствующие примеры предобученных моделей найдутся для всех популярных фреймворков: Keras (Список Kaggle, Приложение Keras, Пример OpenCV), TensorFlow (VGG16, ResNet), Torch (LoadCaffe), Caffe (Model Zoo). 2. Используйте малые скорости обучения для предобученных моделей Заранее настроенные веса – это не то же самое, что инициализированные случайным образом. Изменяйте их значения более деликатно. Выбор скорости зависит от модели обучения и того, насколько хорошо прошло предобучение. 3. Играйте с прореживанием (dropout) Как и в случае регуляризации регрессионных моделей Ridge и LASSO, в глубоком обучении нет оптимальных для всех моделей значений альфа и прореживания. Эти гиперпараметры необходимо настраивать. Начиная с больших вариаций, при помощи np.logspace() уменьшайте интервал рассмотрения параметра аналогично скорости обучения. Общие стратегии следующие:
4. Ограничивайте размеры весов Чтобы обобщить модель, ограничьте абсолютные значения весов для определенных слоев. Покажем на примере датасета MNIST, как в Keras можно варьировать и прореживание, и величины весов: Python
Так замораживаются веса в первых пяти слоях: Python
Как вариант, можно установить для определенных слоев нулевую скорость обучения. Либо использовать алгоритм адаптивного обучения каждого параметра, например, Adadelta или Adam. Это несколько сложнее и лучше оформлено в Caffe. 5. Не трогайте первые слои Первые скрытые слои нейронной сети обычно захватывают универсальные интерпретируемые признаки, такие как формы, кривые и пересечения. Просто оставьте их в покое. 6. Модифицируйте выходной слой Замените стандартные значения по умолчанию новой функцией активации с размером вывода, подходящим для выбранной области. Не ограничивайтесь очевидным решением. Так, для MNIST кажутся достаточными 10 классов выходных данных. Однако использование 12-16 классов позволяет улучшить и разрешение вариантов, и качество модели. Пример модификации выходного слоя в Keras c 14 классами для датасета MNIST: Python
7. Визуализируйте данные моделей Важно получать зрительное представление модельных данных. Уровень абстракции Keras позволяет о многом не думать, но не дает рассмотреть части модели для глубокого анализа. Приведенный ниже код позволяет визуализировать модели TensorFlow: Python
""".format(data=repr(str(strip_def)),id='graph'+str(np.random.rand())) iframe="""
""".format(code.replace('"','"')) display(HTML(iframe)) # Визуализация сети графа. Не забудьте про смешанные узлы, чтобы увидеть их # внутреннюю структуру. В примере визуализируются узлы Conv2D. graph_def=tf.get_default_graph().as_graph_def() tmp_def=rename_nodes(graph_def,lambdas:"/".join(s.split('_',1))) show_graph(tmp_def)
Следующая пара строк позволяет создать граф модели в Keras и сохраняет его в png-файле: Python
Функция plot_model принимает также два опциональных булевых аргумента:
Вы можете обработать объект pydot.Graph самостоятельно, например, в Jupyter-ноутбуке: Python
Надеемся, что эта подборка рекомендаций для глубокого обучения поможет вам в ваших проектах. Другие советы для глубокого обучения: Источник: proglib.io Комментарии: |
|||||||||||||