gpt4 book ai didi

python - 如何使用从 TFRecords 读取的值作为 tf.reshape 的参数?

转载 作者:太空狗 更新时间:2023-10-29 21:49:16 25 4
gpt4 key购买 nike

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={
'image_raw': tf.FixedLenFeature([], tf.string),
'label': tf.FixedLenFeature([], tf.int64),
'height': tf.FixedLenFeature([], tf.int64),
'width': tf.FixedLenFeature([], tf.int64),
'depth': tf.FixedLenFeature([], tf.int64)
})
# height = tf.cast(features['height'],tf.int32)
image = tf.decode_raw(features['image_raw'], tf.uint8)
image = tf.reshape(image,[32, 32, 3])
image = tf.cast(image,tf.float32)
label = tf.cast(features['label'], tf.int32)
return image, label

我正在使用 TFRecord 来存储我的所有数据。函数 read_and_decode 来自 TensorFlow 提供的 TFRecords 示例。目前我通过预定义的值来 reshape :

image = tf.reshape(image,[32, 32, 3])

但是,我现在要使用的数据是不同维度的。例如,我可以有一个 [40, 30, 3] 的图像(缩放这不是一个选项,因为我不希望它被扭曲)。我想读入不同维度的数据,在数据扩充阶段使用random_crop来规避这个问题。我需要的是类似以下内容。

height = tf.cast(features['height'], tf.int32)
width = tf.cast(features['width'], tf.int32)
image = tf.reshape(image,[height, width, 3])

但是,我似乎无法找到一种方法来做到这一点。感谢您的帮助!

编辑:

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

image = tf.reshape(image, tf.pack([height, width, 3]))
image = tf.reshape(image, [32,32,3])

问题肯定出在这两行。硬编码变量有效,但使用 tf.pack() 的变量无效。

最佳答案

您非常接近找到一个可行的解决方案!现在没有自动的方法来为 TensorFlow 提供一个由张量和数字组成的列表并从中生成一个张量,tf.reshape()正在期待。答案是使用 tf.stack() ,它显式地获取 N 维张量列表(或可转换为张量的东西)并将它们打包成一个 (N+1) 维张量。

这意味着你可以写:

features = ...  # Parse from an example proto.
height = tf.cast(features['height'], tf.int32)
width = tf.cast(features['width'], tf.int32)

image = tf.reshape(image, tf.stack([height, width, 3]))

关于python - 如何使用从 TFRecords 读取的值作为 tf.reshape 的参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35620157/

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