Тестирование изображения подушки на модели Tensorflow, созданной из MNIST?

Я рассмотрел базовый пример на MNIST для начинающих ML, и они создали простой классификатор цифр из базы данных MNIST, что довольно круто.

У них есть код руководства: mnist_softmax. py, но они используют классификатор для собственных тестовых изображений. Я хочу попробовать это на своем собственном изображении, загруженном из Pillow.

Вот часть, которую я изменил:

  from PIL import Image

  # Test trained model
  img = Image.open("09.png").convert('L')
  data = np.ndarray.flatten(np.array(img))
  result = sess.run(tf.argmax(y,1), feed_dict={x: [data]})
  print (' '.join(map(str,result)))

Но это ошибки с:

ValueError: Cannot feed value of shape (1, 1568) for Tensor u'Placeholder:0', which has shape '(?, 784)'

Изображения, которые я использую, имеют размер 28x28:

введите здесь описание изображения

введите здесь описание изображения

Как 9 и 14 соответственно.

Возможно, я неправильно понимаю, как работает классификатор, поскольку я только начал читать несколько руководств по машинному обучению. Мой вопрос в том, как я могу загрузить эти изображения из Pillow в классификатор, чтобы классификатор определил правильные цифры?


EDIT: Основываясь на комментариях @sascha, я обновил код, но получаю неправильные результаты. Я попытался очистить изображение 9:

введите здесь описание изображения

Но теперь результат либо 7, либо 3.


person tempomax    schedule 06.12.2017    source источник
comment
Подсказка: 2352=28*28*3. Вы каким-то образом используете 3 канала (как в RGB). Force BW или Grayscale (1 бит против, например, 8 бит) 1-канальное чтение.   -  person sascha    schedule 06.12.2017
comment
@sascha Спасибо за подсказку. Я преобразовал в оттенки серого с помощью convert('LA') Pillow, и теперь я получаю сообщение об ошибке (1, 1568). Я изменил свой вопрос, чтобы отразить это изменение.   -  person tempomax    schedule 07.12.2017
comment
@sascha Извините, я снова напортачил. Я добавил альфу, когда не должен был. Удалив это, я получаю вывод, но 9 выходит как 7. Есть ли способ сделать его более точным?   -  person tempomax    schedule 07.12.2017
comment
(Да, это LA, и это неправильно). Нет смысла превращать 9 в 7. Откройте файл в графическом редакторе и сравните.   -  person sascha    schedule 07.12.2017
comment
@sascha Я открыл GIMP и попытался очистить изображение. 9 — это либо белые пиксели, либо черные пиксели. Но запуск программы теперь выводит 7 или 3. Я также добавил свое очищенное изображение в свой пост, если это поможет.   -  person tempomax    schedule 07.12.2017
comment
Итак, вы говорите: мой классификационный код, который я скопировал и использовал для своих собственных данных, сделал ошибку? Да ... конечно ... почему бы и нет ... Это совершенно не имеет отношения к этому вопросу (спрашивая, как использовать мои собственные изображения с точки зрения форм ввода-вывода / массива). Это тоже не научная оценка. Как точность? Все ли классификации ошибочны? и так далее... Если вы можете сформулировать хороший вопрос после научной оценки, вы можете это сделать. Но ожидайте некоторых отрицательных голосов, когда просто ссылаетесь на внешний код, который даже не был написан вами.   -  person sascha    schedule 07.12.2017
comment
@sascha Я не говорю, что код или классификация неверны ... Только то, что результат, который я вижу, неверен, и я не знаю, почему. Вероятно, из-за моего незнания предмета ОД; Я только приступил к изучению учебника, но лучше всего учусь, когда могу применить его к небольшому практическому примеру (в данном случае к нескольким изображениям, которые я создал). Поэтому я изменил исходный код из учебника. Я не совсем понимаю враждебность, но я думаю, что в настоящее время SO не предназначен для тех, кто только учится и может задать не очень хорошо информированный вопрос.   -  person tempomax    schedule 07.12.2017


Ответы (1)


Я вижу, что вы решили проблему несоответствия формы, преобразовав изображение в 1 канал. Теперь проблема в том, что ваш тестовый прогноз неверен. Таким образом, это объясняет, что ваша модель машинного обучения не справилась с этим тестовым случаем.

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

Поэтому ищите решения о том, как вы можете улучшить свою модель. Попробуйте сверточную нейронную сеть, увеличьте количество слоев, сборку и т. д.

Проверьте эту ссылку, где я написал простую модель CNN для распознавание цифр с точностью 99,45.

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

Надеюсь это поможет!

person janu777    schedule 07.12.2017