Keras. Слои нейронной сети
Истточник https://www.kaggle.com/yassineghouzam/introduction-to-cnn-keras-0-997-top-6#1.-Introduction
Keras Sequential API, нужно просто добавлять один слой за раз, начиная с ввода.
Первый - это сверточный (Conv2D) слой. Это как набор обучаемых фильтров. Я решил установить 32 фильтра для двух первых слоев conv2D и 64 фильтра для двух последних. Каждый фильтр преобразует часть изображения (определяется размером ядра), используя фильтр ядра. Матрица фильтра ядра применяется ко всему изображению. Фильтры можно рассматривать как преобразование изображения.
CNN может изолировать функции, которые везде полезны, от этих преобразованных изображений (карты функций).
Вторым важным уровнем в CNN является уровень пула (MaxPool2D). Этот слой просто действует как фильтр понижающей дискретизации. Он смотрит на 2 соседних пикселя и выбирает максимальное значение. Они используются для уменьшения вычислительных затрат и в некоторой степени также для уменьшения переоснащения. Мы должны выбрать размер пула (т. Е. Размер области, объединяемой каждый раз), чем больше размер пула, тем важнее понижающая выборка.
Комбинируя сверточные и объединяющие слои, CNN способны комбинировать локальные особенности и изучать более глобальные особенности изображения.
Выпадение - это метод регуляризации, при котором доля узлов в слое случайным образом игнорируется (устанавливая их значения в ноль) для каждой обучающей выборки. Это случайно отбрасывает предложение сети и заставляет сеть изучать функции распределенным способом. Этот метод также улучшает обобщение и уменьшает переоснащение.
«relu» - выпрямитель (функция активации max (0, x). Функция активации выпрямителя используется для добавления нелинейности в сеть.
Слой Flatten используется для преобразования окончательных карт объектов в один одномерный вектор. Этот шаг выравнивания необходим для того, чтобы вы могли использовать полностью соединенные слои после некоторых слоев сверточного / maxpool. Он сочетает в себе все найденные локальные особенности предыдущих сверточных слоев.
В конце я использовал функции в двух полностью связанных (плотных) слоях, которые являются просто искусственным классификатором нейронных сетей (ANN). На последнем уровне (Dense (10, активации = "softmax")) чистая выводит распределение вероятностей каждого класса.
Мы определяем функцию потерь, чтобы измерить, насколько плохо наша модель работает на изображениях с известными метками. Это частота ошибок между надписанными метками и предсказанными. Мы используем специальную форму для категориальных классификаций (> 2 классов), называемую "categoryorc_crossentropy".
Наиболее важной функцией является оптимизатор. Эта функция будет итеративно улучшать параметры (фильтрует значения ядра, веса и смещения нейронов ...), чтобы минимизировать потери.
Я выбрал RMSprop (со значениями по умолчанию), это очень эффективный оптимизатор. Обновление RMSProp очень просто настраивает метод Адаграда, пытаясь снизить его монотонно уменьшающуюся скорость обучения. Мы могли бы также использовать оптимизатор Stochastic Gradient Descent ('sgd'), но он медленнее, чем RMSprop.
Метрическая функция «точность» используется для оценки производительности нашей модели. Эта метрическая функция аналогична функции потерь, за исключением того, что результаты оценки метрики не используются при обучении модели (только для оценки).
Для того, чтобы оптимизатор сходится быстрее и ближе всего к глобальному минимуму функции потерь, я использовал метод отжига скорости обучения (LR).
LR - это шаг, с помощью которого оптимизатор проходит через «ландшафт потерь». Чем выше LR, тем больше ступени и тем быстрее сходимость. Однако выборка очень плохая с высоким LR, и оптимизатор, вероятно, может попасть в локальные минимумы.
Лучше иметь снижающуюся скорость обучения во время обучения, чтобы эффективно достичь глобального минимума функции потерь.
Чтобы сохранить преимущество быстрого времени вычислений при высоком LR, я динамически уменьшал LR каждые X шагов (эпох) в зависимости от необходимости (когда точность не повышается).
С помощью функции ReduceLROnPlateau из Keras.callbacks я выбираю уменьшение LR вдвое, если точность не улучшается после 3 эпох.
Keras Sequential API, нужно просто добавлять один слой за раз, начиная с ввода.
Первый - это сверточный (Conv2D) слой. Это как набор обучаемых фильтров. Я решил установить 32 фильтра для двух первых слоев conv2D и 64 фильтра для двух последних. Каждый фильтр преобразует часть изображения (определяется размером ядра), используя фильтр ядра. Матрица фильтра ядра применяется ко всему изображению. Фильтры можно рассматривать как преобразование изображения.
CNN может изолировать функции, которые везде полезны, от этих преобразованных изображений (карты функций).
Вторым важным уровнем в CNN является уровень пула (MaxPool2D). Этот слой просто действует как фильтр понижающей дискретизации. Он смотрит на 2 соседних пикселя и выбирает максимальное значение. Они используются для уменьшения вычислительных затрат и в некоторой степени также для уменьшения переоснащения. Мы должны выбрать размер пула (т. Е. Размер области, объединяемой каждый раз), чем больше размер пула, тем важнее понижающая выборка.
Комбинируя сверточные и объединяющие слои, CNN способны комбинировать локальные особенности и изучать более глобальные особенности изображения.
Выпадение - это метод регуляризации, при котором доля узлов в слое случайным образом игнорируется (устанавливая их значения в ноль) для каждой обучающей выборки. Это случайно отбрасывает предложение сети и заставляет сеть изучать функции распределенным способом. Этот метод также улучшает обобщение и уменьшает переоснащение.
«relu» - выпрямитель (функция активации max (0, x). Функция активации выпрямителя используется для добавления нелинейности в сеть.
Слой Flatten используется для преобразования окончательных карт объектов в один одномерный вектор. Этот шаг выравнивания необходим для того, чтобы вы могли использовать полностью соединенные слои после некоторых слоев сверточного / maxpool. Он сочетает в себе все найденные локальные особенности предыдущих сверточных слоев.
В конце я использовал функции в двух полностью связанных (плотных) слоях, которые являются просто искусственным классификатором нейронных сетей (ANN). На последнем уровне (Dense (10, активации = "softmax")) чистая выводит распределение вероятностей каждого класса.
Оптимизация
После того, как наши слои добавлены в модель, нам нужно настроить функцию оценки, функцию потерь и алгоритм оптимизации.Мы определяем функцию потерь, чтобы измерить, насколько плохо наша модель работает на изображениях с известными метками. Это частота ошибок между надписанными метками и предсказанными. Мы используем специальную форму для категориальных классификаций (> 2 классов), называемую "categoryorc_crossentropy".
Наиболее важной функцией является оптимизатор. Эта функция будет итеративно улучшать параметры (фильтрует значения ядра, веса и смещения нейронов ...), чтобы минимизировать потери.
Я выбрал RMSprop (со значениями по умолчанию), это очень эффективный оптимизатор. Обновление RMSProp очень просто настраивает метод Адаграда, пытаясь снизить его монотонно уменьшающуюся скорость обучения. Мы могли бы также использовать оптимизатор Stochastic Gradient Descent ('sgd'), но он медленнее, чем RMSprop.
Метрическая функция «точность» используется для оценки производительности нашей модели. Эта метрическая функция аналогична функции потерь, за исключением того, что результаты оценки метрики не используются при обучении модели (только для оценки).
Для того, чтобы оптимизатор сходится быстрее и ближе всего к глобальному минимуму функции потерь, я использовал метод отжига скорости обучения (LR).
LR - это шаг, с помощью которого оптимизатор проходит через «ландшафт потерь». Чем выше LR, тем больше ступени и тем быстрее сходимость. Однако выборка очень плохая с высоким LR, и оптимизатор, вероятно, может попасть в локальные минимумы.
Лучше иметь снижающуюся скорость обучения во время обучения, чтобы эффективно достичь глобального минимума функции потерь.
Чтобы сохранить преимущество быстрого времени вычислений при высоком LR, я динамически уменьшал LR каждые X шагов (эпох) в зависимости от необходимости (когда точность не повышается).
С помощью функции ReduceLROnPlateau из Keras.callbacks я выбираю уменьшение LR вдвое, если точность не улучшается после 3 эпох.
Комментарии
Отправить комментарий