![a33ec35b8bd725468945049fce89c5d8.png](https://i-blog.csdnimg.cn/blog_migrate/033b4b346c527a8be65c58b0ec8e910f.png)
先说一说这个现象是什么.在自己学习tensorflow的tf.data的时候,发现开始使用的dataset,他的输出是对应的且先后的顺序对的上,然后又输入了一个,发现顺序的前后颠倒了。然后我又故意的把dataset1里面的数据的顺序反过来了作为dataset2,想着这次的结果应该是反过来的,但是并没有反过来,也如dataset1的一样。简直了,不懂,不懂。
代码先行:
import tensorflow as tf
import numpy as np
dataset = tf.data.Dataset.from_tensor_slices(
(np.array([1.0, 2.0, 3.0, 4.0, 5.0]), np.random.uniform(size=(5, 2)))
)
dataset1 = tf.data.Dataset.from_tensor_slices(
{
"a": np.array([1.0, 2.0, 3.0, 4.0, 5.0]),
"b": np.random.uniform(size=(5, 2))
}
)
dataset2 = tf.data.Dataset.from_tensor_slices(
{
"b": np.random.uniform(size=(5, 2)),
"a": np.array([1.0, 2.0, 3.0, 4.0, 5.0])
}
)
iterator = dataset.make_one_shot_iterator()
iterator1 = dataset1.make_one_shot_iterator()
iterator2 = dataset2.make_one_shot_iterator()
one_element = iterator.get_next()
one_element1 = iterator1.get_next()
one_element2 = iterator2.get_next()
with tf.Session() as sess:
for i in range(5):
print(sess.run(one_element))
print("*"*15)
with tf.Session() as sess:
for i in range(5):
print(sess.run(one_element1))
print("*"*15)
with tf.Session() as sess:
for i in range(5):
print(sess.run(one_element2))
print("*"*15)
结果在这:
![76878a3fb6834b7280626ae771b51208.png](https://i-blog.csdnimg.cn/blog_migrate/18ac46fa5cb9161db5e3e1979048947e.jpeg)
望知道的同道说一下!
再后来又修改了一下
dataset2 = tf.data.Dataset.from_tensor_slices(
{
"a": np.random.uniform(size=(5, 2)),
"b": np.array([1.0, 2.0, 3.0, 4.0, 5.0])
}
)
dataset2输出的结果:
{'b': 1.0, 'a': array([0.66135257, 0.17590484])}
{'b': 2.0, 'a': array([0.12506575, 0.68063242])}
{'b': 3.0, 'a': array([0.23744592, 0.62312555])}
{'b': 4.0, 'a': array([0.18492174, 0.12950326])}
{'b': 5.0, 'a': array([0.6129567 , 0.24128473])}
发现输出的结果依旧是b在前,a在后,或许他最后的输出就是按照键的大小排序的吧,从大到小的排的,与值的类型无关吧。