如果我想显示一个来自mnist数据集的图像,我需要使用以下代码将它从(1,28,28)重塑为(28,28):
import tensorflow as tf
import matplotlib.pyplot as plt
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
sample = x_train[:1].reshape((28,28))
plt.imshow(sample, cmap="gray")
plt.show()
但是,如果我想在同一个绘图中显示多个图像。我不需要用下面的代码重塑它们:
import tensorflow as tf
import matplotlib.pyplot as plt
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
plt.figure(figsize=(10,10))
for i in range(25):
plt.subplot(5,5,i+1)
plt.imshow(x_train[i])
plt.show()
为什么在第二个代码中不需要重塑?
如果您使用x_train[0]
选择第一张图像,则不需要在第一张图像中进行重塑。访问数组的特定索引将删除形状的第一个元素。
如果你有一个形状为(100,28,28)的numpy数组,并访问x_train[0]
,你将得到一个形状为(28,28)的数组。但是如果你用x_train[:1]
访问它,你仍然会有三个维度:(1,28,28)。
它这样做是因为您也可以执行x_train[:2]并获取前两张图像,因此它需要一个维度来跟踪您选择了多少张图像。