如何从TensorFlow数据集地图功能输出列表?

时间:2018-07-04 02:15:56

标签: python tensorflow tensorflow-datasets

我使用Keras.Model.fit_generator时,我的数据集中的示例必须采用([feature_1, feature_2,...], labels)格式。为此,我将阅读.tfrecord s:

dataset = tf.data.TFRecordDataset(tf_records)
dataset = dataset.map(map_func=parser, num_parallel_calls=num_parallel_calls)
...

但是,我在使用map_func时遇到了困难:

def parser(record, training=True):
    context_features = {
        "labels": tf.VarLenFeature(tf.int64)
    }

    sequence_features = {
        "feature_1": tf.FixedLenSequenceFeature([], dtype=tf.string),
        "feature_2": tf.FixedLenSequenceFeature([], dtype=tf.string)
    }

    context_parse, sequence_parsed = tf.parse_single_sequence_example(record, context_features, sequence_features)

    X_feature_1 = tf.decode_raw(sequence_parsed["feature_1"], tf.uint8)
    X_feature_2 = tf.decode_raw(sequence_parsed["feature_2"], tf.uint8)
    y = tf.sparse_to_dense(context_parse["labels"].values, [3862], 1)

    return ([X_feature_1, X_feature_2], y)

如果我尝试如上所述使用列表来容纳[X_feature_1, X_feature_2],最终会出现以下错误:

AttributeError: 'list' object has no attribute 'get_shape'

如何传递包含列表的元组?

更新(解决方法):

因此,问题中的代码是生成器的一部分。我意识到,由于生成器只运行了一个张量流图(希望术语是正确的,我对此还是很陌生),所以我可以在最后进行转换:

 feature_1, feature_2, y = sess.run(next_el)
 yield [feature_1, feature_2], y

虽然可行,但我仍然可以在map函数中做到这一点。

0 个答案:

没有答案