如何修改代码以使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一样。 非常感谢你!
答案 0 :(得分:1)
我提出了一个解决方案,但我并不是这个解决方案。
target_dataset = target_dataset.map(lambda a, b: (a[0], a[1], b[0], b[1]))
但如果有人有更好的,那就太棒了!