Распознавание символов по модели изображений сохраняется с точностью до 0% и потерями наносигналов - PullRequest
0 голосов
/ 29 августа 2018

Я пытаюсь построить нейронную сеть для идентификации и генерации строк, соответствующих символам, найденным на изображении (a-z, A-Z, 0-9).

Я использую набор данных Char74kFnt

Все мои поезда / тестовые изображения / метки являются массивами. Каждый из 62 классов персонажей имеет 1016 изображений. Таким образом, общее количество изображений составляет 62992. Я выбрал 75% набора данных для обучающих данных. Первоначально метки поезда / теста были самими символами, но это дало мне ошибки в значениях (например: Ошибка преобразования строки в плавающее число ' b '), поэтому я отобразил int (ord (x)) на метки. Мои данные поезда / теста отформатированы следующим образом в массиве numpy:

  • train & test_images.shape (x, 128,128), например: 128x128 размер изображения
  • Значения:

train & test_images (0: 1016,128,128) соответствует всем '0'

.

.

.

train & test_images (61976:, 128,128) соответствует всем 'z'

  • значения нормализованы для всех изображений (х / 255)
  • И эти изображения соответствуют размерам / соответствуют правильному индексу метки поезда и теста.

Моя проблема в том, что, когда я тренирую эту модель, я остаюсь с 0% точностью и нанопотерями (см. Код)

from Char74k import Char74kFntDataSet
import numpy as np
import tensorflow as tf
from tensorflow import keras

a=Char74kFntDataSet()


model = keras.Sequential([
    keras.layers.Flatten(input_shape=(128, 128)),
    keras.layers.Dense(120, activation=tf.nn.relu),
    keras.layers.Dense(62, activation=tf.nn.softmax)
])

model.compile(optimizer=tf.train.AdamOptimizer(),
              loss='sparse_categorical_crossentropy',
              metrics=['accuracy'])

model.fit(a.train_images, a.train_labels, epochs=2)

Возможно ли, что мой набор данных недостаточно велик? Или есть какая-то простая ошибка (неидеальный параметр, возможный неверный / неидеальный ввод данных и т. Д.) Или другая конкретная модель, которую я должен использовать вместо этого?

Следующий фрагмент командной строки показывает точность 0%:

Epoch 1/2
47244/47244 [==============================] - 43s 908us/step - loss: nan - acc: 0.0000e+00
Epoch 2/2
47244/47244 [==============================] - 28s 587us/step - loss: nan - acc: 0.0000e+00
15748/15748 [==============================] - 12s 749us/step
Test accuracy: 0.0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...