损失函数测试

Loss function testing

我只想定义一个损失函数来测试

我以欧式距离为例:

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.], [1., 0.]]

只有:

edk = euc_dist_keras(y_true, y_pred)

我得到了错误: TypeError:- 不支持的操作数类型:'list' 和 'list'

所以我用了:

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 post 和有关会话的 TF v1 文档:
https://www.tensorflow.org/api_docs/python/tf/compat/v1/Session