在keras的model.fit中没有tf.Print的结果

时间:2018-04-22 18:13:46

标签: tensorflow keras

我写了那个损失(用于测试keras中的自定义损失):

def loss(y_true, y_pred):
  loss = -tf.reduce_sum(y_true * tf.log(y_pred))
  loss = tf.Print(loss, [loss], 'loss = ')
return loss

然后:

model.compile(loss=loss, 
              optimizer=keras.optimizers.Adadelta(),
              metrics=['accuracy'])
model.fit(x_train, y_train)

并且没有tf.Print结果:

Epoch 1/12 
60000/60000 [==============================] - 12s 198us/step - loss: 25.3197 - acc: 0.9384 - val_loss: 5.6927 - val_acc: 0.9857
Epoch 2/12
60000/60000 [==============================] - 11s 187us/step - loss: 8.7803 - acc: 0.9798 - val_loss: 4.6938 - val_acc: 0.9888

为什么?

3 个答案:

答案 0 :(得分:4)

我想你是在Jupyter Notebook中运行它的。 tf.Print()打印到从调用Jupyter Notebook的终端。看看那里,看看是否有输出。

请参阅tf.Print()手册页上的蓝色注释。

来自Evgeniya的评论如下:您可以编写自己的tf.Print()版本来打印所需的数据(代码Vihari Piratla):

"""
The default tf.Print op goes to STDERR
Use the function below to direct the output to stdout instead
Usage: 
> x=tf.ones([1, 2])
> y=tf.zeros([1, 3])
> p = x*x
> p = tf_print(p, [x, y], "hello")
> p.eval()
hello [[ 0.  0.]]
hello [[ 1.  1.]]
"""
def tf_print(op, tensors, message=None):
    def print_message(x):
        sys.stdout.write(message + " %s\n" % x)
        return x

    prints = [tf.py_func(print_message, [tensor], tensor.dtype) for tensor in tensors]
    with tf.control_dependencies(prints):
        op = tf.identity(op)
    return op

答案 1 :(得分:0)

我之前见过这个。从python命令行运行py文件,你会看到tf里面的内容。打印()。

答案 2 :(得分:0)

我发现了

print("foo = " + str(foo.eval()))

(其中foo是您的张量)工作正常。