如何在Keras中使用分类铰链?

如何在Keras中使用分类铰链?,keras,keras-2,loss-function,activation-function,Keras,Keras 2,Loss Function,Activation Function,也许这是一个非常愚蠢的问题,但我找不到一个在Keras中如何使用范畴铰链的例子。我做分类,我的目标是shape(,1)和值[-1,0,1],所以我有3个类别。使用功能API,我将输出层设置为: 输出=密集(1,name='output',activation='tanh', 内核初始化器='lecun'u normal')(输出1) 然后我申请: compile(优化器=adam,loss={'output':'categorical_铰链'}, 指标=[‘准确度’]) 结果表明,模型正在收敛,

也许这是一个非常愚蠢的问题,但我找不到一个在Keras中如何使用范畴铰链的例子。我做分类,我的目标是
shape(,1)
和值[-1,0,1],所以我有3个类别。使用功能API,我将输出层设置为:

输出=密集(1,name='output',activation='tanh', 内核初始化器='lecun'u normal')(输出1)

然后我申请:

compile(优化器=adam,loss={'output':'categorical_铰链'}, 指标=[‘准确度’])

结果表明,模型正在收敛,但精度趋于0。我做错了什么

使用:

model.compile(optimizer=adam, loss="categorical_hinge", metrics=['accuracy'])

虽然
[-1,0,1]
是tanh激活函数的有效目标范围,但经验表明,Keras模型在二进制输出中不能很好地用于分类。考虑使用31个热向量与SULTTMAX分类器代替。如果我的解释正确的话,分类铰链是用来处理一个热向量的

因此:将标签转换为one hots,并将输出更改为以下内容:

output = Dense(3, name='output', activation='softmax', kernel_initializer='lecun_normal')(output1)

你想用一些解释来补充你的代码吗?问题是为什么准确率在降低而不是增加。代码运行时没有错误。答案是正确的,唯一的错误是[-1,0,1]不是二进制输出。其余的都是正确的。您需要在Keras中添加activation='softmax'吗?从数学上讲,铰链损耗适用于距离,该距离不必介于(0和1)之间。而交叉熵损失适用于概率,因此在使用损失函数之前需要softamx。