损失功能测试

问题描述

我只想定义一个损失函数进行测试。

我以欧氏距离为例:

def euc_dist_keras(y_true,y_pred):
    return K.sqrt(K.sum(K.square(y_true - y_pred),axis=-1,keepdims=True))

由于我必须从夫妇(x,y)的净列表中获取信息,因此我想在NN之外对此进行测试。

所以我用过:

y_true = [[0.,1.],[0.,0.]]
y_pred = [[1.,[1.,0.]]

只需:

edk = euc_dist_keras(y_true,y_pred)

我得到了错误: TypeError:-:“列表”和“列表”的不受支持的操作数类型

所以我用过:

y_true_array = np.array(y_true)
y_pred_array = np.array(y_pred)
edk = euc_dist_keras(y_true_array,y_pred_array)

但获得:

Tensor("Sqrt:0",shape=(2,1),dtype=float64)

代替预期的输出值:1

如何获得所需的值? 相同的euc_dist_keras,用于:

model.compile(loss=euc_dist_keras,optimizer=opt)

将完全按照我测试的方式工作吗?

谢谢!


添加

with tf.Session() as sess:  print(edk.eval()) 

我获得了: [[1.] [1。]]

我期望: 1。

也许我在def上犯了一些错误? 还是在编译模型时使用所有样本的均值?

解决方法

听起来这是TensorFlow v1代码。如果是这样,则必须在“会话”中运行这些操作才能对其进行评估。请参见SO How to print the value of a Tensor object in TensorFlow?以及会话中的TF v1文档:
https://www.tensorflow.org/api_docs/python/tf/compat/v1/Session