损失函数测试
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
我只想定义一个损失函数来测试
我以欧式距离为例:
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
https://www.tensorflow.org/api_docs/python/tf/compat/v1/Session