keras中的自定义丢失函数实现问题

时间:2017-12-11 23:06:42

标签: python tensorflow deep-learning keras loss-function

我正在keras中实现自定义丢失功能。模型的输出是10维softmax层。计算损失:首先我需要找到y触发1的索引,然后用真值减去该值。我正在做以下事情:

nil

但它给出错误“引发ValueError(”不支持None值。“) ValueError:不支持任何值。“ 这有什么问题?

1 个答案:

答案 0 :(得分:0)

这是因为您的功能不可区分。它由常数组成。

如果您希望argmax作为结果,则根本没有解决方案。

测试方法

由于您正在使用" softmax",这意味着只有一个班级正确(您不能同时拥有两个班级)。

既然你想要指数差异,也许你可以使用一个连续的结果(连续值可以区分)。

只使用-0.5到9.5之间的一个输出,并通过舍入结果来获取类。

这样,你可以让最后一层只有一个单位:

lastLayer = Dense(1,activation = 'sigmoid', ....) #or another kind if it's not dense    

用lambda图层改变范围:

lambdaLayer = Lambda(lambda x: 10*x - 0.5)

现在您的损失可能很简单'mae'(平均绝对误差)。

这种尝试的缺点是'sigmoid'激活在类之间不均匀分布。有些课程比其他课程更有可能。但是因为限制是重要的,所以最初看起来最好的想法。

仅当您的类遵循逻辑递增序列时,此操作才有效。 (我猜他们会这样做,否则你不会尝试那种损失,对吗?)