我正在使用tf.keras.utils.image_dataset_from_directory将我的图像加载到一个用于tensorflow 的数据集中。但是,我对它的工作原理感到困惑。我只是希望能够imshow数据集中的每一张图像。
data = tf.keras.utils.image_dataset_from_directory('/content/gdrive/MyDrive/Skyrmion Vision/testFiles/train/',batch_size=1,image_size=(171,256))
data_iterator = data.as_numpy_iterator()
batch = data_iterator.next()
batch[0].shape
for image in batch:
print(type(image))
这是我的尝试,但它只是显示2 numpy.ndarrays作为类型,我希望它将所有12个图像显示为numpy数组(数据集中只有12个图像)。
在图像进入tensorflow数据集中后,如何访问它们?
1条答案
按热度按时间deikduxw1#
您通过设置
batch_size=1
创建了批处理,每个批处理包含一个元素。因此,如果您这样做:
您只访问了一个图像,因为您的批处理中只有一个图像。要获取下一个批处理,也就是下一个图像,您可以再次调用
data_iterator.next()
。但是,如果您只想遍历数据集并打印图像,则可以执行以下操作:
当然,您也可以设置更高的
batch_size
值,以便一次访问更多的图像。如果要一次访问一个映像,您可以:
方法1(建议):迭代批处理以及批处理中的图像:
内部循环允许您分别访问批处理中的图像。使用
for batch_x, batch_y in data
,您可以获得两个数组,其中第一维是批处理中的样本数。因此,如果您添加一个内部循环,您可以迭代批处理中的元素。在这种情况下,只有一个元素,但该循环使该方法更加通用。**方法2:**使用索引访问批处理中的图像。
设置
batch_size=1
后,每个批处理只有一个图像。因此循环的每个batch_x
元素都是(1, 171, 256, 3)
形状的数组。假设您设置了batch_size=2
。这将为您提供(2, 171, 256, 3)
的batch_x
形状。此时,如果您想显示每个批处理的第二个(即索引1)图像,您可以通过直接索引图像来实现:方法
cv2_imshow
用于在Google Colab中显示图像。