Каковы слои использования в керас / Tensorflow - PullRequest
2 голосов
/ 03 марта 2020

Итак, я новичок в компьютерном зрении и не знаю, что делают слои в керасе. Какая польза от добавления слоев (плотный, Conv2D, et c) в керас? Что они добавляют к этому?

Ответы [ 3 ]

3 голосов
/ 04 марта 2020

Нейронная сеть Convolution имеет 4 основных этапа: свертка, объединение, выравнивание и полное соединение.

Conv2D(), Conv3D() и др. c. предназначен для извлечения объектов (это слой свертки).

Объединение слоев (MaxPool2D(), AvgPool2D() и т. Д. c) также предназначено для извлечения объектов (хотя и с другой операцией).

Сглаживающие слои (Flatten()) предназначены для преобразования извлеченной карты объектов в вектор перед подачей в слои соединений полностью (плотные слои).

Плотные слои предназначены для полностью подключенного шага в компьютерном зрении, который действует как классификатор (нейронная сеть классифицирует все извлеченные объекты из слоев свертки.)

Существуют также слои оптимизации, такие как Dropout() BatchNormalization() и др. c.

Для получения дополнительной информации просто откройте документацию keras . Если вы хотите начать изучать нейронную сеть Convolution, эта статья может помочь.

3 голосов
/ 04 марта 2020

Слой в Искусственной нейронной сети - это группа узлов, связанных друг с другом на определенной глубине c в Нейронной сети. Keras - это высокоуровневый API, используемый в NN-модулях, таких как TensorFlow или CNTK, для упрощения задач. Слой Keras состоит из 3 основных частей:

  1. Входной слой - который содержит необработанные данные
  2. Скрытый слой - где узлы слоя изучают некоторые аспекты необработанных данных, которые вводятся , Это похоже на уровни абстракции для формирования нейронной сети.
  3. Выходной слой - состоит из одного выхода, который в основном является одним узлом и может быть подвергнут классификации.

Керас, в целом состоит из множества различных типов слоев. Сверточный слой создает ядро, которое свернуто с входными данными в одном временном пространстве для получения группы выходных данных. Слои пула обеспечивают выборку карт объектов, упрощая элементы карты на участки. Max Pooling и Average Pooling - это часто используемые методы в слое Pool.

Другими обычно используемыми слоями в Keras являются слои Embedded, Noise и Core. Один NN-уровень может представлять только линейно разделимый метод. Большинство проблем прогнозирования сложны и требуют более одного слоя. Именно здесь требуется многоуровневая концепция.

Я думаю, что я проясню ваши сомнения и любые другие вопросы, которые вы можете увидеть на https://www.tensorflow.org/api_docs/python/tf/keras

1 голос
/ 30 марта 2020

Нейронные сети - отличный инструмент для автоматизации задач классификации. Однако, когда речь идет о компьютерном зрении, объем входных данных слишком велик, чтобы его можно было эффективно обрабатывать с помощью простых нейронных сетей.

Чтобы уменьшить нагрузку на сеть, ваши данные должны быть предварительно обработаны и определенные функции должны быть идентифицированы. Чтобы найти элементы в изображениях, мы можем использовать определенные фильтры (например, распознавание границ), которые выделят основные функции, необходимые для классификации. Опять же, количество фильтров, необходимых для классификации одного изображения, слишком велико, и, следовательно, выбор этих фильтров должен быть автоматизирован.

Вот где приходит сверточный слой .

Мы используем сверточный слой для генерации нескольких случайных (сначала) фильтров, которые будут выделять определенные элементы изображения. Пока сеть обучается, эти фильтры оптимизированы для лучшей работы по выделению функций.

В Tensorflow мы используем Conv2D(), чтобы добавить один из этих слоев. Пример параметров: Conv2D(64, 3, activation='relu'). 64 обозначает количество используемых фильтров, 3 обозначает размер фильтров (в данном случае 3x3), а активация = 'relu' обозначает функцию активации

после сверточного слоя мы используем слой пула , чтобы дополнительно выделить элементы, созданные предыдущим сверточным слоем. В Tensorflow это обычно делается с MaxPooling2D(), который берет отфильтрованное изображение и применяет слой 2x2 (по умолчанию) каждые 2 пикселя. Фильтр, применяемый MaxPooling, в основном ищет максимальное значение в этой области 2x2 и добавляет его в новое изображение.

Мы можем использовать этот набор сверточного слоя и объединяющих слоев несколько раз, чтобы сделать изображение более удобным для работы в сети.

После того, как мы закончили с этими слоями, нам нужно пропустить вывод в обычную ( Dense ) нейронную сеть.

Для этого нам сначала нужно сгладить данные изображения из 2D-тензора (матрицы) в 1D Тензор (Vector). Это можно сделать, вызвав метод Flatten().

Наконец, нам нужно добавить наши слои Dense , которые используются для обучения сглаженных данных. Мы делаем это по телефону Dense(). Примером параметров является Dense(64, activation='relu'), где 64 - число используемых нами узлов.

Вот пример структуры CNN, которую я недавно использовал:

# Build model
model = tf.keras.models.Sequential()

# Convolution and pooling layers
model.add(tf.keras.layers.Conv2D(64, 3, activation='relu', input_shape=(IMG_SIZE, IMG_SIZE, 1))) # Input layer
model.add(tf.keras.layers.MaxPooling2D())
model.add(tf.keras.layers.Conv2D(64, 3, activation='relu'))
model.add(tf.keras.layers.MaxPooling2D())

# Flattened layers
model.add(tf.keras.layers.Flatten())
# Dense layers
model.add(tf.keras.layers.Dense(64, activation='relu')) 
model.add(tf.keras.layers.Dense(2, activation='softmax')) # Output layer

Конечно, это сработало для Определенная проблема классификации, а также количество слоев и параметры метода различаются в зависимости от проблемы.

На канале Youtube The Coding Train есть очень полезное видео, объясняющее Сверточный и Объединение слой.

...