【发布时间】:2019-01-19 09:26:47
【问题描述】:
我想定义一个损失函数,它表示隐藏层输出点之间的距离。首先,我在没有 keras 的情况下写了这个
import numpy as np
import itertools
pts = np.array([
[10,10,10],
[10,11,20],
[20,11,30],
[20,10,10],
[10,10,20],
])
diff = list(itertools.combinations(pts, 2))
ptdiff = lambda (p1,p2): (np.sqrt(np.sum((p1 - p2) ** 2)))
diffs = map(ptdiff, diff)
np.mean(diffs)
我得到了结果。我在keras中尝试了这个损失函数,z是隐藏层的输出,是一个矩阵
定义损失函数
def vae_loss(z):
z_diff = list(itertools.combinations(z,2))
ptdiff = lambda (p1,p2): (np.sqrt(np.sum((p1 - p2) ** 2)))
z_diffs = map(ptdiff, z_diff)
loss = K.mean(z_diffs)
return loss
但它显示TypeError: 'Tensor' object is not iterable.,我只是想知道我该如何解决这个问题。
【问题讨论】:
-
出于好奇:为什么要使用这个损失函数?您是否考虑过使用熵作为矩阵行之间差异的度量?缩放对您的应用程序重要吗?
-
感谢您的帮助。我想使用这个损失函数来使特征空间中的数据点尽可能接近。我想测量矩阵的每两行之间的差异?
标签: python tensorflow keras itertools loss-function