![](/img/trans.png)
[英]How can I explore and modify the created dataset from tf.keras.preprocessing.image_dataset_from_directory()?
[英]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.