Просто дайте мне код:

from keras.preprocessing.image import ImageDataGenerator
from keras.models import Sequential
from keras.layers import Conv2D, MaxPool2D, Dense, Flatten
# create model
model = Sequential()
model.add(Conv2D(32, (5, 5), activation=”relu”, input_shape=(256, 256, 3)))
model.add(MaxPool2D(pool_size=(4, 4)))
model.add(Conv2D(32, (5, 5), activation=”relu”))
model.add(MaxPool2D(pool_size=(4, 4)))
model.add(Conv2D(64, (3, 3), activation=”relu”))
model.add(MaxPool2D())
model.add(Flatten())model.add(Dense(32, activation=”relu”))
model.add(Dense(16, activation=”relu”))
model.add(Dense(4, activation=”softmax”)) model.compile(optimizer=”adam”, loss=”categorical_crossentropy”, metrics=[“accuracy”]) 
# get data
train_gen = ImageDataGenerator(rotation_range=0.3, rescale=1/255, shear_range=0.2, zoom_range=0.2, horizontal_flip=True)
test_gen = ImageDataGenerator(rescale=1/255)
train_set = train_gen.flow_from_directory(“Dataset Fussbaler/Training Set”, batch_size=32)
test_set = test_gen.flow_from_directory(“Dataset Fussbaler/Test Set”, batch_size=32)
# train model
model.fit_generator(train_set, steps_per_epoch=1000, epochs=1, validation_data=test_set) 
model.save(“Keras_models/class_conv_v1”)

Привет мир! Я Пер.

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

Сверточная нейронная сеть

CNN — это нейронная сеть, оптимизированная для распознавания изображений. Он намного превосходит стандартную нейронную сеть и отвечает за многие достижения в области компьютерного зрения.

Как видите, эта сеть состоит из двух основных частей. Первая — это часть изучения функций, а вторая — классификация.

Часть изучения функций состоит из свертки, relu и слоя объединения. Слой обучения свертки применяет фильтр к изображению. Фильтр имеет размер и в одном слое много фильтров. Размер фильтра часто равен (3,3) или (5,5), а количество фильтров часто равно степени двойки.

Сверточная операция «движется» по изображению и умножает фильтр на часть изображения, к которой он применяется, а затем суммирует его. Благодаря этому размер изображения уменьшается. Это полезно, так как один фильтр свертки может искать глаза человека, а другой — нос, если вы хотите классифицировать человека.

Функция relu очень проста. Это функция активации, такая же, как сигмоидальная и тангенциальная. Он принимает максимум своего ввода и 0, а затем возвращает его.

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

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

Реализация

Сначала вам нужно установить Keras и Tensorflow. Просто посетите их домашние страницы и установите их.

from keras.preprocessing.image import ImageDataGenerator
from keras.models import Sequential
from keras.layers import Conv2D, MaxPool2D, Dense, Flatten
# create model
model = Sequential()
model.add(Conv2D(32, (5, 5), activation=”relu”, input_shape=(256, 256, 3)))
model.add(MaxPool2D(pool_size=(4, 4)))
model.add(Conv2D(32, (5, 5), activation=”relu”))
model.add(MaxPool2D(pool_size=(4, 4)))
model.add(Conv2D(64, (3, 3), activation=”relu”))
model.add(MaxPool2D())
model.add(Flatten())model.add(Dense(32, activation=”relu”))
model.add(Dense(16, activation=”relu”))
model.add(Dense(4, activation=”softmax”)) model.compile(optimizer=”adam”, loss=”categorical_crossentropy”, metrics=[“accuracy”])
# get data
train_gen = ImageDataGenerator(rotation_range=0.3, rescale=1/255, shear_range=0.2, zoom_range=0.2, horizontal_flip=True)
test_gen = ImageDataGenerator(rescale=1/255)
train_set = train_gen.flow_from_directory(“Dataset Fussbaler/Training Set”, batch_size=32)
test_set = test_gen.flow_from_directory(“Dataset Fussbaler/Test Set”, batch_size=32)
# train model
model.fit_generator(train_set, steps_per_epoch=1000, epochs=1, validation_data=test_set) 
model.save(“Keras_models/class_conv_v1”)

В первых 3 строках кода мы импортируем Keras. Мы импортируем ImageDataGenerator, чтобы легко импортировать данные из нашего набора данных. Затем мы импортируем последовательную модель, которая является нашей сетью и предоставляет простой способ добавления слоев и обучения. Затем мы импортируем нужные нам слои.

В строках 5–16 мы строим нашу модель. Начнем со сверточного слоя с 32 фильтрами 5 на 5. и следом за ним слой MaxPool с размером фильтра 4 на 4. Затем мы добавляем эту пару еще раз и добавляем еще одну комбинацию свертки и максимального объединения, только на этот раз с другими параметрами. Все эти параметры были выбраны случайным образом, и вы, вероятно, могли бы получить лучшие результаты, чем я, просто играя с ними. Затем мы добавляем раздел классификации с функцией активации softmax на внешнем уровне.

Мы используем оптимизатор Адама и категориальную функцию кросс-энтропийной стоимости.

В строках 21–25 мы получаем наши данные. Мы используем ImageDataGenerator. Наши изображения имеют формат RGB и имеют размер 256 на 256 пикселей. Чтобы узнать больше о ImageDataGenerators и вообще о функциях, используемых в этом руководстве, перейдите на keras.io.

Затем мы обучаем нашу сеть на основе нашего набора данных. Мы обучаем его на 1000 шагов, где он обучается на мини-партии, размером 32. Затем нам нужно просто сохранить его. Я использовал около 80 изображений на человека для обучения CNN. Футболистами, которых я использовал, были Криштиану Роналду, Тони Кроос, Лионель Месси, Томас Мюллер. После 1000 эпох я получил около 85% точности на обучающих данных и около 90% на проверочных данных.

Вывод

Чтобы улучшить эту модель, я бы предложил получить больше данных и поиграть с гиперпараметрами. Тем не менее, я думаю, что модель сработала довольно хорошо, несмотря на то, что у нее было мало обучающих данных и обучение проходило только 1000 шагов. Я рекомендую вам поиграть с этим кодом и протестировать его на ваших собственных данных.

PS: Это мой первый пост, и я еще в старшем школьном возрасте. Я был бы рад, если бы вы дали мне обратную связь по моему посту и поправили бы меня, если я сказал что-то не так.

Первоначально опубликовано на www.peerlator.com.