run till exit from #0_tf.data.Dataset.from_tensor_slices一个神奇的现象,不清楚原因!

a33ec35b8bd725468945049fce89c5d8.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
dataset1与2的输出一模一样!

望知道的同道说一下!

再后来又修改了一下

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在后,或许他最后的输出就是按照键的大小排序的吧,从大到小的排的,与值的类型无关吧。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值