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'
开始。
也就是说,您的模型似乎太简单了,您可能想尝试添加更多层...
我正在构建一个 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'
开始。
也就是说,您的模型似乎太简单了,您可能想尝试添加更多层...