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])
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])