ron*_*roo 25 python neural-network keras tensor
我正在实现自己的keras损失功能.如何访问张量值?
我试过的
def loss_fn(y_true, y_pred):
print y_true
Run Code Online (Sandbox Code Playgroud)
它打印
Tensor("target:0", shape=(?, ?), dtype=float32)
Run Code Online (Sandbox Code Playgroud)
是否有任何keras函数来访问y_true值?
小智 16
Keras的后端print_tensor可以让你做到这一点.你可以这样使用它:
import keras.backend as K
def loss_fn(y_true, y_pred):
y_true = K.print_tensor(y_true, message='y_true = ')
y_pred = K.print_tensor(y_pred, message='y_pred = ')
...
Run Code Online (Sandbox Code Playgroud)
该函数返回相同的张量.当评估该张量时,它将打印其内容,前面加上message.来自Keras文档:
请注意,print_tensor返回与x相同的新张量,应在以下代码中使用.否则,在评估期间不考虑打印操作.
所以,确保之后使用张量.
小智 5
通常,y_true您事先知道 - 在准备您的火车公司...
但是,有一个技巧可以看到里面的值y_true和/或y_pred.Keras让您有机会编写相应的回调以打印神经网络的输出.它看起来像这样:
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]
Run Code Online (Sandbox Code Playgroud)
这loss_fn是model.compile(...,metrics=[loss_fn],)在模型编译期间将其传递给函数时的损失函数的名称.
所以,最后,你必须将这个CustomMetrics回调作为参数传递给model.fit():
model.fit(x=train_X, y=train_Y, ... , callbacks=[CustomMetrics()])
Run Code Online (Sandbox Code Playgroud)
PS:如果你在Keras中使用Theano(或TensorFlow),你编写一个python程序,然后编译并执行.因此,在您的示例中y_true- 只是一个张量变量,用于进一步编译和丢失函数计数.
这意味着无法看到其中的值.例如,在Theano中,您可以在执行相应的eval()函数后查看唯一的所谓共享变量.有关详细信息,请参阅此问题.