问题描述
我以欧氏距离为例:
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