Как подготовить свой набор изображений в Keras для использования глубоких нейронных сетей на Python

Posted by


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

Шаг 1: Загрузка изображений
Первым шагом является загрузка изображений, которые вы хотите использовать для обучения вашей нейронной сети. Вы можете использовать любые изображения, которые у вас есть, например, фотографии, скачанные изображения или изображения из набора данных. Для многих задач машинного обучения важным является наличие большого количества различных изображений для обучения.

Вы можете использовать библиотеку OpenCV для загрузки и работы с изображениями в Python. Например, чтобы загрузить изображение, вы можете использовать следующий код:

import cv2
image = cv2.imread('image.jpg')

Шаг 2: Преобразование изображений в массивы
Нейронные сети работают с числовыми данными, поэтому вам нужно преобразовать ваши изображения в числовые массивы. Для этого вы можете использовать функцию img_to_array из модуля preprocessing библиотеки Keras. Эта функция преобразует изображение в массив numpy.

from keras.preprocessing.image import img_to_array
array = img_to_array(image)

После преобразования изображения в массив numpy, вы должны нормализовать его значения. Обычно значения пикселей изображений находятся в диапазоне от 0 до 255. Для нормализации вы можете использовать следующий код:

normalized_array = array / 255.0

Повторите эти шаги для всех изображений в вашем наборе данных.

Шаг 3: Создание обучающего и тестового наборов
После загрузки и преобразования изображений в массивы, вам нужно разделить их на обучающий и тестовый наборы. Обучающий набор используется для обучения нейронной сети, а тестовый набор для проверки её качества.

Вы можете использовать функцию train_test_split из библиотеки sklearn для разделения набора данных на обучающий и тестовый наборы:

from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(images, labels, test_size=0.2)

Здесь X_train и X_test – обучающий и тестовый наборы изображений, а y_train и y_test – соответствующие им метки.

Шаг 4: Создание модели нейронной сети
После подготовки данных вы можете приступить к созданию модели нейронной сети. В Keras это можно сделать очень просто, используя последовательную модель.

from keras.models import Sequential
from keras.layers import Dense, Conv2D, MaxPooling2D, Flatten

model = Sequential()
model.add(Conv2D(32, (3, 3), activation='relu', input_shape=(img_width, img_height, 3)))
model.add(MaxPooling2D((2, 2)))
model.add(Conv2D(64, (3, 3), activation='relu'))
model.add(MaxPooling2D((2, 2)))
model.add(Conv2D(128, (3, 3), activation='relu'))
model.add(MaxPooling2D((2, 2)))
model.add(Flatten())
model.add(Dense(128, activation='relu'))
model.add(Dense(num_classes, activation='softmax'))

Здесь создается модель с несколькими сверточными и пулинг слоями, а также полносвязанными слоями. input_shape – это форма входных данных, activation – функция активации для каждого слоя, num_classes – количество классов для классификации.

Шаг 5: Обучение модели
После создания модели вы можете приступить к обучению нейронной сети на обучающем наборе данных:

model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])
model.fit(X_train, y_train, batch_size=32, epochs=10, validation_data=(X_test, y_test))

Здесь compile используется для компиляции модели с оптимизатором, функцией потерь и метрикой, fit – для обучения модели на обучающем наборе в течение нескольких эпох.

Шаг 6: Оценка модели
После завершения обучения модели вы можете оценить её качество на тестовом наборе данных:

loss, accuracy = model.evaluate(X_test, y_test)
print('Test loss:', loss)
print('Test accuracy:', accuracy)

Это выведет потери и точность модели на тестовом наборе данных.

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

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

0 0 votes
Article Rating
27 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
@RusproClubs
1 month ago

A как можно было бы ранжировать с присвоением оценки? Например светлая собака, или темная с рейтингом от 0 до 100.

@denpanch3258
1 month ago

Андрей, не подскажите ли, пожалуйста, если разрешение изображения больше указанных нами параметров, картинки обрежутся самостоятельно, или же просто не подойдут по характеристик?

@TheManMadeSelf
1 month ago

Андрей, добрый день! Спасибо Вам за Ваши уроки. Это та база на которой очень удобно строить любые проекты. Все доходчиво, понятно и строго по делу.

@KaimanDoro
1 month ago

при замене binary_crossentropy на categorical_crossentropy возникает ошибка, вы в видео указали, что необходимо изменить данные на one hot encoding, но как это сделать?

@ОльгаПрохоренко-ц4с
1 month ago

Подскажите , в чем может быть дело, на тестовых данных показывает acc: 0.9 примерно, но когда прогоняешь картинку из трейн набора – нейронка не может ее правильно определить… *( я не пойму в чем загвоздка, по идее должна хотя бы примерно попадать в прогноз… но зачастую вообще рандомные предсказания. Где я накосячить мог.. ?

@igga2181
1 month ago

Здравствуйте, подскажите версии пакетов среды окружения (вылетает с ошибкой на model.fit). Спасибо

@ПриманкаТВ-о6ш
1 month ago

Названия самих фоток надеюсь не влияют особо ? Чтобы не нумеровать все фотки по порядку

@skillsforlive2900
1 month ago

почему у меня Val_loss ниже чем loss и тоже самое с акуратностью? 55s – loss: 0.1162 – accuracy: 0.9665 – val_loss: 0.0726 – val_accuracy: 0.9800 – 55s/epoch – 232ms/step

@JohnDoe-fv5cu
1 month ago

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

@Собственник-т3к
1 month ago

данные для проверки и данные для тестирования чем отличаются?

@MoRFaiR
1 month ago

Ваще не понятно как слои выбираются, почему там Conv2D/Activation/MaxPooling2D было 2 раза? Почему не 1 раз, не 12 раз, а 3?…

@sergo1217
1 month ago

А если класс один? Например я хочу узнать является ли изображение скриншотом.

@mathematical4972
1 month ago

Здравствуйте, подскажите пожалуйста, какие методы можно использовать при подготовке своего датасета для обнаружения объектов на изображении (в keras). Или допустим использование готового датасета (хотелось использовать MPII) ( как правильно импортировать эти изображения с метками). Не нашла, была ли эта информация у вас на канале? Спасибо

@модернкомбат-н6г
1 month ago

А как обучить капчу? Тоже как кот и собака? Только надо создать 26 директорий вместо 2??

@dimar2712
1 month ago

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

@peterkruglov7299
1 month ago

Андрей, спасибо Вам за курс! У меня к Вам 2 вопроса: 1. Проверочные данные. Можно ли на уровне keras указать какое количество из тренировочных данных будет браться для проверочных? Например, указать какой-либо процент. 2. Данные для тестирования. Зачем разбивать данные для тестирования на классы, если мы хотим проверить как работает сеть на данных, которые она не видела? Например, в соревновании kaggle, набор данных которого Вы используете в видео, набор для проверки не разбит на классы, а Вы этот набор разбиваете на классы из тренировочного. Заранее благодарен за Ваш ответ.

@Holstinin007
1 month ago

при обучении мы указали весь каталог, но не уточнили какая из картинок собака или кошка. Как тогда передать список ответов?

@РасулГумаров
1 month ago

Спасибо за уроки! Хочу знать ваше мнение, что вы можете сказать о resnet? Лучше чем vgg16?

@justparody3350
1 month ago

Здравствуйте. Скопировал код из ссылки. Поменял только пути на свои. Выдает no much file or directory c:\……..cat.0.jpg
Я уже столько всего перепробовал, чтобы исправить ошибку. Ничего не помогает. Все пути на латинице.

@АнастасияЛаптева-э3п
1 month ago

Добрый вечер, пытаюсь делать нейронные сети по Вашим урокам. Лучший материал в интернете, да и вообще единственный… Подскажите, пожалуйста, почему компилятор не хочет переваривать " model.fit_generator" (работаю в Visual Studio Code)