繁体   English   中英

如何提高CNN的F1分数?

[英]How can I improve f1-score of cnn?

我正在研究文档分类问题。 多标签分类20个不同的标签,接受培训的文档为1920个,验证的为480个。 该模型是具有FastText嵌入的CNN,我使用以Ngram为基线的逻辑回归模型。 问题在于,基线模型的f1-得分为0.36,而cnn仅给出0.3。

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

我一直在做一些参数调整,当前最好的参数是:退出。 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()

编辑
我认为通过在调整过程中将历元固定为20来得到一些错误的超参数。 我现在尝试使用停止条件,该模型通常收敛于30-35个纪元。 似乎退出0.5会更好,并且我目前正在调整批量大小。 如果有人对历元和其他超参数之间的关系有一定的经验/知识,可以随意分享。

通常应该考虑的事情是数据是否不平衡以及模型对每个类的性能如何(例如使用sklearn.metrics.confusion_matrix

我认为数据集(2000多个20个班级)可能不足以使深度学习从头开始。 您可以考虑扩充数据集,也可以从为任务微调预训练的语言模型开始。 参见https://github.com/huggingface/pytorch-openai-transformer-lm 。这通常可以帮助您克服数据集大小的问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM