如何在不使用已弃用的函数的情况下迭代 tf.dataset?

MEO*_*WWW 5 python tensorflow

我使用的是tensorflow 1.14,并且数据集有问题。

我的代码:

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()
Run Code Online (Sandbox Code Playgroud)

它说 make_one_shot_iterator 已被弃用。

所以我尝试了以下代码

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))
Run Code Online (Sandbox Code Playgroud)

我立即收到 NotFoundError 异常。

我的问题:迭代数据集的正确方法是什么?

Anu*_*ngh 1

尝试这个:

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
Run Code Online (Sandbox Code Playgroud)

如果上面仍然显示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())
Run Code Online (Sandbox Code Playgroud)

输出:

[0 1]
[2 3]
[4 5]
[6 7]
Run Code Online (Sandbox Code Playgroud)