【问题标题】:How to improve accuracy with keras multi class classification?如何通过 keras 多类分类提高准确率?
【发布时间】:2020-08-13 11:04:42
【问题描述】:

我正在尝试使用 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

我对此的准确性很差。我该如何改进呢?

【问题讨论】:

    标签: machine-learning keras multiclass-classification


    【解决方案1】:

    您没有向我们提供重要信息,但以下是一些指导原则:
    1.减少Dense层的数量——你有一个复杂的层,数据量很小(63k有点小)。您可能会遇到火车数据过度拟合的情况。
    2. 您是否检查过测试与您的火车具有相同的分布?
    3.避免在中间Dense层使用softmax - softmax应该在最后一层使用,使用sigmoid或relu代替。
    4. 绘制作为 epoch 曲线函数的损失并检查它是否减少 - 然后您可以了解您的学习率是太高还是太小。

    【讨论】:

    • 我已经尝试使用opt = SGD(lr=0.001, momentum=0.9) 做了你提到的一切。仍然表现不佳
    【解决方案2】:

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

    完成之后,如果您仍然无法获得令人满意的准确度,请尝试不同的架构(不同数量的层和节点),并使用较短的 epoch(例如 ~ 50),以便了解您的模型如何在完全适应您的 5,000 个 epoch 之前表现良好。

    【讨论】:

    • 感谢您的意见。因为我有 20 个标签,所以我不能从 20 中减少最后一个节点。或者我可以吗?
    • @itsMe 不,这是唯一你不能真正改变的部分——它应该保持原样,有 20 个节点和softmax 激活。
    猜你喜欢
    • 2019-02-14
    • 2017-11-20
    • 2020-06-29
    • 2019-05-07
    • 2018-07-20
    • 2020-04-23
    • 1970-01-01
    • 2018-11-14
    • 2019-11-18
    相关资源
    最近更新 更多