如何在Tensorflow中将字符串张量转换为python字符串?

时间:2017-07-21 21:10:24

标签: tensorflow

以下代码是.mat文件的批处理数据提供程序,但在运行时遇到以下问题:

    TypeError: expected str, bytes or os.PathLike object, not FIFOQueue

代码是:

    import numpy as np
    import tensorflow as tf
    from tensorflow.python.framework import ops
    from tensorflow.python.framework import dtypes
    import h5py

    def Reader(filename):
        with h5py.File(filename, 'r') as f:
            image = np.transpose(np.array(f.get('patch_x'), dtype=np.float32))
            label = np.transpose(np.array(f.get('patch_y'), dtype=np.float32))
        image = ops.convert_to_tensor(image, dtype=dtypes.float32)
        label = ops.convert_to_tensor(label, dtype=dtypes.float32)

        return image, label

    def Inputs(filenames, batch_size, shuffle=True):
        filenames = ops.convert_to_tensor(filenames, dtype=dtypes.string)
        filename_queue = tf.train.string_input_producer(filenames, shuffle=shuffle)
        image, label = Reader(filename_queue)
        image = tf.cast(image, tf.float32)
        label = tf.cast(label, tf.float32)

        num_preprocess_threads = 4
        if shuffle:
            image_batch, label_batch = tf.train.shuffle_batch([image, label], batch_size=batch_size, num_threads=num_preprocess_threads, capacity=5*batch_size, min_after_dequeue=2*batch_size)
        else:
            image_batch, label_batch = tf.train.batch([image, label], batch_size=batch_size, num_threads=num_preprocess_threads, capacity=5*batch_size, min_after_dequeue=2*batch_size)
        return image_batch, label_batch

有谁知道如何轻松地将string张量转换为python string?谢谢。

更新1 : 使用filename.dequeue()时,错误信息为:

    TypeError: expected str, bytes or os.PathLike object, not Tensor

2 个答案:

答案 0 :(得分:0)

tf.train.string_input_producer()返回队列,而不是字符串。您必须使用Graph操作,它从此队列获取字符串张量并从磁盘读取文件。例如,您可以使用操作链:

image = tf.image.decode_jpeg(tf.read_file(filename_queue.dequeue()))

如果你有jpeg文件。

在TensorFlow 1.2中,有一个用于创建输入管道的新结构Dataset。我认为使用数据集代替队列是个好主意。

答案 1 :(得分:0)

要将字符串TensorFlow张量转换为Python字符串, 运行bytes.decode(string_tensor.numpy())