TensorFlow Dataset API from_generator 序列结束错误

以下是一个玩具代码,用于复制我在尝试使用生成器动态生成/提供训练数据时遇到的问题。

def makeRand():    yield np.random.rand(1)dataset = tf.data.Dataset.from_generator(makeRand, (tf.float32))iterator = tf.contrib.data.Iterator.from_structure(tf.float32, tf.TensorShape([]))next_x = iterator.get_next()init_op = iterator.make_initializer(dataset)with tf.Session() as sess:    sess.run(init_op)    a = sess.run(next_x)    print(a)    a = sess.run(next_x)    print(a)

错误追踪如下:

Traceback (most recent call last):  File “test_iterator_gen.py", line 31, in <module>    a = sess.run(next_x) tensorflow.python.framework.errors_impl.OutOfRangeError: End of sequence     [[Node: IteratorGetNext = IteratorGetNext[output_shapes=[[]], output_types=[DT_FLOAT], _device="/job:localhost/replica:0/task:0/device:CPU:0"](Iterator)]]Caused by op 'IteratorGetNext', defined at:  File "test_iterator_gen.py", line 23, in <module>    next_x = iterator.get_next()OutOfRangeError (see above for traceback): End of sequence     [[Node: IteratorGetNext = IteratorGetNext[output_shapes=[[]], output_types=[DT_FLOAT], _device="/job:localhost/replica:0/task:0/device:CPU:0"](Iterator)]]

回答:

这个问题是由生成器的错误实例化引起的。

错误是由 makeRand() 函数耗尽可yield元素引起的。通过将其更改为以下代码可以解决这个问题:

def makeRand():   while True:      yield np.random.rand(1)

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注