Среда, 15 Ноября 2023
Продолжаю изучать сверточные нейронные сети. В этот раз разберу подробнее из чего состоит бейс. 3 главных операции:
- Фильтер. Сама свертка
- Детект. Применение Релу чтобы убрать все что ниже нуля(неважные фичи неважны одинаково)
- Конденс. Чтобы меньшить размерность, тем самым сделать меньше ненужных пикселей, повысив эффективность обучения
Пример фильтра
from tensorflow import keras
from tensorflow.keras import layers
model = keras.Sequential([
layers.Conv2D(filters=64, kernel_size=3), # activation is None
# More layers follow
])
kernel_size - это размер кернела. Кернел это веса слоя-фильтра.
Фича мап - это взвещенная сумма пикселей картинки и слоя фильтра, то что получается после применения фильтр матрицы.
filters - количество фильтров которые мы хотим чтобы были применины к изображению.
Полезные ссылки:
Второе это детект. С помощью релу все отрицательные числа в получившимся тензоре заменяются нулями
model = keras.Sequential([
layers.Conv2D(filters=64, kernel_size=3, activation='relu')
# More layers follow
])
Третье это конденс. Иными словами цель сделать меньше ненужных данных, те которые стали нулями. Если мы уберем часть нулей, качество распознования ухидшиться из за того что у нас теперь меньше позиционных данных(это как смотреть на изображение с все большего и большего расстояния) но возрастет скорость обработки, так нужно будет обрабатывать меньше информации, меньше нейронов для нейронной сети. Это называется Maximum pooling, и его пример
from tensorflow import keras
from tensorflow.keras import layers
model = keras.Sequential([
layers.Conv2D(filters=64, kernel_size=3), # activation is None
layers.MaxPool2D(pool_size=2),
# More layers follow
])
Stride and Padding
from tensorflow import keras
from tensorflow.keras import layers
model = keras.Sequential([
layers.Conv2D(filters=64,
kernel_size=3,
strides=1,
padding='same',
activation='relu'),
layers.MaxPool2D(pool_size=2,
strides=1,
padding='same')
# More layers follow
])
strides - на сколько пикселей перемещаться при смене положения окна.
padding - что делать с краями изображения. Чтобы все пиксели вместились в окно и свернулись, нужно сделать либо рамку из нулей(padding='same'), либо не брать краевые пиксели(padding='valid').
Продолжаю дальше изучать сверточные сети