我正在研究用于复杂文本分类(主要是电子邮件和消息)的CNN 模型。该数据集包含分布在 10 个不同类中的大约 100k 个条目。我实际的 Keras 顺序模型具有以下结构:
model = Sequential(
[
Embedding(
input_dim=10000,
output_dim=150,
input_length=400),
Convolution1D(
filters=128,
kernel_size=4,
padding='same',
activation='relu'),
BatchNormalization(),
MaxPooling1D(),
Flatten(),
Dropout(0.4),
Dense(
100,
activation='relu'),
Dropout(0.4),
Dense(
len(y_train[0]),
activation='softmax')])
在编译模型时,我使用Nadam优化器,将LabelSmoothing设置为 0.2的categorical_crossentropy损失。
在模型拟合中,我使用30 Epochs和Batch Size设置为512。我还使用EarlyStopping来监控 val_loss 并将耐心设置为 8 个 epoch。测试大小设置为数据集的 25%。
实际上,训练在 16/18 epoch 后停止,值在 6/7 epoch 后开始波动,然后一直持续到 EarlyStopping 停止。这些值平均如下:
损失:1.1673 - 准确度:0.9674 - val_loss:1.2464 - val_accuracy:0.8964
测试精度达到:
损失:1.2461 - 准确度:0.8951
现在我想提高我的 CNN 的准确性,我尝试了不同的超参数,但就目前而言,我无法获得更高的值。因此,我试图弄清楚:
- 如果还有改进的余地(我敢打赌)
- 如果解决方案是在微调我的超参数,如果是这样,我应该更改哪些?
- 如果通过向模型添加层来更深层次可能有任何用处,如果是这样,如何改进我的模型
- 是否有任何其他深度学习/神经网络方法而不是 CNN 可以带来更好的结果?
非常感谢任何愿意提供帮助的人!:)