使用TFRecords在Tensorflow中读取和批处理序列数据

时间:2017-05-10 20:34:02

标签: python-3.x tensorflow batch-processing

您好我正在尝试使用tensorflow批量处理可变宽度的图像。 例如,我正在处理大小为50*245, 50*235, 50*265...and so on

的图像

我遵循了我在网上找到的基本管道,首先我使用tf.train.SequenceExample().序列化我的数据并将其写入我的tfrecord文件中我存储了不同宽度的图像,在我的情况下245, 235, 265 ...and so on和我的像素数据使用此代码。

    example=tf.train.SequenceExample()

    #First we store our image width in 'input_length' feature
    example.context.feature['input_length'].int64_list.value.append(sequence_length)

    feature_input=example.feature_lists.feature_list['input']

    #Then we store pixel values in 'input' feature (our sequential data)
    for pixel in image : 
        feature_input.feature.add().int64_list.value.append(pixel)

    #write in the TFRecord file
    writer.write(example.SerializeToString())

然后我们打开TFRecord文件并指定解析我们的顺序数据

#Definition of data parsing
context_features = {
            'input_length':tf.FixedLenFeature([],dtype=tf.int64)
}
sequence_features = {
            "input":tf.FixedLenSequenceFeature([50,],dtype=tf.int64,allow_missing=False),

}
#Now we parse the examples
length_parsed,sequence_parsed=tf.parse_single_sequence_example(
    serialized=serialized_data,
    context_features=context_features,
    sequence_features=sequence_features
)


input_lengths,input_data=tf.train.batch(
    tensors=[length_parsed['input_length'],sequence_parsed['input']],
    batch_size=1,
    dynamic_pad=True    
)

问题是动态填充似乎不起作用我得到形状的张量 (?,50)当我以为我会得到具有进入批次的最大张量形状的张量时(265,50) ....是否有人知道我做错了什么或者我没有说明批处理过程或任何上述过程? 被困在这5天了:/

1 个答案:

答案 0 :(得分:0)

我找到了解决方案......首先,我只将唯一的整数放入我的功能列表而不是"整数列表"我的例子。所以剧本不明白为什么突然间我正在寻找50个分量向量。