Точка знаний: модель последовательности Tensorflow и различные слои

TensorFlow
Точка знаний: модель последовательности Tensorflow и различные слои

"Это 4-й день моего участия в ноябрьском испытании обновлений, ознакомьтесь с подробностями события:Вызов последнего обновления 2021 г.".

1. Почему модели нейронных сетей?

Программирование исходит из жизни и выше жизни.

В жизни есть собака по кличке Ван Цай. В программировании также есть понятия классов и объектов: wangcai = Dog().

Это делается для того, чтобы соответствовать привычкам человеческого мышления и облегчить людям понимание и программирование.

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

Например, устанавливается модель распознавания рукописного текста, вводится рукописное изображение или траектория, и она может выводить распознанное число как «6».

Можно понять, что это набор конвейерного оборудования. Итак, на что похож трубопровод?

Во-первых, есть ввод, который состоит в том, чтобы поместить в него сырье.

原材料.gif

Затем по порядку, через несколько процессов, слой за слоем.

流水线.gif

Каждый уровень обработки имеет свою уникальную работу.

打标记.gif

Наконец, есть выход, который производит конечный продукт.

产出.gif

2. Обычно используемые слои в последовательности модели

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

2.1 Последовательная последовательность

Есть два способа построить модель через sequence Sequential:

# 方式一:一站式
model = tf.keras.models.Sequential([
    keras.layers.Flatten(),
    keras.layers.Dense(),
    keras.layers.Dropout(),
    keras.layers.Dense()
])
# 方式二:分步式
model = tf.keras.models.Sequential()
model.add(layers.Embedding())
model.add(layers.Bidirectional())
model.add(layers.Dense())

Что общего у обоих методов, так это черезSequentialЧтобы построить модель, модель будет иметь несколько слоев.

В качестве примера возьмем последовательность распознавания рукописных цифр:

model = tf.keras.models.Sequential([
    tf.keras.layers.Flatten(input_shape=(28,28)),
    tf.keras.layers.Dense(128, activation='relu'),
    tf.keras.layers.Dense(10, activation='softmax')
])

model.summary()

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

можно назватьmodel.summary()Распечатайте структуру:

Model: "sequential"
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
flatten (Flatten)            (None, 784)               0         
_________________________________________________________________
dense (Dense)                (None, 128)               100480    
_________________________________________________________________
dense_1 (Dense)              (None, 10)                1290      
_________________________________________________________________
  1. Первый слой вводит двумерные данные 28x28 и выводит одномерные данные размером 784.
  2. Второй слой принимает выходные данные первого слоя в качестве входных данных и выводит одномерные данные размером 128.
  3. Третий слой принимает выходные данные второго слоя в качестве входных данных и выводит одномерные данные размера 10.

По сути, двумерные данные 28x28 — это матрица ширины и высоты пиксельных значений картинки.

image.png

Процесс преобразования показан на следующем рисунке:

Расчетные данные 784 пикселей
Обобщается по 128 показателям
Вероятность 1%
Вероятность 1%
Вероятность 0
Вероятность 98%
Вероятность 0
Вероятность 0
Слой 1 — изображение 28x28
Второй слой — обработка значений пикселей
Третий слой - показатели оценки
0
1
...
6
...
9

Первый слой преобразуется в одномерный массив размером 784. После второго слоя он становится размером 128. Когда он достигает третьего слоя, он преобразуется в размер 10. Эти 10 представляют классификацию от 0 до 9 номеров, из которых число «6» составляет наибольшую долю классификации, поэтому результат распознавания равен «6».

Итак, этиЭтажЧто они из себя представляют и чем занимаются?

посмотри на кодtf.keras.layersВ начале показано, что это класс, и вот несколько общих слоев.

2.2 Плотный полносвязный слой

2021-11-22_231223.jpg

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

Китайский перевод Dense: плотный, неуклюжий. Глядя на схему строения на нем, он очень плотный и плотный.

Если говорить о неуклюжести, то на самом деле это не очень умно, это фиксированное вычисление, которое логически эквивалентно функции: out=Activation(Wx+bias).

  • W: Матрица m*n, веса и структура определены заранее, но значения обучены.
  • x: n-мерный вектор, является входом.
  • Активация: функция активации, которая устанавливает слой преобразования для линейного преобразования для решения нелинейных задач.
  • Предвзятость: термин смещения, который также обучается.
  • out: Конечный выходной m-мерный вектор.

Последнее изменение представляет собой линейное изменение плюс нелинейное изменение для получения результата.

Из эффекта это: ввод n-мерных данных и, наконец, вывод m-мерных данных.

2021-11-24_062137.jpg

Так же, как и при распознавании рукописных цифр, ввод представляет собой двумерный вектор 28x28, и после послойных изменений в конечном итоге выводятся 10 категорий.

Пример определения полносвязного слоя:Dense(10, activation='softmax')

  • Этот слой имеет выход 10 узлов, а также является входом следующего узла.
  • Функция активации использует softmax.

2.3 Сверточный слой Conv2D

Сверточные слои обычно используются при обработке изображений для поиска локальных особенностей изображений.

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

老鹰.jpg

Чтобы судить о том, включены ли эти два типа признаков, нам нужен маленький квадратик для перемещения по картинке.Этот маленький квадрат имеет цветные очки и будет специально искать крючок орлиного когтя.При столкновении с крюком мы особенно взволнован.Он отмечен как 1, и он отмечен как 0, не чувствуя, если он не встречается.

Этот квадратик и есть ядро ​​свертки, а операция пометки ядер свертки по одному на всем изображении называется операцией свертки.

卷积.gif

На приведенном выше рисунке имитируется операция свертки.

Используя ядро ​​свертки 3x3, помеченное на изображении 5x5, сдвинутое на две ячейки за раз (термин: шаг 2), в конечном итоге было сгенерировано самое правое изображение 2x2.

Если мы определим, что значение свертки больше 600, как орлиные когти, то после сканирования исходного изображения будет обнаружено, что есть 2 орлиных когтя.

Свертка может повторять том, и его можно снова накатить после окончания тома, что очень страшно.

Пример определения свертки:Conv2D(64, (3,3), activation='relu')

  • Размер ядра свёрточного слоя 3х3.
  • Есть 64 класса блоков свертки для сканирования.
  • Функция активации использует relu.

2.4 Сгладить

Этот слой самый простой для понимания. Это сведение нескольких измерений в одно измерение.

relu5.gif

В общем, это действует как переход от сверточных слоев к полносвязным слоям. Потому что картинка вообще двумерная, а классификация одномерная, и ее нужно преобразовать в определенное время в середине.

……
model.add(layers.Conv2D(64, (3,3), activation='relu'))
model.add(layers.Flatten())
model.add(layers.Dense(64, activation='relu'))
model.add(layers.Dense(10))
……

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

2.5 Слой объединения MaxPooling2D

Слой пула можно просто понимать как сжатие.

Для ИИ это могут быть дни или даже месяцы после обучения. Было бы здорово, если бы это сэкономило время, чтобы быстро пробовать и ошибаться и проверять новые идеи.

Итак, как сэкономить время? В дополнение к трате денег на увеличение конфигурации оборудования, сокращение объема вычислений данных также является эффективным способом.

Давайте посмотрим на картинку ниже.Хотя размеры слева и справа разные, они имеют одинаковые характеристики и являются одним и тем же типом изображения.

2021-11-24_222650.jpg

В настоящее время экономически выгоднее рассчитывать картинки с небольшими размерами, что позволяет сократить объем расчета в несколько раз.

Поэтому мы рассматриваем множество наборов данных изображений, которые очень маленькие и размытые, настолько упрощенные, что их едва можно распознать.

fashion-mnist-sprite.png

Однако картинки в нашей жизни на самом деле очень большие.

output_N1loMlbYHeiJ_0.png

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

Существует множество способов объединения, например, максимальное объединение, то есть требуется только максимальное значение в определенной области.

2021-11-24_224041.jpg

Другие включают средний пул, который должен брать среднее значение.

Определение слоя пула очень простое, аналогично сверточному слою, необходимо определить матрицу пула. НапримерMaxPooling2D((2,2))Он должен определить матрицу объединения 2x2.

См. пример объединения после свертки ниже.

model = models.Sequential()
model.add(layers.Conv2D(32,(3,3), activation='relu', input_shape=(32,32,1)))
model.add(layers.MaxPooling2D((2,2)))
model.summary()

По результатам печати было обнаружено, что изображение 32x32 становится изображением 30x30 после обработки ядром свертки 3x3 путем перемещения по 1 единице за раз, а затем путем объединения 2x2 30x30 становится 15x15.

conv2d (Conv2D)              (None, 30, 30, 32)        320       
_________________________________________________________________
max_pooling2d (MaxPooling2D) (None, 15, 15, 32)        0         
_________________________________________________________________

Выше приведены несколько слоев, которые часто появляются в последовательностях нейронных сетей.