Найти в Дзене
ЦифроПроф

Классификация изображений. Построение и обучение нейронной сети

Для решения задачи множественной классификации товаров используют библиотеки изображений, так как текстовое описание не всегда соответствует требованиям задачи классификации: содержать некорректную информацию, их может быть слишком много и на разных языках. Цель: создать классификатор, который позволит определить категорию товара на сайте агрегатора. Задача 1 Посмотрите на данные. Мы уже загрузили выборки, разбили их на признаки и целевой признак. Выведите на экран размеры признаков в обеих выборках. Затем напечатайте значение целевого признака первого изображения из обучающей выборки. Само изображение выведите в чёрно-белом цвете. import matplotlib.pyplot as plt import numpy as np features_train = np.load('/datasets/fashion_mnist/train_features.npy') target_train = np.load('/datasets/fashion_mnist/train_target.npy') features_test = np.load('/datasets/fashion_mnist/test_features.npy') target_test = np.load('/datasets/fashion_mnist/test_target.npy') print("Обучающая:",features_train.sha
Фото из открытых источников
Фото из открытых источников

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

Цель: создать классификатор, который позволит определить категорию товара на сайте агрегатора.

Задача 1

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

Выведите на экран размеры признаков в обеих выборках. Затем напечатайте значение целевого признака первого изображения из обучающей выборки. Само изображение выведите в чёрно-белом цвете.

import matplotlib.pyplot as plt

import numpy as np

features_train = np.load('/datasets/fashion_mnist/train_features.npy')

target_train = np.load('/datasets/fashion_mnist/train_target.npy')

features_test = np.load('/datasets/fashion_mnist/test_features.npy')

target_test = np.load('/datasets/fashion_mnist/test_target.npy')

print("Обучающая:",features_train.shape)

print("Тестовая:", features_test.shape)

print("Класс первого изображения:", target_train[0])

plt.imshow(features_train[0], cmap='gray')

Задача 2

В полносвязных сетях подаваемые на вход объекты должны быть строками таблицы, а весь датасет — двумерной таблицей. Чтобы не было ошибки, преобразуйте датасет из трёхмерного массива в двумерную таблицу. Для этого вам понадобится метод np.array.reshape() (от англ. «изменить размер»).

Преобразуйте features_train так, чтобы в первом значении features_train.shape было количество объектов, а во втором — количество пикселей в изображении. Таким же способом измените features_test.

import matplotlib.pyplot as plt

import numpy as np

features_train = np.load('/datasets/fashion_mnist/train_features.npy')

target_train = np.load('/datasets/fashion_mnist/train_target.npy')

features_test = np.load('/datasets/fashion_mnist/test_features.npy')

target_test = np.load('/datasets/fashion_mnist/test_target.npy')

features_train = features_train.reshape(features_train.shape[0], 28 * 28)

features_test=features_test.reshape(features_test.shape[0], 28*28)

print("Обучающая:", features_train.shape)

print("Тестовая:", features_test.shape)

Задача 3

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

Вам понадобится:

  • Функция активации 'softmax';
  • Функция потерь 'sparse_categorical_crossentropy' (англ. «разрежённая категориальная кросс-энтропия»).

Слово sparse говорит о способе кодирования ответов. В задаче требуется просто номер класса, поэтому выбор пал на эту функцию потерь.

Когда ответы кодируются One-Hot-Encoding и классу 9 соответствует целый вектор [0, 0, 0, 0, 0, 0, 0, 0, 1], применяют categorical_crossentropy().

Обучите сеть на одной эпохе. Напечатайте прогресс обучения и значения точности на обучающей и тестовой выборках.

from tensorflow import keras

import matplotlib.pyplot as plt

import numpy as np

features_train = np.load('/datasets/fashion_mnist/train_features.npy')

target_train = np.load('/datasets/fashion_mnist/train_target.npy')

features_test = np.load('/datasets/fashion_mnist/test_features.npy')

target_test = np.load('/datasets/fashion_mnist/test_target.npy')

features_train = features_train.reshape(features_train.shape[0], 28 * 28)

features_test = features_test.reshape(features_test.shape[0], 28 * 28)

model = keras.models.Sequential()

model.add(keras.layers.Dense(10, activation='softmax', input_dim=features_train.shape[1]))

model.compile(loss='sparse_categorical_crossentropy',

optimizer='sgd',

metrics=['acc'])

model.fit(features_train, target_train, epochs=1, verbose=2,

validation_data=(features_test, target_test))