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)