如何将TensorFlow tf.print与非大写p一起使用?

时间:2018-12-17 12:46:01

标签: python tensorflow keras

我在自定义损失函数中有一些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)

2 个答案:

答案 0 :(得分:3)

tf.printtf.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.