Tensorflow 训练自己的数据集(一)(数据直接导入到内存)

制作自己的训练集

下图是我们数据的存放格式,在data目录下有验证集与测试集分别对应iris_test, iris_train
这里写图片描述

为了向伟大的MNIST致敬,我们采用的数据名称格式和MNIST类似

classification_index.jpg

这里写图片描述

图像的index都是5的整数倍是因为我们选择测试集的原则是每5个样本,选择一个样本作为测试集,其余的作为训练集和验证集

生成这样数据的过程相对简单,如果有需要python代码的,可以给我发邮件,或者在我的github下载

至此,我们的训练集,测试集,验证集就生成成功了,之所以我们的文件夹只有训练集和测试集是因为我们在后续的训练过程中,会在训练集中分出一部分作为验证集,所以两者暂时合称为训练集


将数据集写入到Tensorflow中

1. 直接写入到队列中

<think>嗯,用户想在TensorFlow中导入JPG格式的图片数据集,我得想想怎么回答。首先,我需要回忆TensorFlow处理图片数据的常见方法。记得之前学过的,可能用tf.keras.preprocessing.image_dataset_from_directory,或者用tf.data.Dataset来处理自定义的数据流。 用户提到的引用里有几个例子,比如引用[2]和引用[4]提到了加载数据和生成数据集的方法。引用[2]中的代码是通过os.listdir遍历目录,然后分离图片路径和标签,再打乱数据。而引用[4]用了生成txt文件和npy文件来存储路径和标签。不过这些方法可能有些繁琐,现在TensorFlow有没有更简便的方式? 对了,TensorFlow 2.x推荐使用tf.keras的工具,比如image_dataset_from_directory,可以直接从目录加载图片,自动根据子目录分配标签。这可能适合大部分情况,特别是如果数据已经按照类别分好了文件夹。比如猫狗数据集的例子,每个类别个子文件夹,这样用起来很方便。这个在引用[1]里提到过,用户可能看过类似的教程。 但有些情况下,用户的数据可能没有按子目录分类,而是用其他方式存储标签,比如txt文件或者csv。这时候可能需要自定义数据加载,用tf.data.Dataset.from_generator或者tf.data.Dataset.list_files,然后解析每个文件路径,加载图片和标签。比如引用[2]中的方法,用os.listdir获取文件列表,然后处理文件名生成标签,再转换为TensorFlow数据集。 另外,预处理步骤也很重要,比如调整图片大小、归化像素值等。可能需要用到tf.image模块的函数,或者在生成数据集时用map方法应用预处理函数。引用[3]提到数据预处理包括reshape、缩放等,所以这部分需要详细说明。 用户可能还需要了解如何将数据集划分为训练集、验证集和测试集。可以用image_dataset_from_directory的subset参数,或者用take和skip方法分割数据集。引用[2]和引用[4]中的例子也有涉及数据集的划分。 还要注意性能优化,比如使用缓存和预加载数据,使用prefetch来提高训练效率。这部分可能在教程中容易被忽略,但对实际应用很重要。 总结下,回答应该分步骤,首先介绍使用内置函数快速导入,然后处理自定义结构的数据集,接着是预处理步骤,最后是数据集划分和性能优化。还要给出示例代码,让用户能直接参考。同时,生成相关问题,比如数据增强、处理不同结构的数据集、性能优化方法等,帮助用户深入理解。</think>在TensorFlow中导入JPG格式图片数据集可通过以下步骤实现,支持自动标签分配和高效数据流处理: ### 、使用Keras内置方法(适用于标准目录结构) 若数据集按类别分文件夹存储(如猫狗数据集),可直接使用`image_dataset_from_directory`: ```python import tensorflow as tf train_dir = "/path/to/train" # 每个子目录为个类别 val_dir = "/path/to/val" # 自动推断标签,默认图像大小(256,256) train_dataset = tf.keras.preprocessing.image_dataset_from_directory( train_dir, validation_split=0.2, subset="training", seed=123, image_size=(224, 224), batch_size=32 ) val_dataset = tf.keras.preprocessing.image_dataset_from_directory( train_dir, validation_split=0.2, subset="validation", seed=123, image_size=(224, 224), batch_size=32 ) ``` 此方法会自动将子目录名作为类别标签[^1]。 ### 二、自定义数据管道(适用于非标准结构) 当数据存储在单个目录且标签信息在外部文件时: 1. 创建路径-标签映射 ```python import os import numpy as np def load_file_paths(data_dir, label_file): with open(label_file) as f: lines = f.readlines() file_paths = [os.path.join(data_dir, line.split(',')[0]) for line in lines] labels = [int(line.split(',')[1]) for line in lines] return np.array(file_paths), np.array(labels) paths, labels = load_file_paths('/data/jpg_images', '/data/labels.txt') ``` 2. 构建TF Dataset ```python def decode_img(img_path): img = tf.io.read_file(img_path) img = tf.image.decode_jpeg(img, channels=3) return tf.image.resize(img, [224, 224]) dataset = tf.data.Dataset.from_tensor_slices((paths, labels)) dataset = dataset.map(lambda x,y: (decode_img(x), y), num_parallel_calls=tf.data.AUTOTUNE) ``` ### 三、数据预处理流程 ```python normalization_layer = tf.keras.layers.Rescaling(1./255) augmentation = tf.keras.Sequential([ tf.keras.layers.RandomFlip("horizontal"), tf.keras.layers.RandomRotation(0.1) ]) train_dataset = train_dataset.map( lambda x, y: (augmentation(x, training=True), y), num_parallel_calls=tf.data.AUTOTUNE ).map( lambda x, y: (normalization_layer(x), y), num_parallel_calls=tf.data.AUTOTUNE ).cache().prefetch(buffer_size=tf.data.AUTOTUNE) ``` 此流程实现数据增强与归化,提升模型泛化能力[^3]。 ### 四、数据集优化技巧 - 内存缓存:`.cache()` - 并行处理:`num_parallel_calls=tf.data.AUTOTUNE` - 预加载:`.prefetch(buffer_size=tf.data.AUTOTUNE)` ### 五、验证数据流 ```python for images, labels in train_dataset.take(1): print(f"图像维度: {images.shape}") print(f"标签维度: {labels.shape}") plt.imshow(images[0].numpy().astype("uint8")) plt.show() ``` 相关问题
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值