Keras 模型仅适用于 Sigmoid 激活

Keras model only working with Sigmoid activation

我正在构建一个 Keras 模型来将数据分类为 9 个类别之一。问题是它只适用于为二进制输出设计的 Sigmoid 激活,其他激活导致 0 精度。我需要更改什么才能将其分类到每个标签中?

#Reshape data to add new dimension
X_train = X_train.reshape((100, 150, 1)) 
Y_train = X_train.reshape((100, 1, 1)) 
model = Sequential() 
model.add(Conv1d(1, kernel_size=3, activation='relu', input_shape=(None, 1))) 
model.add(Dense(1)) 
model.add(Activation('sigmoid')) 

model.compile(loss='categorical_hinge', optimizer='adam', metrics=['accuracy']) 
model.fit(x=X_train,y=Y_train, epochs=200, batch_size=20)

单单元密集层不是我们在多class class化情况下使用的;你应该首先确保你的 Y 数据是单热编码的——如果不是,你可以使用 Keras 实用函数使它们如此:

num_classes=9
Y_train = keras.utils.to_categorical(Y_train, num_classes)

然后将最后一层更改为:

model.add(Dense(num_classes)) 
model.add(Activation('softmax')) 

此外,如果您没有任何特定理由使用分类铰链损失,我建议您在模型编译中从 loss='categorical_crossentropy' 开始。

也就是说,您的模型似乎太简单了,您可能想尝试添加更多层...