Просто дайте мне код:
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.