2017-04-17 70 views
2

我正在实现自己的keras丢失函数。我如何访问张量值?调试keras张量值

我已经试过

def loss_fn(y_true, y_pred): 
    print y_true 

它打印

Tensor("target:0", shape=(?, ?), dtype=float32) 

是否有任何keras函数访问y_true值?

回答

4

通常,y_true你提前知道 - 准备您的火车语料中......

然而,有一个诀窍,看看里面y_true和/或y_pred值。 Keras给你一个机会来编写各自的callback来打印神经网络的输出。 它会是这个样子:

def loss_fn(y_true, y_pred): 
    return y_true # or y_pred 
... 
import keras.callbacks as cbks 
class CustomMetrics(cbks.Callback): 

    def on_epoch_end(self, epoch, logs=None): 
     for k in logs: 
      if k.endswith('loss_fn'): 
       print logs[k] 

这里loss_fn是你的损失函数的名称,当你模型的编译过程中传递到model.compile(...,metrics=[loss_fn],)功能。

所以,最后,你必须通过这个CustomMetrics回调作为参数到model.fit()

model.fit(x=train_X, y=train_Y, ... , callbacks=[CustomMetrics()]) 

PS:如果您在Keras使用Theano(或TensorFlow)喜欢这里,你写一个Python程序,然后编译它并执行。所以,在你的例子中y_true - 只是一个张量变量,用于进一步编译和丢失函数计数。

这意味着无法查看其中的值。例如,在Theano中,您可以在执行相应的eval()函数后查看唯一所谓的共享变量。有关更多信息,请参阅this question

0

您无法直接从张量符号变量中获取值。哟需要编写一个theano函数来提取值。不要忘记选择theano作为Keras的后端。

检查笔记本链接以获取一些基本的theano变量和函数:get tensor value in call function of own layers

相关问题