python - Tensorflow:无法从 tfrecord 中提取文件名

标签 python string tensorflow machine-learning deep-learning

我已将图像、标签和文件名写入 tfrecords 文件。当我尝试解码文件时,无法将文件名从 tf.string 转换为字符串。

我编写的将其转换为 tfrecords 文件的代码:

num_batches = 6
batch_size = math.ceil(X_training.shape[0] / num_batches)

for i in range(num_batches):
    train_path = os.path.join("data","batch_" + str(i) + '.tfrecords')
    writer = tf.python_io.TFRecordWriter(train_path)
    start_row = i * batch_size
    end_row = start_row + batch_size - 1

    for idx in range(start_row, end_row):
        try:
            label = y_tr[idx]
            filename = train_filenames[idx].tostring()
            image = X_tr[idx]
            image_raw = image.tostring()
        except:
            continue

        example = tf.train.Example(
            features=tf.train.Features(
              feature={
                'label': _int64_feature(label),
                'filename': _bytes_feature(filename),
                'image': _bytes_feature(image_raw),
              }))

        serialized = example.SerializeToString()
        writer.write(serialized)

要读取和解码 tfrecords 文件,我有以下功能:

def read_and_decode_single_example(filenames):
    filename_queue = tf.train.string_input_producer(filenames)

    reader = tf.TFRecordReader()

    _, serialized_example = reader.read(filename_queue)
    features = tf.parse_single_example(
        serialized_example,
        features={
            'label': tf.FixedLenFeature([], tf.int64),
            'filename': tf.FixedLenFeature([], tf.string),
            'image': tf.FixedLenFeature([], tf.string)
        })


    label = features['label']
    image = tf.decode_raw(features['image'], tf.uint8)
    image = tf.reshape(image, [499, 499, 1])
    filename = features['filename']

    return label, image, filename

当我解码不同批处理时,返回的文件名如下所示:

b'P\x00\x00\x00_\x00\x00\x000\x00\x00\x000\x00\x00\x001\x00\x00\x004\x00\x00\x008\x00\x00\x00_\x00\x00\x00R\x00\x00\x00I\x00\x00\x00G\x00\x00\x00H\x00\x00\x00T\x00\x00\x00_\x00\x00\x00M\x00\x00\x00L\x00\x00\x00O\x00\x00\x00.\x00\x00\x00j\x00\x00\x00p\x00\x00\x00g\x00\x00\x00'

从 tf.string 解码时我做错了什么?

最佳答案

在字节串上调用 .decode().replace('\x00', '') 会生成“P_00148_RIGHT_MLO.jpg”。

在函数返回中添加解码和替换应该可以解决您的问题。

关于python - Tensorflow:无法从 tfrecord 中提取文件名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50721847/

相关文章:

python - Flask 教程 - 404 Not Found

python - 安装 "Sundials"以使用 Assimulo

python - 使用 bash 或 python 将路由器配置文件转换为 csv

python - 预测 tensorflow 模型

c++ - tensorflow :转置需要一个大小为 1 的 vector 。但输入(1)是一个大小为 2 的 vector

python - 是否有允许高效范围查询的 python 数据结构?

php - 使用php提取字符串的第一个单词

java - Java中变量值从String到Long的转换

c++ - 无法对包含字符串 C++ 的结构数组进行操作

java - 在 Spring Boot 应用程序中使用 python/tensorflow 进行人脸识别