Почему plt.imshow() не отображает изображение?

Я новичок в keras, и когда я попытался запустить свою первую программу keras на моем Linux, что-то просто не пошло так, как я желаю. Вот мой код python:

import numpy as np
np.random.seed(123)
from keras.models import Sequential
from keras.layers import Dense, Dropout, Activation, Flatten
from keras.layers import Convolution2D, MaxPooling2D
from keras.utils import np_utils
from keras.datasets import mnist
(X_train,y_train),(X_test,y_test) = mnist.load_data()
print X_train.shape
from matplotlib import pyplot as plt
plt.imshow(X_train[0])

В последнем предложении ничего не отображается. Я скопировал эти коды из учебника без каких-либо изменений. И нет ничего плохого в бэкэнде matplotlib на моем компьютере. Я проверил это через код ниже.

import matplotlib.pyplot as plt

data = [[0, 0.25], [0.5, 0.75]]

fig, ax = plt.subplots()
im = ax.imshow(data, cmap=plt.get_cmap('hot'), interpolation='nearest',
               vmin=0, vmax=1)
fig.colorbar(im)
plt.show()

А потом у меня получилось такое изображение: введите описание изображения здесь


Более того, я могу получить X_train [0], и это кажется неправильным.
Так что же может быть причиной этого? Почему функция imshow() в моем первом коде ничего не отображала?

Ответ 1

Решение было таким же простым, как добавление plt.show() в конце фрагмента кода:

import numpy as np
np.random.seed(123)
from keras.models import Sequential
from keras.layers import Dense, Dropout, Activation, Flatten
from keras.layers import Convolution2D, MaxPooling2D
from keras.utils import np_utils
from keras.datasets import mnist
(X_train,y_train),(X_test,y_test) = mnist.load_data()
print X_train.shape
from matplotlib import pyplot as plt
plt.imshow(X_train[0])
plt.show()

Ответ 2

'plt.imshow' просто заканчивает рисовать картинку, а не печатать ее. Если вы хотите распечатать картинку, вам просто нужно добавить 'plt.show'.

Ответ 3

plt.imgshow отображает изображение на осях, но если вам нужно отобразить несколько изображений, вы используете show() чтобы закончить рисунок. Следующий пример показывает две цифры:

import numpy as np
from keras.datasets import mnist
(X_train,y_train),(X_test,y_test) = mnist.load_data()
from matplotlib import pyplot as plt
plt.imshow(X_train[0])
plt.show()
plt.imshow(X_train[1])
plt.show()

В Google Colab, если вы закомментируете метод show() из предыдущего примера, отобразится только одно изображение (последнее, связанное с X_train[1]).

Вот содержание из справки:

plt.show(*args, **kw)
        Display a figure.
        When running in ipython with its pylab mode, display all
        figures and return to the ipython prompt.

        In non-interactive mode, display all figures and block until
        the figures have been closed; in interactive mode it has no
        effect unless figures were created prior to a change from
        non-interactive to interactive mode (not recommended).  In
        that case it displays the figures but does not block.

        A single experimental keyword argument, *block*, may be
        set to True or False to override the blocking behavior
        described above.



plt.imshow(X, cmap=None, norm=None, aspect=None, interpolation=None, alpha=None, vmin=None, vmax=None, origin=None, extent=None, shape=None, filternorm=1, filterrad=4.0, imlim=None, resample=None, url=None, hold=None, data=None, **kwargs)
        Display an image on the axes.

Parameters
----------
X : array_like, shape (n, m) or (n, m, 3) or (n, m, 4)
    Display the image in 'X' to current axes.  'X' may be an
    array or a PIL image. If 'X' is an array, it
    can have the following shapes and types:

    - MxN -- values to be mapped (float or int)
    - MxNx3 -- RGB (float or uint8)
    - MxNx4 -- RGBA (float or uint8)

    The value for each component of MxNx3 and MxNx4 float arrays
    should be in the range 0.0 to 1.0. MxN arrays are mapped
    to colors based on the 'norm' (mapping scalar to scalar)
    and the 'cmap' (mapping the normed scalar to a color).

Ответ 4

plt.show() требуется после plt.imshow(***)