tensorflow 利用tfrecords文件制作数据集

2023-05-16

TensorFlow之tfrecords文件详细教程

制作数据集思路:
将训练数据和测试数据生成tfrecords文件  为什么呢? 这种文件以二进制进行存储,只占用一个内存块 对于大数据能够提高cpu效率

代码步骤
首先对数据进行处理 方便后面写入tfrecords文件
1:使用tf.python_io.TFRecordWriter('定义一个文件名')类 定义一个tfrecords 文件
2:将每一条样本数据按照相应的特征组织好,即将样本数据组织成Example的过程
3:将组织好的Example写入进tfrecords文件,并关闭tfrecords文件即可
import tensorflow  as tf
import numpy as np
from PIL import Image
import os

data_path = './data'
"""
制作数据集思路:
将训练数据和测试数据生成tfrecords文件  为什么呢? 这种文件以二进制进行存储,只占用一个内存块 对于大数据能够提高cpu效率
代码步骤
首先对数据进行处理 方便后面写入tfrecords文件
1:使用tf.python_io.TFRecordWriter('定义一个文件名')类 定义一个tfrecords 文件
2:将每一条样本数据按照相应的特征组织好,即将样本数据组织成Example的过程
3:将组织好的Example写入进tfrecords文件,并关闭tfrecords文件即可
"""


def write_tfrecord(tfRecordName, image_path, label_path):
    # 使用tf.python_io.TFRecordWriter类定义一个tfrecords 文件
    writer = tf.python_io.TFRecordWriter(tfRecordName)
    num_pic = 0
    # 文件内容为 第一行  图片名  label 第二行 图片名 label
    f = open(label_path, 'r')
    contents = f.readline()
    f.close()
    for content in contents:
        value = content.split()  # 以空格为分隔符,包含 \n
        img_path = image_path + value[0]
        img = Image.open(img_path)
        # 将图片转换为二进制流
        img_raw = img.tobytes()
        labels = [0] * 10  # 生成10列 0
        # 获取图片标签并标记
        labels[int(value[1])] = 1
        # 按照数据特征进行包装 参数features   tf.train.Features() 设置每一个特征
        # 它有三个可选的关键字参数,float_list、int64_list、byteslist 分别对应于取值为浮点数的特征、整数的特征、二进制数的特征。
        example = tf.train.Example(features=tf.train.Features(feature={
            'img_raw': tf.train.Feature(bytes_list=tf.train.BytesList(value=[img_raw])),
            'label': tf.train.Feature(int64_list=tf.train.Int64List(value=labels))
        }))
        # 把数据序列化成字符串处理
        writer.write(example.SerializeToString())
        num_pic += 1
        print('the number of pidture :', num_pic)
    writer.close()
    print('writer tfrecord successful')


def generate_tfRecord():
    isExists = os.path.exists(data_path)
    if not isExists:
        os.makedirs(data_path)
        print('the directory was created successfully ')
    else:
        print('directory already exists')


# tfrecords文件的读取
def read_tfRecord(tfRecord_path):
    # 文件从哪里来 tf.train.string_input_producer([tfrecords 文件名])
    filename_queue = tf.train.string_input_producer([tfRecord_path])
    # 创建reader 对象 用来对tfrecords 文件的读取
    reader = tf.TFRecordReader()
    _, serialized_example = reader.read(filename_queue)
    # 上面那个函数它返回的是(key,value)的元祖形式。上面的serialized_example是无法直接查看的,需要去按照特征进行解析

    # 把读出的每个样本保存在 serialized_example 中进行解序列化,标签和图片的
    # 键名应该和制作 tfrecords 的键名相同,
    features = tf.parse_single_example(serialized_example,
                                       features={
                                           'label': tf.FixedLenFeature([10], tf.int64),
                                           'img_raw': tf.FixedLenFeature([], tf.string)
                                       })
    # tf.decode_raw函数的意思是将原来编码为字符串类型的变量重新变回来,
    img = tf.decode_raw(features['imf_raw'], tf.uint8)
    img.set_shape([784])
    # 将转化为字符串的图像转换为无符号整型数据然后进行图像处理为 1行 数据 方便传入神经网络
    img = tf.cast(img, tf.float32) * (1./255)
    # 标签转化
    label = tf.cast(features['label', tf.float32])
    return img, label

def get_tfrecode(num, isTrain=True):
    img, label = read_tfRecord(tfRecord_path)
    # 随机读取一个batch 的数据
    # tf.train.shuffle_batch(
    # tensor                待乱序处理的列表中的样本 [img, label],
    # batch_size,           从队列中提取的新批量大小
    # capacity,             队列中元素的最大数量
    # min_after_dequeue,    出队后队列中的最小数量元素,用于确保元素的混合级别
    # num_threads=1,        排列 tensors 的线程数
    # seed=None,            用于队列内的随机洗牌
    # enqueue_many=False,   tensor 中的每个张量是否是一个例子
    # shapes=None,          每个示例的形状
    # allow_smaller_final_batch=False,   (可选)如果设置,该队列将在多个会话中以给定名称共享
    # shared_name=None,     (可选)如果设置,该队列将在多个会话中以给定名称共享
    # name=None)            操作的名称(可选)
    img_batch, label_batch = tf.train.shuffle_batch([img, label],
                                                    batch_size=num,
                                                    num_threads=2,
                                                    capacity=1000,
                                                    min_after_dequeue=700
                                                    )
    return img_batch, label_batch

def main():
    generate_tfRecord()


if __name__ == '__main__':
    main()

https://blog.csdn.net/qq_27825451/article/details/83301811

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

tensorflow 利用tfrecords文件制作数据集 的相关文章

随机推荐

  • mission planner飞行模式设置

    我采用的富斯i6遥控器 xff0c 可以设置三种飞行模式 飞行模式中有六种模式 xff0c 在哪三个通道设置会与遥控器对应呢 xff1f 首先在 遥控器校准 选 项观察切换遥控器 模式时 输出的pwm值 xff1a 三个值分别为1000 1
  • ArduPilot Tutorial(PDF版)及ArduPilot飞行模式介绍

    ArduPilot官方Tutorial PDF 2017 2 http download csdn net download xiaoshuai537 10262086 ArduPilot中有14种常用的模式 xff1a 依赖GPS的模式有
  • PX4飞行模式-多旋翼

    手动模式 xff08 1 xff09 ARCO xff1a 特技模式 遥控器输入被转换为横滚 俯仰和偏航速度 xff0c 当摇杆回中时飞行器不会保持平衡 xff0c 可以用于翻滚等特技飞行 xff08 2 xff09 RATTITUDE x
  • 《PID控制算法的C语言实现》学习笔记

    1 PID算法原理 如果偏差为0 xff0c 则比例环节不起作用 xff1b 积分环节主要是用来消除静差 xff0c 即系统稳定后输出值和设定值之间的差值 xff1b 微分环节则反映了偏差信号的变化规律 xff0c 根据偏差信号的变化趋势来
  • 跟我一起写Makefile(整理版)

    跟我一起写Makefile 陈皓 xff08 博客地址 xff1a http blog csdn net haoel article details 2886 xff09 整理的PDF文件 xff1a http download csdn
  • PX4 Makefile分析解读

    参考文章 xff1a PX4源码的Makefile详细理解 http blog csdn net linkcian article details 79152724 感谢原文作者 主要分析 make px4fmu v2 default编译流
  • CREO工程图学习笔记

    CREO工程图技术手册 学习笔记 1 小功能 不同窗口切换操作 xff1a 视图 激活 材料设置 xff1a 文件 准备 模型属性 2 视图创建 插入视图 xff1a 图纸上长按右键 插入普通视图插入投影视图 xff1a 选择母视图 xff
  • 操作系统清华向勇陈渝版笔记(七) 进程与线程 PCB TCB 进程挂起 用户线程 内核线程 轻量级进程 僵尸队列

    7 1 进程定义 OS系统从只能跑一个程序到能跑多个 进程可以描述程序的执行过程 进程 xff1a 一个具有一定独立功能的程序在一个数据集合上的一次动态执行过程 只有当一个程序被OS加载到内存中 xff0c cpu对其执行时 xff0c 这
  • 基于stm32F103HAL库+cubemx+freertos无感无刷电机BLDC控制程序开发

    基于stm32F103HAL库 43 cubemx 43 freertos无感无刷电机BLDC控制程序开发 最近在做一个舵机控制项目 xff0c 控制对象为大功率无感无刷电机 xff0c 网上搜遍了资源 xff0c 貌似这方面的资源真得十分
  • C++思路

    1 统计英文单词 在进行文章重复度检查时 xff0c 经常需要统计一段英文中的单词数量 xff0c 并找出长度最长的单词 设有如下定义 xff1a char str 500 编写程序 xff0c 通过利用cin getline str 50
  • 基于OpenCV构建停车场车位识别项目

    OpenCV是一个基于 xff08 开源 xff09 发行的跨平台计算机视觉库 xff0c 能实现图像处理和计算机视觉方面的很多通用算法 车位识别的图像处理过程如图所示 在python中设置完所有内容后 xff0c 最重要的依赖关系将是Op
  • 学生成绩管理系统-python

    乱写的成绩管理系统 派森 span class token comment 定义学生类型 姓名 学号 科目 span span class token keyword class span span class token class na
  • 11_3、Java集合之迭代器Iterator接口

    一 引入 Iterator对象称为迭代器 设计模式的一种 xff0c 主要用于遍历 Collection 集合中的元素 GOF给迭代器模式的定义为 xff1a 提供一种方法访问一个容器 container 对象中各个元 素 xff0c 而又
  • 进程切换和进程调度的区别

    进程切换和进程调度的区别 调度是决定将系统资源分配给哪个进程 xff0c 进程切换是实际分配系统资源 另外需要注意进程切换一定会产生中断 xff0c 进行处理器模式切换 xff0c 即从用户态进入内核态 xff0c 之后又回到用户态 xff
  • 树莓派3b+安装ubuntu server,安装mysql

    1 下载镜像 http cdimage ubuntu com ubuntu releases 18 04 5 release ubuntu 18 04 5 preinstalled server arm64 43 raspi3 img xz
  • 【GVINS初体验】

    在Ubuntu18 04下跑通GVINS GVINS介绍 环境配置 1 C 11编译器 2 ROS 3 Eigen 4 Ceres 5 gnss comm Build GVINS 跑VINS啦 GVINS介绍 GVINS是一个基于非线性优化
  • 【OpenCV】基于Adaboost和Haar-like特征人脸识别

    毕设算是告一段落 xff0c 里面用了一点点人脸识别 xff0c 其实完全是OpenCV自带的 xff0c 源自两篇论文 xff1a P Viola and M Jones Rapid object detection using a bo
  • Jetson Tx2上跑MYNT_EYE的ORB SLAM示例

    愁呀 xff0c 按照官网的说明文档 xff0c 好长时间郁闷在跑不起来 每次都是在加载词袋时报bad malloc 打开MYNT EYE ORB SLAM2 Sample Vocabulary ORBvoc txt词袋看见1082073行
  • 解决ST-LINK无法连接设备(解决不了你顺着网线来打我)

    问题分析 问题描述 在mdk中 xff0c 点击下载按钮提示找不到目标设备 xff0c 无法自动下载程序 原因猜想 单片机只有在停止状态下才可以下载程序 xff1f 猜想验证 如果让单片机处在停止状态 xff0c 是不是就能正常下载了呢 x
  • tensorflow 利用tfrecords文件制作数据集

    TensorFlow之tfrecords文件详细教程 制作数据集思路 xff1a 将训练数据和测试数据生成tfrecords文件 为什么呢 xff1f 这种文件以二进制进行存储 xff0c 只占用一个内存块 对于大数据能够提高cpu效率 代