问题不大,代码有点长,求大神解答:tensorflow生成tfrecord文件运行不下去

运行结果如下:图片说明
完整代码如下:

 #验证集数量
_NUM_TEST = 100
#随机种子
_RANDOM_SEED = 0
#数据块
_NUM_SHARDS = 3
#数据集路径
DATASET_DIR = "C:/Users/ASUS/TF实战(炼石成金)/8-对谷歌inception-v3模型从头开始训练/slim/images/"
#标签文件名字
LABELS_FILENAME = r"C:\Users\ASUS\TF实战(炼石成金)\8-对谷歌inception-v3模型从头开始训练\slim\images\labels"

#定义tfrecord文件的路径+名字
def _get_dataset_filename(dataset_dir, split_name, shard_id):
    output_filename = 'image_%s_%05d-of-%05d.tfrecord' % (split_name, shard_id, _NUM_SHARDS)
    return os.path.join(dataset_dir, output_filename)

#判断tfrecord文件是否存在
def _dataset_exists(dataset_dir):
    for split_name in ['train', 'test']:
        for shard_id in range(_NUM_SHARDS):
            #定义tfrecord文件的路径+名字
            output_filename = _get_dataset_filename(dataset_dir, split_name, shard_id)
        if not tf.gfile.Exists(output_filename):
            return False
    return True

#获取所有文件以及分类
def _get_filenames_and_classes(dataset_dir):
    #数据所在路径目录
    directories = []
    #分类名称
    class_names = []
    for filename in os.listdir(dataset_dir): #os.listdir(dataset_dir)列出给出的路径下所有的文件夹或者文件名的名字
        #合并文件路径
        path = os.path.join(dataset_dir, filename)
        #判断该路径是否为目录
        if os.path.isdir(path):
            #加入数据目录
            directories.append(path)
            #加入类别名称
            class_names.append(filename)

    photo_filenames = []
    #循环每个分类的文件夹
    for directory in directories:
        for filename in os.listdir(directory):
            path = os.path.join(directory, filename)
            #把图片的路径加入图片列表
            photo_filenames.append(path)

    return photo_filenames, class_names

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 image_to_tfexample(image_data, image_format, class_id):
    #Abstract base class for protocol messages.
    return tf.train.Example(features=tf.train.Features(feature={
      'image/encoded': bytes_feature(image_data),
      'image/format': bytes_feature(image_format),
      'image/class/label': int64_feature(class_id),
    }))

def write_label_file(labels_to_class_names, dataset_dir,filename=LABELS_FILENAME):
    labels_filename = os.path.join(dataset_dir, filename)
    with tf.gfile.Open(labels_filename, 'w') as f:
        for label in labels_to_class_names:
            class_name = labels_to_class_names[label]
            f.write('%d:%s\n' % (label, class_name))

#把数据转为TFRecord格式
def _convert_dataset(split_name, filenames, class_names_to_ids, dataset_dir):
    assert split_name in ['train', 'test']
    #计算每个数据块有多少数据
    num_per_shard = int(len(filenames) / _NUM_SHARDS)
    with tf.Graph().as_default():
        with tf.Session() as sess:
            for shard_id in range(_NUM_SHARDS):
                #定义tfrecord文件的路径+名字
                output_filename = _get_dataset_filename(dataset_dir, split_name, shard_id)
                with tf.python_io.TFRecordWriter(output_filename) as tfrecord_writer:
                    #每一个数据块开始的位置
                    start_ndx = shard_id * num_per_shard
                    #每一个数据块最后的位置
                    end_ndx = min((shard_id+1) * num_per_shard, len(filenames))
                    for i in range(start_ndx, end_ndx):
                        try:
                            sys.stdout.write('\r>> Converting image %d/%d shard %d' % (i+1, len(filenames), shard_id))
                            sys.stdout.flush()
                            #读取图片
                            image_data = tf.gfile.FastGFile(filenames[i], 'r').read()
                            #获得图片的类别名称
                            #os.path.dirname(filenames[i])输出filenames[i]所在的绝对路径
                            #os.path.basename(path),返回path最后的文件名,这里是类别名称
                            class_name = os.path.basename(os.path.dirname(filenames[i]))
                            #找到类别名称对应的id
                            class_id = class_names_to_ids[class_name]
                            #生成tfrecord文件
                            example = image_to_tfexample(image_data, b'jpg', class_id)
                            tfrecord_writer.write(example.SerializeToString())
                        except IOError as e:
                            print("Could not read:",filenames[i])
                            print("Error:",e)
                            print("Skip it\n")

    sys.stdout.write('\n')
    sys.stdout.flush()


if __name__ == '__main__':
    #判断tfrecord文件是否存在
    if _dataset_exists(DATASET_DIR):
        print('tfcecord文件已存在')
    else:
        #获得所有图片以及分类
        photo_filenames, class_names = _get_filenames_and_classes(DATASET_DIR)
        #把分类转为字典格式,类似于{'house': 3, 'flower': 1, 'plane': 4, 'guitar': 2, 'animal': 0}
        class_names_to_ids = dict(zip(class_names, range(len(class_names))))

        #把数据切分为训练集和测试集
        random.seed(_RANDOM_SEED)
        random.shuffle(photo_filenames)
        training_filenames = photo_filenames[_NUM_TEST:]
        testing_filenames = photo_filenames[:_NUM_TEST]

        #数据转换
        _convert_dataset('train', training_filenames, class_names_to_ids, DATASET_DIR)
        _convert_dataset('test', testing_filenames, class_names_to_ids, DATASET_DIR)

        #输出labels文件
        labels_to_class_names = dict(zip(range(len(class_names)), class_names))
        write_label_file(labels_to_class_names, DATASET_DIR)
0

1个回答

0
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
能够利用tensorflow生成tfrecord文件
能够利用tensorflow生成tfrecord文件,为接下来的tensorflow的训练工作作准备
tensorflow-001 制作、读取tfrecord文件的程序
tfrecords文件是tensorflow规范的数据文件。TensorFlow提供了TFRecord的格式来统一存储数据,TFRecord格式是一种将图像数据和标签放在一起的二进制文件,能更好的利用内存,在tensorflow中快速的复制,移动,读取,存储 等等。    TFRecords文件包含了tf.train.Example 协议内存块(protocol buffer)(协议内存块包含了字...
tensorflow制作数据集之TFRecord
自己制作二进制的数据集
TensorFlow 学习(二) 制作自己的TFRecord数据集,读取,显示及代码详解
前言在跑通了官网的mnist和cifar10数据之后,笔者尝试着制作自己的数据集,并保存,读入,显示。 TensorFlow可以支持cifar10的数据格式, 也提供了标准的TFRecord 格式,而关于 tensorflow 读取数据, 官网提供了3中方法 1 Feeding: 在tensorflow程序运行的每一步, 用python代码在线提供数据 2 Reader : 在一个计算图(tf.
TensorFlow TFRecord数据集的生成与显示
TFRecord   TensorFlow提供了TFRecord的格式来统一存储数据,TFRecord格式是一种将图像数据和标签放在一起的二进制文件,能更好的利用内存,在tensorflow中快速的复制,移动,读取,存储 等等。   TFRecords文件包含了tf.train.Example 协议内存块(protocol buffer)(协议内存块包含了字段 Features)。我们可以写一
TensorFlow基础5:TFRecords文件的存储与读取讲解及代码实现
TensorFlow之TFRecords文件的存储与读取讲解及代码实现
tensorflow生成多个tfrecord文件
import tensorflow as tf from PIL import Image import matplotlib.pyplot as plt import numpy as np import os i = 0 j = 0 num_shards = 100#总共写入的文件个数 instances_per_shard = 2#每个文件中的数据个数 sess=tf.Interactive...
【Tensorflow】你可能无法回避的 TFRecord 文件格式详细讲解
如果你是 Tensorflow 的初学者,那么你或多或少在网络上别人的博客上见到过 TFRecord 的影子,但很多作者都没有很仔细地对它进行说明,这也许会让你感受到了苦恼。本文按照我自己的思路对此进行一番讲解,也许能够提供给你一些帮助。 TFRecord 是什么? TFRecord 是谷歌推荐的一种二进制文件格式,它可以将任何信息按照特定的格式转换成二进制。 TFRecord 的核心内容在...
Tensorflow 中TFRecord格式转换与读取
把csv格式文件转化为TFRecordTensorflow提供了TFRecord格式来存储数据,以下是将csv格式转化为TFRecord格式的代码import tensorflow as tf import pandas as pd import numpy as nptrain = pd.read_csv('train.csv')label = train['label'].values y_tr
Tensorflow中创建自己的TFRecord格式数据集
参考文献《TensorFlow实战Google深度学习框架》 TFRecord格式介绍TFRecord文件中的数据都是通过tf.train.Example Protocol Buffer格式(即二进制文件)存储,具体定义如下:message Example{ Features features = 1; }; message Features{ map<string,Feature>
Tensorflow:如何将图像与标签数据转化为tfRecord文件!
tensorflow中如果要对神经网络模型进行训练,需要把训练数据转换为tfrecord格式才能被读取,tensorflow的model文件里直接提供了相应的脚本文件在下面的文件夹中: cd tensorflow/models/research/object_detection/dataset_tools 其中包括: 1.create_coco_tf_record.py:注...
TensorFlow之tfrecords文件详细教程
  欢迎关注“勇敢AI”公众号,更多python学习、数据分析、机器学习、深度学习原创文章与大家分享,还有更多电子资源、教程、数据集下载。勇敢AI,一个专注于人工智能AI的公众号。 ================================================================================== 全文摘要 当前是数据爆炸的时代,深度...
用Tensorflow处理自己的数据:制作自己的TFRecords数据集
转载请注明作者和出处: http://blog.csdn.net/c406495762 运行平台: Windows Python版本: Python3.x IDE: Spyder前言   最近一直在研究深度学习,主要是针对卷积神经网络(CNN),接触过的数据集也有了几个,最经典的就是MNIST, CIFAR10/100, NOTMNIST, CATS_VS_DOGS 这几种,由于这几种是
Tensorflow建立与读取TFrecorder文件
Tensorflow建立与读取TFrecorder文件除了直接读取数据文件,比如csv和bin文件,tensorflow还可以建立一种自有格式的数据文件,称之为tfrecorder,这种文件储存类似于字典,调用方便,可以直接包含标签集。首先,要建立起tfrecorder文件,我这里选择了若干人脸图像数据,文件的组织形式为根目录/s+类别号/图片名称 基本思路是先遍历文件夹,使用PIL库读取文件,然
Tensorflow使用笔记(2): 如何构建TFRecords并进行Mini Batch训练
引言 前段时间在做一门课程的期末大作业的时候,用到了TensorFlow,构建了含有两层卷积层的神经网络去做 交通标志的识别,一开始使用 24x24 的图像作为输入(把数据集的图像都resize为24x24)后来感觉应该设计大一点会可靠一点,那就想把输入的图像都改为 64x64 的大小,相应修改了网络一些参数后,run的时候发现出问题了,我还以为是代码没有改好,仔细看一下提示信息:run out o
tensorflow将图片保存为tfrecord和tfrecord的读取
tensorflow官方提供了3种方法来读取数据: 预加载数据(preloaded data):在TensorFlow图中定义常量或变量来保存所有的数据,适用于数据量不太大的情况。 填充数据(feeding):通过Python产生数据,然后再把数据填充到后端。 从文件读取数据(reading from file):从文件中直接读取,然后通过队列管理器从文件中读取数据。 本文主要介绍第三种方法...
TFRecords文件的生成和读取(样例实现)
TFRecords文件的生成和读取(样例实现)
tensorflow基础学习:字符数字验证码写入tfrecord文件封装成类
今天分享一下我写的一个小小程序,基本可以满足数字+字符类型字符串写入tfrecord文件。还请多多指教! 简单说明:这个是数字+字符4位验证码的tfrecord生成代码,5位,6位的可以自行修改一下,也就一点代码。我因为有点晚了就先不改了,大家加油啦。 先做些准备工作。 所有字符的数据集,用于将字符转化为它的下标数字。 再存到tfrecord里面。以便于后面读取转化为one-hot编码使用。 ...
tensorflow使用猫狗大战数据库生成tfrecords数据
程序使用kaggle中的猫狗大战train data set,用来生成tfrecords数据。 原数据库共有25000张照片 使用原来的train数据库,然后分为train.tfrecords和test.tfrecords两个数据集。 train.tfrecords包含23000张照片,test.tfrecords包含另外2000张照片 代码块 代码块语法遵循标准markdown代码...
Tensorflow提取中间层特征npy文件并加工成tfrecord文件
提取不提取特征不重要,我的方法的出发点是将npy文件加工成tfrecord文件 加工成tfrecord文件 def _add_to_tfrecord(tfrecord_writer, split_name): &quot;&quot;&quot;Loads images and writes files to a TFRecord. Args: image_dir: The image directory where ...
TensorFlow学习(十一):保存TFRecord文件
更新: 2018.3.26 对于每个例子添加了详细的解释,方便理解. 做过kaggle竞赛的应该很熟悉.csv文件了,.csv文件非常方便,但是通常读取的时候,是一次性读取到内存里面的.要是内存小的话,就要想其他的办法了,那就变得很麻烦了. 或者有时候,从硬盘上面直接读取图片啊什么的,因为图片的文件格式,存放位置各种各样等等一些因素,要是想在训练阶段直接这么使用的话,就更加麻烦了.所...
tensorflow入门:TFRecordDataset变长数据的batch读取
在上一篇文章tensorflow入门:tfrecord 和tf.data.TFRecordDataset里,讲到了使用如何使用tf.data.TFRecordDatase来对tfrecord文件进行batch读取,即使用dataset的batch方法进行;但如果每条数据的长度不一样(常见于语音、视频、NLP等领域),则不能直接用batch方法获取数据,这时则有两个解决办法:1.在把数据写入tfre...
TensorFlow入门(十-I)tfrecord 固定维度数据读写
本例代码:https://github.com/yongyehuang/Tensorflow-Tutorial/tree/master/python/the_use_of_tfrecord 关于 tfrecord 的使用,分别介绍 tfrecord 进行三种不同类型数据的处理方法。 - 维度固定的 numpy 矩阵 - 可变长度的 序列 数据 - 图片数据 在 tf1.3 及以后版本中,推出了
Tensorflow生成自己的图片数据集TFrecords(支持多标签label)
Tensorflow生成自己的图片数据集TFrecords        尊重原创,转载请注明出处:https://blog.csdn.net/guyuealian/article/details/80857228        使用TensorFlow进行网络训练时,为了提高读取数据的效率,一般建议将训练数据转换为TFrecords格式。为了方面调用,本博客提供一个可通用,已经封装好的cre...
tensorflow中的TFRecord格式文件的写入和读取
在tensorflow中,TFRecord格式的文件是可以将样本和标签放在一起,是在模型之前的一个预处理步骤,这种方式可以很大的提高效率和节约运行的内存,这种格式对数据是不进行压缩的。 1.写入 import tensorflow as tf; image_raw_data = tf.gfile.FastGFile('/home/penglu/Desktop/11.jpg').read(
Tensorflow TFRecords及多线程训练详解
先修知识——protocol buffer protocol buffer的使用 将数据集转化成TFRecords形式 读取数据 TF多线程机制 参考 也可移步my github查看 先修知识——protocol buffer TF框架中多处使用了protocol buffer,protocol buffer全称Google Protocol Buffer,简称Proto...
TensorFlow学习实践(一):使用TFRecord格式数据和队列进行模型训练和预测
本文以mnist为例,介绍如何使用TFRecord格式数据和队列进行模型训练和预测。 参考: 1、cifar10 2、https://tensorflow.google.cn/guide/datasets TFRecord格式数据的制作参见将mnist数据转成原始图片数据再转成TFRecord格式 目录 一、输入数据的解析和预处理 二、定义模型 三、计算损失并定义训练操作 四、模...
TensorFlow制作自己的TFRecord数据集 读取、显示
第一准备图片:在try/        wetland/        wood/各十张图片。制作TFRECORD文件代码:import os import tensorflow as tf from PIL import Image #注意Image,后面会用到 import matplotlib.pyplot as plt import numpy as np cwd='F:/projec...
Tensorflow中使用tfrecord方式读取数据
前言本博客默认读者对神经网络与Tensorflow有一定了解,对其中的一些术语不再做具体解释。并且本博客主要以图片数据为例进行介绍,如有错误,敬请斧正。使用Tensorflow训练神经网络时,我们可以用多种方式来读取自己的数据。如果数据集比较小,而且内存足够大,可以选择直接将所有数据读进内存,然后每次取一个batch的数据出来。如果数据较多,可以每次直接从硬盘中进行读取,不过这种方式的读取效率就比较
TensorFlow数据集操作(使用slim和tfrecord)
在卷积神经网络中,输入的图像数据集都非常大,而且与其他数据不同,图像都需要以三维张量(height,width,channel)形式表示,这样使得神经网络读取数据非常麻烦。在TensorFlow框架中,有一种用的非常多的方法来处理数据集,就是tfrecord文件,它与TensorFlow的中层封装库slim搭配使用起来非常方便,下面我以DeepLabv3+中的数据处理代码为例解释一下该方法。 该数...
将文件夹图片生成TFRecord类型文件
使用TensorFlow训练和识别自己的图片数据集,需要将jpg等格式的图片转成tfrecord格式的文件。
tensorflow学习(9):TFRecord介绍和样例程序(附详细解读)
由于图像的亮度、对比度等属性对图像的影响是非常大的,相同物体在不同亮度、对比度下差别非常大,然而在很多图像识别问题中,这些因素都不应该影响最后的识别结果。因此,本文将介绍如何对图像数据处理进行预处理使训练得到的神经网络模型尽可能小的被无关因素影响。 由于来自实际问题的数据往往有很多格式和属性,我们将使用TFRecord格式来统一不同的原始数据格式,并更加有效的管理不同的属性。 一、TFRecord...
Tensorflow 学习笔记自制tfrecord数据集
   使用tensorflow 训练神经网络的时候,必须要有训练集和验证集.如果数据量比较小,而且内存足够大,那我们可以选择将所有的数据读进内存. 而如果数据量很大,我们可以用一种大家经常使用的方式存储,就是tfrecord  . 它是tensorflow官方推荐的一种较为高效的数据读取方式.它主要是依靠队列去完成的. 为什么要使用tfrecord保存数据? 如何自制tfrecord数据集(...
tensorflow数据读取——tfrecord形式
参考:https://blog.csdn.net/happyhorizion/article/details/77894055 tensorflow数据读取主要有3种: 1.供给数据:tensorflow运行的每步,让python来提供; 2.从文件读取数据:建立input pipline从文件中读取数据; 3.预加载数据:如数据不太大,可在程序中定义常量或变量来保存所有数据。 tens...
Tensorflow-制作与使用tfrecord数据集
引言   本次博文目的是记录下tfrecord数据集的制作与使用方式。(踩了无数坑OTZ)   这里贴上一个数据读取的官方教程:Tensorflow导入数据以及使用数据   接下来举个例子说明怎么用tfrecord,假设我要做个图片分类的任务。首先,我这里有一个txt文件,包含着所有图片的路径以及它们的标签。还有一个包含许多图片的文件夹。类似下图这样:   准备好了数据后,就可以制...
使用video2tfrecord 将视频文件生成tfrecord数据集
逛stackflow发现一个好用的库,虽然现在用不着,但是可以记下来,说不定有机会用呢。 Description 这个库能很容易的将RGB视频文件(如:avi,mp4)转换为用于神经网络训练的tensorflow tfrecords 文件格式。由于深度学习中gpu和内存都是稀缺资源,所以这个项目中也允许限制每个视频保存到tfrecord中的图片数,同样也可以全部保存下来。代码自动决定步长,...
从LabelImg建立TFRecord格式的训练样本
文章目录图像样本转化为TFRecord图像数据处理用OpenCV读取图像数据用TensorFlow读取图像数据TFRecord文件的数据读写方法TFRecord的写入TFRecord的读出LabelImg标注文件的格式与解析将LabelImg的标注及对应的图像文件保存为TFRecord验证 图像样本转化为TFRecord 图像数据处理 用OpenCV读取图像数据 用OpenCV读取图像数据的格式为...
tensorflow读取tfRecords文件,可批量读取,双输入
保存 import glob import cv2 import numpy as np import tensorflow as tf import sys # A function to Load images def load_image(addr): # read an image and resize to (224, 224) # cv2 load image...
tensorflow之读取jpg图像保存为tfrecord再读取
有了jpg读取的经验和tfrecord写入的经验之后,开始尝试把jpg图像写入到tfrecord,另外还想尝试从tfrecord文件读出jpg图像 上示例把jpg的图片的二进制以及长和宽的信息保存进tfrecord decode_jpeg_data = tf.placeholder(dtype=tf.string) decode_jpeg = tf.image.decode_jpeg(dec...
【TensorFlow】数据处理(将MNIST转为TFRecord)
项目已上传至 GitHub —— tfrecord 下载MNIST数据集 以下有两种下载方式,如果链接失效可以搜索网上的资源 官方下载地址(可能需要梯子) 百度网盘下载 密码: 84pb 下载之后将其放在 tfrecord/data 文件夹下,目录结构如下 tfrecord/ data/ train-images-idx3-ubyte.gz