tf.data API读取TFRecord文件

时间:2018-10-25 23:05:45

标签: tensorflow tfrecord

我正在尝试使用tf.data API读取TFRecord文件。

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

def train_input_fn():
    filenames = ["mytrain.tfrecords"]
    dataset = tf.data.TFRecordDataset(filenames)

    def parser(record):
        keys_to_features = {
            "image_data": tf.FixedLenFeature((), tf.string, default_value=""),
            "date_time": tf.FixedLenFeature((), tf.int64, default_value=""),
            "label": tf.FixedLenFeature((), tf.int64,
                                        default_value=tf.zeros([], dtype=tf.int64)),
        }
        parsed = tf.parse_single_example(record, keys_to_features)

        image = tf.decode_jpeg(parsed["image_data"])
        image = tf.reshape(image, [128, 128, 3])
        label = tf.cast(parsed["label"], tf.int32)

        return {"image_data": image, "date_time": parsed["date_time"]}, label

    dataset = dataset.map(parser)
    dataset = dataset.shuffle(buffer_size=10000)
    dataset = dataset.batch(32)
    dataset = dataset.repeat(1)
    iterator = dataset.make_one_shot_iterator()

    features, labels = iterator.get_next()
    return features, labels

output = train_input_fn()

init_op = tf.global_variables_initializer()

with tf.Session() as sess:
    sess.run(init_op)
    coord = tf.train.Coordinator()
    threads = tf.train.start_queue_runners(coord = coord)
    for i in range(230):
        image, label = sess.run(output)
        img = Image.fromarray(image, 'RGB')
        img.save(cwd+str(i) + '_''Label_'+str(l)+'.jpg')
        print(image, label)
    coord.request_stop()
    coord.join(threads)

回溯(最近通话最近):   文件“ E:/Tensorflow/Wenshan_Cai_Nanoletters/tf_data.py”,第34行,在     输出= train_input_fn()   train_input_fn中的文件“ E:/Tensorflow/Wenshan_Cai_Nanoletters/tf_data.py”,第25行 TypeError:预期为int64,取而代之的是类型为“ str”的

1 个答案:

答案 0 :(得分:0)

请注意错误日志中的TypeError: Expected int64, got '' of type 'str' instead。您的代码中有一个错误。

错误

在以下行中:

"date_time": tf.FixedLenFeature((), tf.int64, default_value=""),

tf.int64类型变量的默认值指定为字符串""

修复

因此,假设您的默认默认值为0,则应将行更改为:

"date_time": tf.FixedLenFeature((), tf.int64, default_value=0),

希望有帮助。