我在自定义损失函数中有一些TensorFlow代码。
我正在使用tf.Print(node, [debug1, debug2], "print my debugs: ")
它工作正常,但TF表示tf.Print
已被描述,一旦我更新TensorFlow并应使用tf.**p**rint()
,且p小,它将被删除。
我尝试使用tf.print
的方式使用tf.Print()
,但无法正常工作。一旦我在Keras中安装了模型,就会出现错误。与tf.Print
不同,tf.print
似乎可以接受**kwargs
的任何东西,那么我应该给它什么呢?与tf.Print
不同的是,它似乎没有返回我可以注入到计算图中的内容。
搜索非常困难,因为所有在线信息都与tf.Print()
有关。
有人可以解释如何使用tf.print()
吗?
编辑:示例代码
def custom_loss(y_true, y_pred):
loss = K.mean(...)
print_no_op = tf.Print(loss, [loss, y_true, y_true.shape], "Debug output: ")
return print_no_op
model.compile(loss=custom_loss)
答案 0 :(得分:3)
tf.print
和tf.Print
的文档都提到tf.print
返回的操作没有输出,因此无法将其评估为任何值。 tf.print
的语法与Python的内置print
更相似。就您而言,您可以按以下方式使用它:
def custom_loss(y_true, y_pred):
loss = K.mean(...)
print_op = tf.print("Debug output:", loss, y_true, y_true.shape)
with tf.control_dependencies([print_op]):
return K.identity(loss)
此处K.identity
创建一个与loss
相同的新张量,但对print_op
具有控制依赖性,因此对其进行评估将强制执行打印操作。请注意,尽管Keras不如tf.print
灵活,但它也提供K.print_tensor
。
答案 1 :(得分:0)
除了jdehesa的出色答案之外,还有一点点:
tf.tuple可用于将打印操作与另一个操作耦合,然后无论哪个会话执行图形,该操作都将与该操作一起运行。这样做的方法如下:
print_op = tf.print(something_you_want_to_print)
some_tensor_list = tf.tuple([some_tensor], control_inputs=[print_op])
# Use some_tensor_list[0] instead of any_tensor below.