如何使用tensorflow数据集zip和字符串拆分函数来获得相同的结果?

时间:2017-12-06 07:19:55

标签: tensorflow

如何修改代码以使v1的结构与v2的结构相同?

import tensorflow as tf

a1_a2_dataset = tf.data.Dataset.from_tensor_slices(
    tf.constant(["c c a\ta b", "f e a g\tc c", "d\t", "c a\tb c"]))
label_reason_dataset = tf.data.Dataset.from_tensor_slices(
    tf.constant(["c c a\ta b", "f e a g\tc c", "d\t", "c a\tb c"]))
a1_a2_dataset = a1_a2_dataset.map(
    lambda src: (tf.string_split([src], delimiter='\t').values[0],
                 tf.string_split([src], delimiter='\t').values[1]))
label_reason_dataset = label_reason_dataset.map(
    lambda src: (tf.string_split([src], delimiter='\t').values[0],
                 tf.string_split([src], delimiter='\t').values[1]))

target_dataset = tf.data.Dataset.zip((a1_a2_dataset, label_reason_dataset))
sess = tf.InteractiveSession()
table_initializer = tf.tables_initializer()
sess.run(table_initializer)
value = target_dataset.make_one_shot_iterator().get_next()
v1 = sess.run(value)
print("v1 = ", type(v1), v1)

a1_dataset = tf.data.Dataset.from_tensor_slices(
    tf.constant(["c c a", "f e a g", "d", "c a"]))
a2_dataset = tf.data.Dataset.from_tensor_slices(
    tf.constant(["a b", "c c", "", "b c"]))
label_dataset = tf.data.Dataset.from_tensor_slices(
    tf.constant(["c c a", "f e a g", "d", "c a"]))
reason_dataset = tf.data.Dataset.from_tensor_slices(
    tf.constant(["a b", "c c", "", "b c"]))
target_dataset = tf.data.Dataset.zip((a1_dataset, a2_dataset, label_dataset, reason_dataset))
sess = tf.InteractiveSession()
table_initializer = tf.tables_initializer()
sess.run(table_initializer)
value = target_dataset.make_one_shot_iterator().get_next()
v2 = sess.run(value)
print("v2 = ", type(v2), v2)

目前,上面的测试代码给出了以下结果:

v1 =  <class 'tuple'> ((b'c c a', b'a b'), (b'c c a', b'a b'))
v2 =  <class 'tuple'> (b'c c a', b'a b', b'c c a', b'a b')

但是v1的结构需要像v2一样。 非常感谢你!

1 个答案:

答案 0 :(得分:1)

我提出了一个解决方案,但我并不是这个解决方案。

target_dataset = target_dataset.map(lambda a, b: (a[0], a[1], b[0], b[1]))

但如果有人有更好的,那就太棒了!