Python iterator.get_next()返回字节数组/迭代器。如果不立即执行,则无法将get_next()分配给多个值

Python iterator.get_next()返回字节数组/迭代器。如果不立即执行,则无法将get_next()分配给多个值,python,tensorflow,tensorflow-datasets,tfrecord,Python,Tensorflow,Tensorflow Datasets,Tfrecord,我有一个问题,我试图创建一个 从tfrecord文件通过 这导致了错误: 未启用“急执行”时,Tensor对象不可编辑。要在这个张量上迭代,请使用tf.map\u fn 所以我改变了:image,label=iterator.get\u next() 收件人:next\u elem=iterator.get\u next() 有了它,我可以执行以下代码: with tf.Session() as sess: sess.run(tf.global_variables_initializer())

我有一个问题,我试图创建一个 从
tfrecord
文件通过

这导致了错误:

未启用“急执行”时,Tensor对象不可编辑。要在这个张量上迭代,请使用tf.map\u fn

所以我改变了:
image,label=iterator.get\u next()
收件人:
next\u elem=iterator.get\u next()

有了它,我可以执行以下代码:

with tf.Session() as sess: 
sess.run(tf.global_variables_initializer())
next_elem   = sess.run( make_batch(1))

然而,下一个元素是一个字节数组,而不是一个具有形状的元组([10241024],[10241024])。

因此,这个错误只是我的误解

dataset.map(map_func=parse_function,num_parallel_calls=batch_size)
dataset.batch(batch_size)
不操纵数据集本身请参见:

您必须实际将这些操作产生的数据集再次分配给数据集,如下所示:
dataset=dataset.map(map\u func=parse\u函数,num\u parallel\u calls=batch\u size)
数据集=数据集。批次(批次大小)

这实际上也解决了迭代器.get_next()问题。所以我把
next\u elem=iterator.get\u next()
改回:
image,label=iterator.get\u next()

下面的代码按预期工作:
使用tf.Session()作为sess:
sess.run(tf.global\u variables\u initializer())
image,label=sess.run(生成批次(1))

dataset.map(map_func=parse_function,num_parallel_calls=batch_size)
dataset.batch(batch_size)