【发布时间】:2019-04-09 15:41:53
【问题描述】:
我必须在二进制类型(真/假)的未标记数据上训练一个网络,这听起来像是无监督学习。这是标准化数据的样子:
array([[-0.05744527, -1.03575495, -0.1940105 , -1.15348956, -0.62664491,
-0.98484037],
[-0.05497629, -0.50935675, -0.19396862, -0.68990988, -0.10551919,
-0.72375012],
[-0.03275552, 0.31480204, -0.1834951 , 0.23724946, 0.15504367,
0.29810553],
...,
[-0.05744527, -0.68482282, -0.1940105 , -0.87534175, -0.23580062,
-0.98484037],
[-0.05744527, -1.50366446, -0.1940105 , -1.52435329, -1.14777063,
-0.98484037],
[-0.05744527, -1.26970971, -0.1940105 , -1.33892142, -0.88720777,
-0.98484037]])
但是,我的数据中确实有一个 对 True 标签总数的限制。这并不意味着我可以在 Keras 中构建一个经典的自定义损失函数,根据需要采用 (y_true, y_pred) 参数:我的外部约束只是在 True 和 False 的预测总数上,而不是在单个标签上。
我的问题是,对于这类问题是否有某种“标准”的方法,以及如何在 Keras 中实现。
可能的解决方案
我是否应该将y_true 随机分配为 0/1,使用 sigmoid 激活函数让网络返回 y_pred 作为 1/0,然后将我的损失函数定义为
sum_y_true = 500 # arbitrary constant known a priori
def loss_function(y_true, y_pred):
loss = np.abs(y_pred.sum() - sum_y_true)
return loss
【问题讨论】:
-
据我了解,您需要限制 True 的数量和 False 标签的数量。我说的对吗?
-
没错。它基本上就像一个 k 均值聚类问题,其中我知道 a) k = 2; b) 每个集群中最终需要多少数据点。
标签: keras constraints loss-function unsupervised-learning