繁体   English   中英

无法将 tf.keras.preprocessing.image_dataset_from_directory 转换为 np.array

[英]Cannot convert tf.keras.preprocessing.image_dataset_from_directory to np.array

我正在尝试使用 CNN 创建图像分类 model。 为此,我正在使用tf.keras.preprocessing.image_dataset_from_directory function 读取数据。

这是代码:

train_ds = tf.keras.preprocessing.image_dataset_from_directory(data_dir_train,seed=123,validation_split = 0.2,subset = 'training',image_size=(img_height, img_width),batch_size=batch_size)

然后我试图在 np.array object 中转换数据集。 我的代码是

x_train = np.array(train_ds)

但是当我打印x_train时,我得到了

array(<BatchDataset shapes: ((None, 180, 180, 3), (None,)), types: (tf.float32, tf.int32)>, dtype=object)

object train_ds的形状为(2000,180,180,3) 我不确定我的代码有什么问题。

使用image_dataset_from_directory时:

... image_dataset_from_directory(main_directory, labels='inferred') 将返回一个tf.data.Dataset ,它会从子目录中生成批量图像...

获取所需数据的一种方法是使用take创建一个数据集,其中最多包含该数据集中的count 个元素。

import tensorflow as tf
import numpy as np

img = np.empty((6000,180,180,3), dtype=np.float32)
label = np.empty((6000,), dtype=np.int32)

train_ds = tf.data.Dataset.from_tensor_slices((img,label)).batch(2000)
print(train_ds) # <BatchDataset shapes: ((None, 180, 180, 3), (None,)), types: (tf.float32, tf.int32)>

for batch in train_ds.take(1):
    img_batch, label_batch = batch
    print(img_batch.shape) # (2000, 180, 180, 3)
    print(label_batch.shape) # (2000,)

根据您构建代码的方式,您甚至可能不需要转换为numpy.array ,因为tf.data fit数据集。

model.fit(
  train_ds,
  validation_data=val_ds,
  epochs=epochs
)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM