Tensorflow之构建自己的图片数据集TFrecords的方法

以下是详细讲解如何构建自己的图片数据集TFrecords的方法:

什么是TFrecords?

TFrecords是Tensorflow官方推荐的一种数据格式,它将数据序列化为二进制文件,可以有效地减少使用内存的开销,提高数据读写的效率。在Tensorflow的实际应用中,TFrecords文件常用来存储大规模的数据集,比如图像数据集、语音数据集、文本数据集等。

构建自己的图片数据集TFrecords的方法

下面,我将详细讲解如何构建自己的图片数据集TFrecords的方法,包括以下几个步骤:

第一步,准备数据

首先,我们需要准备好图片数据集。在准备数据时,可以将图片数据集按照标签归类到不同的文件夹中,并为每个文件夹命名为对应的标签名。例如,我们下载了一个猫狗分类数据集,将猫的图片归类到一个名为“cat”的文件夹中,将狗的图片归类到一个名为“dog”的文件夹中。

第二步,将图片转换为TFrecords格式

第二步,我们将图片转换成TFrecords格式文件。可以使用Tensorflow提供的API来实现将图片转换为TFrecords文件的功能。以下是一个示例代码:

import tensorflow as tf
import os

# 定义函数,将单张图片转换为Example格式
def _image_to_example(image_path, label):
    with tf.io.gfile.GFile(image_path, 'rb') as f:
        image_data = f.read()
    example = tf.train.Example(features=tf.train.Features(feature={
        'image': tf.train.Feature(bytes_list=tf.train.BytesList(value=[image_data])),
        'label': tf.train.Feature(int64_list=tf.train.Int64List(value=[label]))
    }))
    return example

# 定义函数,将图片文件夹中的所有图片转换为TFrecords格式
def images_to_tfrecords(images_dir, output_file):
    image_extensions = ['.jpg', '.jpeg', '.png']   # 支持的图片格式
    labels = {'cat': 0, 'dog': 1}   # 标签名与标签值的对应关系
    with tf.io.TFRecordWriter(output_file) as writer:
        for label_name, label_value in labels.items():
            image_dir = os.path.join(images_dir, label_name)
            for image_filename in os.listdir(image_dir):
                if os.path.splitext(image_filename)[-1] not in image_extensions:
                    continue
                image_path = os.path.join(image_dir, image_filename)
                example = _image_to_example(image_path, label_value)
                writer.write(example.SerializeToString())

以上代码实现了将单张图片转换为Example格式的函数_image_to_example()和将图片文件夹中的所有图片转换为TFrecords格式的函数images_to_tfrecords()

在使用images_to_tfrecords()函数时,需要传入两个参数:

  • images_dir:包含图片文件夹路径的字符串。
  • output_file:生成的TFrecords文件名。

第三步,使用TFrecords进行数据读取

第三步,我们可以使用Tensorflow提供的Dataset API来读取并解析上一步生成的TFrecords文件。以下是一个示例代码:

import tensorflow as tf

# 定义函数,解析单个Example
def _parse_example_fn(example_proto):
    feature_to_type = {
        'image': tf.io.FixedLenFeature([], dtype=tf.string),
        'label': tf.io.FixedLenFeature([], dtype=tf.int64)
    }
    features = tf.io.parse_single_example(example_proto, feature_to_type)
    image = tf.io.decode_jpeg(features['image'])
    label = features['label']
    return {'image': image}, label

# 定义函数,读取TFrecords文件并返回Dataset
def read_tfrecords(tfrecords_file, image_size, batch_size):
    dataset = tf.data.TFRecordDataset(tfrecords_file)
    dataset = dataset.map(_parse_example_fn)
    dataset = dataset.map(lambda x, y: (tf.image.resize(x['image'], image_size), y))   # 图像缩放
    dataset = dataset.shuffle(buffer_size=batch_size*10)    # 打乱顺序
    dataset = dataset.batch(batch_size=batch_size, drop_remainder=True)    # 批次化
    dataset = dataset.prefetch(buffer_size=tf.data.experimental.AUTOTUNE)  # 预读取
    return dataset

以上代码实现了解析单个Example的函数_parse_example_fn()和读取TFrecords文件并返回Dataset的函数read_tfrecords()

在使用read_tfrecords()函数时,需要传入以下三个参数:

  • tfrecords_file:TFrecords文件名。
  • image_size:缩放后的图像尺寸。
  • batch_size:批次大小。

两个示例

示例一:将猫狗分类数据集转换为TFrecords格式

假设我们已经下载了一个猫狗分类数据集,将猫的图片归类到一个名为“cat”的文件夹中,将狗的图片归类到一个名为“dog”的文件夹中。我们将使用上面的代码,将该数据集的图片转换为TFrecords格式。

images_to_tfrecords('path/to/images/dir', 'cats_vs_dogs.tfrecords')

上面的代码将读取包含所有图片数据的文件夹,将所有JPEG和PNG格式的图片转换为TFrecords格式,并将它们写入名为“cats_vs_dogs.tfrecords”的文件中。

示例二:使用TFrecords进行模型训练

假设我们已经将数据集转换为TFrecords格式,并准备好了模型训练代码。我们可以使用上面的代码构建一个TFrecords数据集,并将其输入到模型中进行训练。

# 构建TFrecords数据集
tfrecords_file = 'cats_vs_dogs.tfrecords'
image_size = (224, 224)
batch_size = 32
dataset = read_tfrecords(tfrecords_file, image_size, batch_size)

# 构建模型并进行训练
model = ...
model.fit(dataset, epochs=10)

以上代码使用read_tfrecords()函数构建了一个TFrecords数据集,并将其输入到模型中进行训练。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Tensorflow之构建自己的图片数据集TFrecords的方法 - Python技术站

(0)
上一篇 2023年5月18日
下一篇 2023年4月7日

相关文章

  • 用101000张图片实现图像识别(算法的实现和流程)-python-tensorflow框架

    一个月前,我将kaggle里面的food-101(101000张食物图片),数据包下载下来,想着实现图像识别,做了很长时间,然后自己电脑也带不动,不过好在是最后找各种方法实现出了识别,但是准确率真的非常低,我自己都分辨不出来到底是哪种食物,电脑怎么分的出来呢? 在上一篇博客中,我提到了数据的下载处理,然后不断地测试,然后优化代码,反正过程极其复杂,很容易出错…

    tensorflow 2023年4月8日
    00
  • windows7 64位安装tensorflow 1.4.0 CPU版本

    机器学习和深度学习真是新生代的宠儿,我也被安排来搞这个了,这下是真的从0开始了。看了几天ppt,想跑跑代码试试,装个环境。 都说tensorflow很火很好用,反正我什么也不懂,准备把这些框架一个一个试试,抹泪。 第一步:先安装了python 3.6.3 安装过程中,选勾安装pip   第二步:安装tensorflow 选择tensorflow的安装目录,打…

    2023年4月5日
    00
  • TensorFlow dataset.shuffle、batch、repeat的使用详解

    https://www.jb51.net/article/178976.htm 直接看代码例子,有详细注释!! 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 import tensorflow as tf import numpy as np …

    2023年4月8日
    00
  • TensorFlow(1):使用docker镜像搭建TensorFlow环境

    TensorFlow 随着AlphaGo的胜利也火了起来。 google又一次成为大家膜拜的大神了。google大神在引导这机器学习的方向。 同时docker 也是一个非常好的工具,大大的方便了开发环境的构建,之前需要配置安装。 看各种文档,现在只要一个 pull 一个 run 就可以把环境弄好了。 同时如果有写地方需要个性化定制,直接在docker的镜像上…

    2023年4月8日
    00
  • TensorFlow中tf.batch_matmul()的用法

    TensorFlow中tf.batch_matmul()的用法 在TensorFlow中,tf.batch_matmul()是一种高效的批量矩阵乘法运算方法。它可以同时对多个矩阵进行乘法运算,从而提高计算效率。以下是tf.batch_matmul()的详细讲解和两个示例说明。 用法 tf.batch_matmul()的用法如下: tf.batch_matmu…

    tensorflow 2023年5月16日
    00
  • 基于tensorflow加载部分层的方法

    在使用TensorFlow时,有时候我们只需要加载模型的部分层,而不是全部层。本文将详细讲解如何基于TensorFlow加载部分层,并提供两个示例说明。 示例1:加载部分层 以下是加载部分层的示例代码: import tensorflow as tf # 加载模型 saver = tf.train.import_meta_graph(‘model.ckpt.…

    tensorflow 2023年5月16日
    00
  • 使用Tensorflow object detection API——训练模型(Window10系统)

      【数据标注处理】   1、先将下载好的图片训练数据放在models-master/research/images文件夹下,并分别为训练数据和测试数据创建train、test两个文件夹。文件夹目录如下      2、下载 LabelImg 这款小软件对图片进行标注   3、下载完成后解压,直接运行。(注:软件目录最好不要存在中文,否则可能会报错)   4、…

    2023年4月8日
    00
  • Tensorflow&CNN:验证集预测与模型评价

    https://blog.csdn.net/sc2079/article/details/90480140   本科毕业设计终于告一段落了。特写博客记录做毕业设计(路面裂纹识别)期间的踩过的坑和收获。希望对你有用。   目前有:     1.Tensorflow&CNN:裂纹分类     2.Tensorflow&CNN:验证集预测与模型评价…

    2023年4月8日
    00
合作推广
合作推广
分享本页
返回顶部