Keras 在最后一层可能有多个“Softmax”?

数据挖掘 机器学习 喀拉斯 多类分类
2021-09-30 02:27:34

最后一层有多个softmax

是否可以在 Keras 的最后一层实现多个 softmax?所以节点 1-4 的总和 = 1;5-8 = 1;等等。

我应该选择不同的网络设计吗?

2个回答

我会使用功能接口。

像这样的东西:

from keras.layers import Activation, Input, Dense
from keras.models import Model
from keras.layers.merge import Concatenate

input_ = Input(shape=input_shape)

x = input_
x1 = Dense(4, x)
x2 = Dense(4, x)
x3 = Dense(4, x)
x1 = Activation('softmax')(x1)
x2 = Activation('softmax')(x2)
x3 = Activation('softmax')(x3)
x = Concatenate([x1, x2, x3])

model = Model(inputs=input_, outputs=x)

可以只实现您自己的 softmax 函数。您可以将张量拆分为多个部分,然后分别计算每个部分的 softmax 并连接张量部分:

def custom_softmax(t):
    sh = K.shape(t)
    partial_sm = []
    for i in range(sh[1] // 4):
        partial_sm.append(K.softmax(t[:, i*4:(i+1)*4]))
    return K.concatenate(partial_sm)

concatenate没有轴参数通过最后一个轴连接(在我们的例子中轴 = 1)。

然后您可以将此激活函数包含在隐藏层中或将其添加到图形中。

Dense(activation=custom_activation)

或者

model.add(Activation(custom_activation))

您还需要定义一个新的成本函数。