用tensorflow创建tfrecords格式的数据集

下面的代码是生成一个每个图片大小是227*227*1的tfrecord文件,label是这个类别的英文名。

原图片是256*256*3RGB型的.jpg文件,在制作数据集的时候由于对图片的颜色没有要求,所以为了节省空间,进行了灰度化处理。

import tensorflow as tf
import os
import sys
from PIL import Image
import numpy as np

# 数据集路径
TRAIN_DATASET_DIR = "E:/python文件/tensorflow_learn/MyNet/images/train/"
TEST_DATASET_DIR = "E:/python文件/tensorflow_learn/MyNet/images/test/"
# tfrecord文件存放路径
TFRECORD_DIR = "E:/python文件/tensorflow_learn/MyNet/images/"
# 类型名
classes = {"apple_scab", "black_rot", "cedar_apple_rust", "healthy"}

# 判断tfrecord文件是否存在
def _dataset_exists(tfrecord_dir):
    for split_name in [‘train‘, ‘test‘]:
        # 产生test.tfrecords和 train.tfrecords文件路径
        output_filename = os.path.join(tfrecord_dir, split_name+‘.tfrecords‘)
        if not tf.gfile.Exists(output_filename):
            return False
    return True

def int64_feature(values):
    if not isinstance(values, (tuple, list)):
        values = [values]
    return tf.train.Feature(int64_list=tf.train.Int64List(value=values))

def bytes_feature(values):
    return tf.train.Feature(bytes_list=tf.train.BytesList(value=[values]))

# 获取该类别的所有文件
def _get_filenames_and_classes(dataset_dir):
    photo_filename = []
    for filename in os.listdir(dataset_dir):
        # 获取文件路径
        path = os.path.join(dataset_dir, filename)
        photo_filename.append(path)
    return photo_filename

# 把数据转换为TFRecord格式
def _convert_dataset(split_name, dataset_dir):
    assert split_name in [‘train‘, ‘test‘]
    with tf.Session() as sess:
        output_filename = os.path.join(TFRECORD_DIR, split_name+‘.tfrecords‘)
        with tf.python_io.TFRecordWriter(output_filename) as tfrecord_writer:
            for index, name in enumerate(classes):
                if split_name == ‘train‘:
                    class_path = TRAIN_DATASET_DIR + name + ‘/‘
                else:
                    class_path = TEST_DATASET_DIR + name + ‘/‘
                filenames = _get_filenames_and_classes(class_path)
                for i, img_name in enumerate(filenames):
                    sys.stdout.write(‘\r>>%s %s  Convering image: %d/%d‘ % (split_name, name, i+1, len(filenames)))
                    print(str(img_name))
                    sys.stdout.flush()
                    image_data = Image.open(img_name)
                    image_data = image_data.resize((227, 227))
                    image_data = np.array(image_data.convert(‘L‘))  # 图片灰度化处理
                    img_raw = image_data.tobytes()
                    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=[index])),
                            }
                        )
                    )
                    tfrecord_writer.write(example.SerializeToString())
            # tfrecord_writer.close()

# 判断tfrecord文件是否存在
if _dataset_exists(TFRECORD_DIR):
    print("文件已存在")
else:
    # 数据转换
    _convert_dataset(‘test‘, TEST_DATASET_DIR)
    _convert_dataset(‘train‘, TRAIN_DATASET_DIR)
    print(‘生成tfrecord文件!‘)

  

原文地址:https://www.cnblogs.com/lyf98/p/11965256.html

时间: 2024-10-10 06:03:26

用tensorflow创建tfrecords格式的数据集的相关文章

在C#下使用TensorFlow.NET训练自己的数据集

在C#下使用TensorFlow.NET训练自己的数据集 今天,我结合代码来详细介绍如何使用 SciSharp STACK 的 TensorFlow.NET 来训练CNN模型,该模型主要实现 图像的分类 ,可以直接移植该代码在 CPU 或 GPU 下使用,并针对你们自己本地的图像数据集进行训练和推理.TensorFlow.NET是基于 .NET Standard 框架的完整实现的TensorFlow,可以支持 .NET Framework 或 .NET CORE , TensorFlow.NET

用 TensorFlow 创建自己的 Speech Recognizer

参考资料 源码请点:https://github.com/llSourcell/tensorf- 语音识别无处不在,siri,google,讯飞输入法,讯飞语记,智能家居,车,etc. 每天都在用的,很好奇它是怎么实现的,今天来看看这么便利的东东到底是什么样子呢. 进化史 最开始的 speech recognizer 只能识别 0-9 这几个数字,说别的单词是识别不了滴. 后来有一个叫做 DARPA 的梦想家 team 孜孜不倦地研究. 他们用 15000 个节点代表可能的发音,然后用暴力搜索

Android创建JSON格式数据

Android创建JSON格式数据 作为上一篇博客的补充,简单那讲解了一下Android创建JSON格式数据的小Demo. 1. 创建JSON格式数据 对于Android创建JSON格式数据,由于Android官方提供了相应了put(key, value)等方法,因此代码十分简单,如下所示: JSONObject jsonObject = new JSONObject(); JSONArray jsonArray = new JSONArray(); JSONObject object_1 =

简单创建json格式文件

简单创建json格式文件 核心就两点: addProperty 添加属性(也就是加键值对) add是添加 另外的object对象 然后直接toString()输出 核心代码如下; public class CreateJson { public static void main(String[] args) { JsonObject object= new JsonObject(); object.addProperty("cat", "it"); JsonArra

tensorflow读取jpg格式图片报错 ValueError: Only know how to handle extensions: ['png']; with Pillow installed matplotlib can handle more images

当运行mpimg.imread("img.jpg")时,spyder 出现如下错误: ValueError: Only know how to handle extensions: ['png']; with Pillow installed matplotlib can handle more images 解决办法就是  安装pillow即可 我是在anaconde里安装的很简单,执行如下步骤即可: tensorflow读取jpg格式图片报错 ValueError: Only kn

如何创建自解压格式的压缩包 [ 每周小技巧 12月27日 ] - 文末有彩蛋哟 ~

文:天析 项目责编:天析 项目说明:每周分享一个  [ 生活 / 学习 ]  小技巧,并于责编审核通过后于周四发布至博客或微信公众号! 本周小编给大家带来的第一个小技巧是创建自解压格式的压缩包,对于喜欢制作应用软件安装包的人来说,这是一个比较实用的小技巧,特别是对那些不会使用专门的“封装工具”的人来说,这是一个居家必备小技能! 话不多说,先上满满的干货! 这是要制作的安装包根目录 这个软件对于爱好刷机的人来说,想必是非常熟悉,被称之为“反向映射工具”,但他的功能远远不止如此,具体的大家自己去百度

XenServer创建EXT格式的SR的存储是为了支持Provisioning磁盘精简制备功能

xenserver默认安装到本地磁盘,本地磁盘被基于Linux的LVM所管理,在xenserver创建为LVM Typer的本地SR,xenserver在LVM上不支持Thin Provisioning磁盘精简制备功能,如果我们想使用Thin Provisioning功能需要将磁盘格式化为EXT3格式,创建EXT3 Typer的本地SR. EXT3 Typer的本地SR创建方法有两种: 1.在安装xenserver的时候勾选Enable thin provisioning,然后默认装完后本地磁盘

【TensorFlow/简单网络】MNIST数据集-softmax、全连接神经网络,卷积神经网络模型

初学tensorflow,参考了以下几篇博客: soft模型 tensorflow构建全连接神经网络 tensorflow构建卷积神经网络 tensorflow构建卷积神经网络 tensorflow构建CNN[待学习] 全连接+各种优化[待学习] BN层[待学习] 先解释以下MNIST数据集,训练数据集有55,000 条,即X为55,000 * 784的矩阵,那么Y为55,000 * 10的矩阵,每个图片是28像素*28像素,带有标签,Y为该图片的真实数字,即标签,每个图片10个数字,1所在位置

制作VOC格式的数据集(图像标注)

在进行深度学习训练时,需要创建自己的数据集,对图像中的目标区域进行标注. 工具:labelimg.exe,这个软件不知道是什么原因,打开闪退,所以最好还是使用github上的源码. 原作者的github:https://github.com/tzutalin/labelImg 这款工具是全图形界面,用Python和Qt写的,最牛的是其标注信息可以直接转化成为XML文件,与PASCAL VOC以及ImageNet用的XML是一样的. 由于我是在windows 进行的,所以只介绍windows上的过