Keras категорическая кроссентропия обучения застрял, поместив все в одну категорию - PullRequest
0 голосов
/ 17 января 2020

Я следовал учебному пособию по тензорному потоку по классификации , но застрял с проблемой, заключающейся в том, что обучение застопорилось с моей обученной сетью в неоптимальном решении, помещающем все изображения в одну категорию ie. Моя первая мысль была о том, что это было связано с несбалансированным распределением обучающих картинок по категориям (, как здесь также предлагается ), поэтому я удалил достаточно обучающих картинок, чтобы в каждой категории оставалось одинаковое количество картинок. , Однако проблема не изменилась. Затем я попробовал разные функции потерь, разные метрики, разные оптимизаторы и разные структуры слоев моей модели без каких-либо улучшений. Моя модель все еще помещает все фотографии в одну категорию после тренировки. Любая идея приветствуется.

Вот одна из моделей, которые я попробовал:

        model = keras.Sequential([
            keras.layers.Flatten(input_shape=(PicHeight, PicWidth, 3)),
            keras.layers.Dense(64, activation='relu'),
            keras.layers.Dense(64, activation='relu'),
            keras.layers.Dense(32, activation='relu'),
            keras.layers.Dense(32, activation='relu'),
            keras.layers.Dense(8, activation='relu'),
            keras.layers.Dense(number_of_categories, activation='softmax')
        ])
        model.compile(optimizer='adam',
              loss='sparse_categorical_crossentropy',
              metrics=['accuracy'])

И это тренинг

Train on 101 samples
Epoch 1/16
101/101 [==============================] - 1s 11ms/sample - loss: 55.8119 - accuracy: 0.1584
Epoch 2/16
101/101 [==============================] - 1s 6ms/sample - loss: 232.9768 - accuracy: 0.1485
Epoch 3/16
101/101 [==============================] - 1s 6ms/sample - loss: 111.9690 - accuracy: 0.1584
Epoch 4/16
101/101 [==============================] - 1s 6ms/sample - loss: 72.1569 - accuracy: 0.1782
Epoch 5/16
101/101 [==============================] - 1s 6ms/sample - loss: 39.3051 - accuracy: 0.1386
Epoch 6/16
101/101 [==============================] - 1s 6ms/sample - loss: 2.6347 - accuracy: 0.0990
Epoch 7/16
101/101 [==============================] - 1s 6ms/sample - loss: 2.3318 - accuracy: 0.1683
Epoch 8/16
101/101 [==============================] - 1s 6ms/sample - loss: 2.5922 - accuracy: 0.2277
Epoch 9/16
101/101 [==============================] - 1s 6ms/sample - loss: 2.0848 - accuracy: 0.1485
Epoch 10/16
101/101 [==============================] - 1s 6ms/sample - loss: 1.9453 - accuracy: 0.1386
Epoch 11/16
101/101 [==============================] - 1s 6ms/sample - loss: 1.9453 - accuracy: 0.1386
Epoch 12/16
101/101 [==============================] - 1s 6ms/sample - loss: 1.9453 - accuracy: 0.1386
Epoch 13/16
101/101 [==============================] - 1s 6ms/sample - loss: 1.9452 - accuracy: 0.1386
Epoch 14/16
101/101 [==============================] - 1s 6ms/sample - loss: 1.9452 - accuracy: 0.1485
Epoch 15/16
101/101 [==============================] - 1s 6ms/sample - loss: 1.9452 - accuracy: 0.1485
Epoch 16/16
101/101 [==============================] - 1s 7ms/sample - loss: 1.9451 - accuracy: 0.1485
25/25 - 0s - loss: 1.9494 - accuracy: 0.1200

Данные тренинга имеют 7 категорий с 18 картинками.

1 Ответ

1 голос
/ 17 января 2020
  1. Не используйте так много слоев F C. Они не очень хороши в работе с картинками.
  2. Размер вашего набора данных явно слишком мал для глубокого изучения. Добавление дополнительных данных обучения или попытка традиционного машинного обучения, такого как SVM, LR.

Несбалансированные данные обучения не окажут такого влияния на производительность модели. Это действительно зависит от того, насколько несбалансированны ваши данные. Если оно меньше 15%, все будет хорошо. Вы можете определенно улучшить с помощью взвешенных потерь, перебалансировки, предварительной обработки для создания большего количества изображений и т. Д. c.

Если у вас достаточно тренировочных данных и размер изображения больше 20 * 20, попробуйте CNN.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...