简体   繁体   English

如何在没有弃用函数的情况下迭代 tf.dataset?

[英]How to iterate over a tf.dataset, without deprecated functions?

I'm using tensorflow 1.14 and have a problem with dataset.我正在使用 tensorflow 1.14 并且数据集有问题。

my code:我的代码:

my_data = [
    [0, 1],
    [2, 3],
    [4, 5],
    [6, 7]
]

slices = tf.data.Dataset.from_tensor_slices(my_data) # get dataset
it = slices.make_one_shot_iterator() # get iterator from dataset (deprecated)
next_item = it.get_next()

It says make_one_shot_iterator is deprecated..它说不推荐使用 make_one_shot_iterator ..

So i tried following codes所以我尝试了以下代码

my_data = [
    [0, 1],
    [2, 3],
    [4, 5],
    [6, 7]
]

slices = tf.data.Dataset.from_tensor_slices(my_data) # get dataset
for q in slices:
    print(sess.run(q))

Immediately i got NotFoundError exception.我立即收到 NotFoundError 异常。

My question: What is the proper way to iterate over a dataset?我的问题:迭代数据集的正确方法是什么?

Try this:尝试这个:

import tensorflow as tf
my_data = [
    [0, 1],
    [2, 3],
    [4, 5],
    [6, 7]
]
n = len(my_data)
slices = tf.data.Dataset.from_tensor_slices(my_data) # get dataset
iterator = slices.make_initializable_iterator()

with tf.Session() as sess:
    sess.run(iterator.initializer)
    while n>0:
        print(sess.run(iterator.get_next()))
        n-=1

If above still showing deprecation message, then try below code:如果上面仍然显示deprecation消息,请尝试以下代码:

import tensorflow as tf
tf.enable_eager_execution()

my_data = [
    [0, 1],
    [2, 3],
    [4, 5],
    [6, 7]
]
slices = tf.data.Dataset.from_tensor_slices(my_data) # get dataset
for i in slices:
    print(i.numpy())

output:输出:

[0 1]
[2 3]
[4 5]
[6 7]
import tensorflow as tf
my_data = [
    [0, 1],
    [2, 3],
    [4, 5],
    [6, 7]
]

slices = tf.data.Dataset.from_tensor_slices(my_data) # get dataset
q = slices.make_one_shot_iterator().get_next()
with tf.Session() as sess:
    for i in range(len(my_data)):
        print('-----')
        print(sess.run(q))

The code above produces上面的代码产生在此处输入图片说明

From the documentation of tf.data.Dataset you can do a simple loop with:tf.data.Dataset的文档中,您可以执行一个简单的循环:

for element in my_dataset: 
   print(element)

As you can see in the image, this returns a tf.Tensor .正如您在图像中看到的,这将返回一个tf.Tensor If you want a simple tuple you can use:如果你想要一个简单的元组,你可以使用:

for element in my_dataset.as_numpy_iterator(): 
   print(element)

If each entry of your dataset has more than one element you can index the contents of the tuple with [] like normally.如果数据集的每个条目都有多个元素,您可以像往常一样用[]索引元组的内容。

在此处输入图片说明

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM