【问题标题】:How can I improve f1-score of cnn?如何提高 cnn 的 f1 分数?
【发布时间】:2019-08-07 10:00:06
【问题描述】:

我正在处理文档分类问题。 多标签分类 20 个不同的标签,1920 个文档在训练中,480 个在验证中。该模型是一个带有 FastText 嵌入的 CNN,我使用一个以 Ngram 作为基线的逻辑回归模型。 问题是基线模型的 f1 分数为 0.36,而 cnn 仅给出 0.3。

我使用的架构来自这里:
https://www.kaggle.com/vsmolyakov/keras-cnn-with-fasttext-embeddings

我一直在做一些参数调优,目前最好的参数是:dropout。 0.25,学习率 0.001,可训练嵌入错误,128 个过滤器,预测阈值 0.15 和内核大小 9。

你们有什么想法需要特别注意的参数,改变架构的想法,有什么可以提高 f1 分数的吗?

# Parameters 
BATCH_SIZE = 16
DROP_OUT = 0.25
N_EPOCHS = 20
N_FILTERS = 128
TRAINABLE = False
LEARNING_RATE = 0.001
N_DIM = 32
KERNEL_SIZE = 9

# Create model
model = Sequential()
model.add(Embedding(NB_WORDS, EMBED_DIM, weights=[embedding_matrix], 
                    input_length=MAX_SEQ_LEN, trainable=TRAINABLE))
model.add(Conv1D(N_FILTERS, KERNEL_SIZE, activation='relu', padding='same'))
model.add(MaxPooling1D(2))
model.add(Conv1D(N_FILTERS, KERNEL_SIZE, activation='relu', padding='same'))
model.add(GlobalMaxPooling1D())
model.add(Dropout(DROP_OUT))
model.add(Dense(N_DIM, activation='relu', kernel_regularizer=regularizers.l2(1e-4)))
model.add(Dense(N_LABELS, activation='sigmoid'))  #multi-label (k-hot encoding)
adam = optimizers.Adam(lr=LEARNING_RATE, beta_1=0.9, beta_2=0.999, epsilon=1e-08, decay=0.0)
model.compile(loss='binary_crossentropy', optimizer=adam, metrics=['accuracy'])
model.summary()

编辑
我想我在调优期间通过将 epoch 固定为 20 得到了一些错误的超参数。我现在正在尝试使用停止标准,该模型通常会在 30-35 个时期收敛。似乎 0.5 的 dropout 效果更好,我目前正在调整批量大小。如果有人对时代和其他超参数之间的关系有一些经验/知识,请随时分享。

【问题讨论】:

  • 我不明白 binary cross entropy 与 sigmoid 作为最后一个激活函数如何工作。谁能给我解释一下?
  • 使用 Sigmoid 和二元交叉熵是因为它是一个多标签问题,文章可以有多个标签。如果这是一个具有独占类的多类问题,我会使用带有分类熵的 softmax。这个链接解释了gombru.github.io/2018/05/23/cross_entropy_loss的区别@我不确定我理解“它是如何工作的”,为什么它不能工作?

标签: tensorflow keras conv-neural-network


【解决方案1】:

您通常应该考虑的一件事是数据是否不平衡以及您的模型对每个类别的表现如何(例如使用sklearn.metrics.confusion_matrix

我认为数据集(20 个类别中的 2000 个)可能不足以让深度学习从头开始工作。您可以考虑扩充您的数据集,或者您可以先尝试为您的任务微调预训练的语言模型。请参阅https://github.com/huggingface/pytorch-openai-transformer-lm。这可以帮助您克服一般数据集大小的问题。

【讨论】:

    猜你喜欢
    • 2020-10-21
    • 1970-01-01
    • 2021-08-29
    • 2019-11-27
    • 1970-01-01
    • 2022-01-12
    • 2019-02-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多