Skip to main content
 首页 » 编程设计

python之TensorFlow 函数中的打印语句

2025年01月19日26xiaohuochai

我是 TensorFlow 的新手,我正在尝试在将从 TensorFlow session 调用的函数中打印向量的形状。

问题在于此行(显示为注释掉)仅在最初定义此函数模板时执行(而不是在 TensorFlow session 期间的每次迭代中执行)。如何添加打印语句以便在每次 TensorFlow 迭代时调用它?

def Q(X): 
    # f_debug.write('Q(X) :: X.shape :: ' + str(X.shape) + '\n') 
 
    h = tf.nn.relu(tf.matmul(X, Q_W1) + Q_b1) 
    z = tf.matmul(h, Q_W2) + Q_b2 
    return z 

请您参考如下方法:

这是一个需要注意的重点,也是TF中常见的混淆点。该函数不会在 session 中由 tensorflow 调用,除了 tf.py_func 外,没有 python 函数会调用,这可能是您问题的解决方法。

Tensorflow 调用您的函数 Q 只是为了获取符号操作,然后将这些操作添加到依赖关系图中。在 session 期间,依赖图是执行计算所依赖的全部。即使您使用的是 tf.while、tf.cond 或其他控制流操作。这些都不会在 session 期间调用 python,它们只是循环遍历您定义的依赖关系图中的元素。

一般来说,除了使用 Tensorflow 调试器(根本不难配置)之外,没有什么好的方法可以停止执行 tensorflow 中间图执行。但作为一种解决方法,您可能会定义一个 tf.py_func python 函数。此函数将张量编码为 python 对象并在 session 执行期间调用 python(它效率不高或其他任何东西,但在某些情况下很方便)。

您可能需要使用 with tf.control_dependencies(...): 来强制运行您的 tf.py_func 操作(因为它没有任何依赖性如果它里面只有打印语句)。

免责声明:我没有以这种方式使用过 tf.py_func,也不是为此目的而构建的。