gpt4 book ai didi

image-processing - 读写 tfrecords 二进制文件(类型不匹配)

转载 作者:行者123 更新时间:2023-12-04 12:48:55 24 4
gpt4 key购买 nike

您好,我正在尝试构建一个图像输入管道。我的预处理训练数据存储在我使用以下代码行创建的 tfrecords 文件中:

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

def _int64_feature(value):
return tf.train.Feature(int64_list=tf.train.Int64List(value=[value]))

..

img_raw = img.tostring()                                        # typeof(img) = np.Array with shape (50, 80) dtype float64
img_label_text_raw = str.encode(img_lable)
example = tf.train.Example(features=tf.train.Features(feature={
'height': _int64_feature(height), #heigth (integer)
'width': _int64_feature(width), #width (integer)
'depth': _int64_feature(depth), #num of rgb channels (integer)
'image_data': _bytes_feature(img_raw), #raw image data (byte string)
'label_text': _bytes_feature(img_label_text_raw), #raw image_lable_text (byte string)
'lable': _int64_feature(lable_txt_to_int[img_lable])})) #label index (integer)

writer.write(example.SerializeToString())

现在我尝试读取二进制数据以从中重建张量:

def read_and_decode(filename_queue):
reader = tf.TFRecordReader()
_, serialized_example = reader.read(filename_queue)

features = tf.parse_single_example(
serialized_example,
# Defaults are not specified since both keys are required.
features={
'label': tf.FixedLenFeature([], tf.int64),
'height': tf.FixedLenFeature([], tf.int64),
'width': tf.FixedLenFeature([], tf.int64),
'depth': tf.FixedLenFeature([], tf.int64),
'image_data': tf.FixedLenFeature([], tf.string)
})

label = features['label']
height = tf.cast(features['height'], tf.int64)
width = tf.cast(features['width'], tf.int64)
depth = tf.cast(features['depth'], tf.int64)

image_shape = tf.pack([height, width, depth])
image = tf.decode_raw(features['image_data'], tf.float64)
image = tf.reshape(image, image_shape)


images, labels = tf.train.shuffle_batch([image, label], batch_size=2,
capacity=30,
num_threads=1,
min_after_dequeue=10)
return images, labels

遗憾的是,这不起作用。我收到此错误消息:

ValueError: Tensor conversion requested dtype string for Tensor with dtype int64: 'Tensor("ParseSingleExample/Squeeze_label:0", shape=(), dtype=int64)' ...

TypeError: Input 'bytes' of 'DecodeRaw' Op has type int64 that does not match expected type of string.

有人可以给我提示如何解决这个问题吗?

提前致谢!

更新:“read_and_decode”的完整代码 list

@mmry 非常感谢。现在我的代码在洗牌时中断了。与:

ValueError: All shapes must be fully defined: [TensorShape([Dimension(None), Dimension(None), Dimension(None)]), TensorShape([])]

有什么建议吗?

最佳答案

无需在这一行中使用 tf.decode_raw() 操作:

label = tf.decode_raw(features['label'], tf.int64)

相反,您应该能够编写:

label = features['label']

tf.decode_raw() op 只接受 tf.string 张量,并将一些张量数据的二进制表示(作为可变长度字符串)转换为类型化表示(作为特定类型元素的向量)。但是,您已将特征 'label' 定义为具有 tf.int64 类型,因此如果您想将其用作 ,则无需转换该特征>tf.int64.

关于image-processing - 读写 tfrecords 二进制文件(类型不匹配),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41640860/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com