Как получить предсказанную метку из сверточной нейронной сети при классификации изображений

#python #tensorflow #machine-learning #conv-neural-network #predict

#python #тензорный поток #машинное обучение #conv-нейронная сеть #прогнозировать

Вопрос:

Я построил CIFAR-10 модель классификации изображений с Convolution Neural Net помощью or CNNs .
Модель полностью завершена и имеет точность около 59%, но моя проблема в том, как получить прогнозируемую метку из модели. он может предсказать эти классы (10):

 ['airplane', 'automobile', 'bird', 'cat', 'deer', 'dog', 'frog', 'horse', 'ship', 'truck']
  

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

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

 with tf.Session() as sess:
    sess.run(init)
    print(sess.run(tf.argmax(y_pred, 1), feed_dict={x:ch.test_images, y_true:ch.test_labels, hold_prob:1.0}))
    print(sess.run(tf.argmax(y_true, 1), feed_dict={x:ch.test_images, y_true:ch.test_labels, hold_prob:1.0}))
  

ВЫВОД:

 [0 0 0 ... 0 3 3]
[3 8 8 ... 5 1 7]
  

ТЕХНИЧЕСКИЕ ХАРАКТЕРИСТИКИ:
ВЕРСИЯ TENSORFLOW: 1.15.2
РЕДАКТОР: Google Colab
ОС: Windows 7

ССЫЛКА НА ФАЙЛ GOOGLE COLAB: https://drive.google.com/file/d/1NpYGWvo9bNG0SJsFJ6R3se46b1ovDUX8/view?usp=sharing
ПРИМЕЧАНИЕ: Ссылка устарела

Если вам нужна дополнительная информация или вы не хотите задавать какие-либо вопросы по этому вопросу, пожалуйста, дайте мне знать!

Ответ №1:

То, что вы получаете, — это indexes классы, то есть число, которым представлен каждый класс. В вашем примере 0 означает «самолет», 1 означает «автомобиль» и так далее.

Чтобы получить имена, вам просто нужно получить доступ к именам классов.

 classes=['airplane', 'automobile', 'bird', 'cat', 'deer', 'dog', 'frog', 'horse', 'ship', 'truck']
with tf.Session() as sess:
    sess.run(init)
    idxs = sess.run(tf.argmax(y_pred, 1), feed_dict={x:ch.test_images, y_true:ch.test_labels, hold_prob:1.0}))
    labels = [classes[idx] for idx in idxs]
    print(labels)
  

Комментарии:

1. Но @charlie возможно ли, что я получаю метку и изображение одновременно, в основном я имею в виду, что вверху я увижу исходное изображение, а внизу — предсказанную метку, возможно ли это?

2. Что вы имеете в виду? Вы имеете в виду с точки зрения визуализации? Если это так, конечно, вы можете использовать любую утилиту построения изображений, такую как matplotlib, а затем выполнить итерацию по изображениям и прогнозируемым меткам и добавить метку в качестве заголовка рисунка, что-то вроде: matplotlib.pyplot.imshow(image);matplotlib.pyplot.title(label)