能否将TensorFlow迭代器返回的Tensor转换为Numpy数组?
将TensorFlow张量转换为Numpy数组
你的sample_tensor是TensorFlow计算图中的符号张量(从输出Tensor("IteratorGetNext:0", shape=(20, 26, 26), dtype=float32)可以判断,它是tf.data迭代器的输出节点,还未持有实际数值),转换为Numpy数组需要分场景处理:
场景1:Eager执行模式(TensorFlow 2.x默认)
如果是在Eager模式下直接获取的迭代器输出,直接调用张量的.numpy()方法即可:
numpy_array = sample_tensor.numpy()
如果是通过迭代器生成的批量数据,也可以直接遍历数据集获取并转换:
# 遍历数据集,取第一个batch转换 for batch in your_dataset: numpy_array = batch.numpy() break
场景2:计算图模式(TensorFlow 1.x或TF2禁用Eager的情况)
此时需要通过会话(Session)运行张量,同时要先初始化迭代器:
import tensorflow as tf # 初始化迭代器 iterator = tf.data.Iterator.from_structure(your_dataset.output_types, your_dataset.output_shapes) init_op = iterator.make_initializer(your_dataset) with tf.Session() as sess: sess.run(init_op) # 运行张量得到Numpy数组 numpy_array = sess.run(sample_tensor)
如果是TF2环境下兼容图模式,使用tf.compat.v1模块:
import tensorflow as tf tf.compat.v1.disable_eager_execution() iterator = tf.compat.v1.data.make_initializable_iterator(your_dataset) init_op = iterator.initializer with tf.compat.v1.Session() as sess: sess.run(init_op) numpy_array = sess.run(sample_tensor)
内容的提问来源于stack exchange,提问作者Febin Sebastian
相关产品推荐
相关产品推荐

