tf.compat.v1.Print 的 TensorFlow v2 版本是什么?

What is the TensorFlow v2 version of tf.compat.v1.Print?

tf.compat.v1.Print 的 TensorFlow v2 版本是什么?具体来说,是否有一个 TF2 op 在其输入上充当标识,并在评估其输出张量时打印一条消息?


对于上下文,我使用 Keras Functional API 来定义模型,类似于:

input = tk.Input(input_shape)
layer_1 = tk.Dense(16)(input)
layer_2 = tk.Dense(16)(layer_1)
alpha = tf.math.exp(layer_2)
beta = alpha**2
model = tk.Model(inputs=[input], outputs=[beta])

我想在推理时检查模型的中间值(例如,alpha)。我可以这样做:

input = tk.Input(input_shape)
layer_1 = tk.Dense(16)(input)
layer_2 = tk.Dense(16)(layer_1)
alpha = tf.math.exp(layer_2)
alpha = tf.compat.v1.Print(alpha, [f'alpha={alpha}'])
beta = alpha**2
model = tk.Model(inputs=[input], outputs=[beta])

有没有 TF2 方法可以做到这一点?

(我知道我可以 return alpha 作为输出,但这需要触及调用此模型实例的每个地方,这很烦人。)

根据 this 答案,创建具有打印功能的自定义图层即可。

一个最小的例子:

class PrintLayer(tf.keras.layers.Layer):
    def __init__(self, trainable=False, **kwargs):
        super().__init__(trainable=trainable, **kwargs)

    def call(self, inputs):
        tf.print(inputs, output_stream=sys.stdout)
        return inputs

input = tk.Input(input_shape)
layer_1 = tk.Dense(16)(input)
layer_2 = tk.Dense(16)(layer_1)
alpha = tf.math.exp(layer_2)
alpha = PrintLayer()(alpha)
beta = alpha**2
model = tk.Model(inputs=[input], outputs=[beta])