【问题标题】:Get values of tensors in loss function获取损失函数中张量的值
【发布时间】:2019-01-24 21:12:43
【问题描述】:
我想得到这个keras backend function 的 y_pred 和 y_true 张量的值。我需要它才能执行一些自定义计算并更改损失,这些计算仅适用于真实的数组值。
def mean_squared_error(y_true, y_pred):
#some code here
return K.mean(K.square(y_pred - y_true), axis=-1)
有没有办法在 keras 中做到这一点?或者在任何其他 ML 框架(tf、pytorch、theano)中?
【问题讨论】:
标签:
tensorflow
keras
deep-learning
theano
pytorch
【解决方案1】:
尝试将其包含在损失函数中:
y_true = keras.backend.print_tensor(y_true, message='y_true')
以下是 Keras 文档 (https://keras.io/backend/) 的摘录:
打印张量
keras.backend.print_tensor(x, message='')
评估时打印消息和张量值。
请注意 print_tensor 返回一个与 x 相同的新张量,该张量应在代码的后面部分中使用。否则,在评估期间不考虑打印操作。
【解决方案2】:
不,一般情况下,您无法以这种方式计算损失,因为 Keras 基于执行自动微分的框架(如 Theano、TensorFlow),它们需要知道您在两者之间执行哪些操作才能计算损失的梯度。
您需要使用keras.backend 函数来实现损失计算,否则无法计算梯度并且无法进行优化。