如何通过keras多类分类提高准确性?

时间:2020-04-29 11:11:49

标签: machine-learning keras multiclass-classification

我正在尝试使用tf keras进行多类分类。我总共有20个标签,总数据为63952,并且尝试了以下代码

features = features.astype(float)
labels = df_test["label"].values

encoder = LabelEncoder()
encoder.fit(labels)
encoded_Y = encoder.transform(labels)
dummy_y = np_utils.to_categorical(encoded_Y)

然后

def baseline_model():
    model = Sequential()
    model.add(Dense(50, input_dim=3, activation='relu'))
    model.add(Dense(40, activation='softmax'))
    model.add(Dense(30, activation='softmax'))
    model.add(Dense(20, activation='softmax'))

    model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
    return model

最终

history = model.fit(data,dummy_y, 
                    epochs=5000,
                    batch_size=50,
                    validation_split=0.3,
                    shuffle=True,
                    callbacks=[ch]).history

我对此很不满意。我该如何改善呢?

2 个答案:

答案 0 :(得分:2)

中间层中的

softmax激活根本没有任何意义。将它们全部更改为relu并仅在最后一层保留softmax

这样做之后,如果您仍然无法获得令人满意的精度,请尝试以较短的时期(例如〜50)尝试不同的架构(不同的层和节点数),以了解模型的方式行为,然后完全适应您的5,000个纪元。

答案 1 :(得分:1)

您没有向我们提供重要信息,但以下是一些准则:
1.减少Dense层的数量-您拥有一个包含少量数据的复杂层(63k有点小)。您可能会在火车数据上过拟合。
2.您检查过测试是否与火车的分布相同?
3.避免在中间Dense层中使用softmax-应在最后一层中使用softmax,而应使用S型或relu。
4.根据历时曲线绘制损失曲线,并检查其是否减少-然后您可以了解学习率是太高还是太小。

相关问题