Проблема с отображением предсказанного изображения в Tensorflow mnist tutorial

#python #python-3.x #tensorflow #matplotlib

#python #python-3.x #tensorflow #matplotlib

Вопрос:

Я работаю с кодом из Tensorflow учебника для начинающих mnist (код ниже).

  import tensorflow as tf
 mnist = tf.keras.datasets.mnist

 (x_train, y_train),(x_test, y_test) = mnist.load_data()
 x_train, x_test = x_train / 255.0, x_test / 255.0

 model = tf.keras.models.Sequential([
   tf.keras.layers.Flatten(input_shape=(28, 28)),
   tf.keras.layers.Dense(512, activation=tf.nn.relu),
   tf.keras.layers.Dropout(0.2),
   tf.keras.layers.Dense(10, activation=tf.nn.softmax)
 ])
 model.compile(optimizer='adam',
               loss='sparse_categorical_crossentropy',
               metrics=['accuracy'])

 model.fit(x_train, y_train, epochs=5)
 model.evaluate(x_test, y_test)
  

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

  predictions = model.predict([x_test])
 print(np.argmax(predictions[0]))
  

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

  import matplotlib.pyplot as plt
 plt.imshow(x_test[0])
 plt.show()
  

Это не работает. Я не получаю сообщение об ошибке, оно просто не показывает изображение. Кроме того, если я попытаюсь добавить простой оператор печати после кода matplotlib, который также игнорируется и не будет напечатан. Есть идеи, что происходит?

Ответ №1:

Вы сообщаете, что .show() не работает должным образом с вашей текущей конфигурацией. Вместо вызова этого вы можете предпочесть это:

 plt.savefig('plot.png')
  

Вы можете использовать это с безголовым драйвером, если хотите:

 import matplotlib
matplotlib.use('Agg')
  

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

1. К сожалению, результат тот же. Это очень странно. Matplotlib отлично работает как с вашим решением, так и с plt.show(), если я удалю сегмент кода «предсказания» (в моем коде выше). В противном случае я ничего не получаю, ни ошибки, ни изображения. Я предполагаю, что программа выходит из строя, поскольку она не выполняет никакого другого кода либо ниже инструкций matplotlib. Я также заметил в консоли, что число в «In [3]: runfile»… возвращается к 1, когда я запускаю свой код. Однако, если я сохраню сегмент кода прогнозирования без matplotlib, все тоже будет в порядке..

2. Хм, может быть, графический процессор необходимо перезагрузить между использованием его для моделирования и использованием для отображения изображения? В любом случае вы захотите узнать, где происходит сбой. Попробуйте: $ gdb python mnist.py , затем run и bt для обратной трассировки.

3. Когда я запустил его через терминал, я получил это: OMP: Ошибка # 15: инициализация libiomp5.dylib, но обнаружил, что libiomp5.dylib уже инициализирован.

4. Что ж, это проливает свет, теперь мы приближаемся к основной причине. Проблема, по-видимому, заключается в установке нескольких копий / версий библиотеки. Согласно github.com/dmlc/xgboost/issues/1715 выполнение uninstall может быть полезным. Также conda install nomkl может быть актуальным.

5. Спасибо! Я нашел решение по вашей ссылке, и теперь оно работает нормально. По-видимому, это проблема с Mac OS. Нужно просто добавить следующие два утверждения в код, чтобы переопределить ошибку: import os os.environ[‘KMP_DUPLICATE_LIB_OK’]=’True’