python - 如何将从 image_dataset_from_directory 获得的数据集拆分为数据和标签?
问题描述
我正在尝试使用 Python 在 TensorFlow 中构建 CNN。我已将图像加载到数据集中,如下所示:
dataset = tf.keras.preprocessing.image_dataset_from_directory(
"train_data", shuffle=True, image_size=(578, 260),
batch_size=BATCH_SIZE)
但是,如果我想在这个数据集上使用 train_test_split 或 fit_resample,我需要将它分成数据和标签。我是 TensorFlow 新手,不知道该怎么做。非常感谢任何帮助。
解决方案
您可以使用该subset
参数将数据分隔为training
和validation
。
import tensorflow as tf
import pathlib
dataset_url = "https://storage.googleapis.com/download.tensorflow.org/example_images/flower_photos.tgz"
data_dir = tf.keras.utils.get_file('flower_photos', origin=dataset_url, untar=True)
data_dir = pathlib.Path(data_dir)
train_ds = tf.keras.utils.image_dataset_from_directory(
data_dir,
validation_split=0.2,
subset="training",
image_size=(256, 256),
seed=1,
batch_size=32)
val_ds = tf.keras.utils.image_dataset_from_directory(
data_dir,
validation_split=0.2,
subset="validation",
seed=1,
image_size=(256, 256),
batch_size=32)
for x, y in train_ds.take(1):
print('Image --> ', x.shape, 'Label --> ', y.shape)
Found 3670 files belonging to 5 classes.
Using 2936 files for training.
Found 3670 files belonging to 5 classes.
Using 734 files for validation.
Image --> (32, 256, 256, 3) Label --> (32,)
至于你的标签,根据文档:
“推断”(从目录结构生成标签)、无(无标签)或与目录中找到的图像文件数量相同大小的整数标签列表/元组。标签应根据图像文件路径的字母数字顺序排序(通过 Python 中的 os.walk(directory) 获得)。
所以只需尝试迭代train_ds
并查看它们是否存在。您还可以使用参数label_mode
来引用您拥有的标签类型并class_names
明确列出您的类。
如果您的类不平衡,您可以使用 的class_weights
参数model.fit(*)
。有关更多信息,请查看此帖子。
推荐阅读
- php - 如何在 laravel 中创建新的会话?
- amazon-web-services - 在 cloudformation Windows EC2 中标记 EBS 卷
- notion-api - Notion 中页面记录/属性中 `text` 属性的行为
- electron - //v8/BUILD.gn:503:30 处的电子构建错误:未定义的标识符
- java - PipedInputStream 与 TeeOutputStream 一起冻结应用程序,何时不读取?
- excel - 谷歌表格结果到表格
- node.js - AWS 参数存储访问从 EC2 实例 express js 项目创建的参数
- webrtc - 为什么 WebRTC 不能与对称 NAT 一起使用?
- android - Android Vitals 的不良行为阈值
- javascript - 为什么这不在语音频道中播放歌曲?