tensorflow 显示mnist图像不需要整形?

7lrncoxx  于 2022-11-16  发布在  其他
关注(0)|答案(1)|浏览(93)

如果我想显示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()

为什么在第二个代码中不需要整形?

tkclm6bt

tkclm6bt1#

如果使用x_train[0]选择第一个图像,也不需要对第一个图像进行整形。访问数组的特定索引将删除形状的第一个元素。
因此,如果你有一个形状为(100,28,28)的numpy数组,并访问x_train[0],你会得到一个形状为(28,28)的数组,但如果你以x_train[:1]的形式访问它,你仍然有三维空间:〔一、二十八、二十八〕。
这样做是因为您也可以执行x_train[:2]并获取前两个图像,因此它需要一个维度来跟踪您选择了多少个图像。

相关问题