繁体   English   中英

Keras CNN,高训练低测试

[英]Keras CNN, High training while low testing

我正在做一个文本分类,我的数据集大小是 16000 KB,我的问题是我有 95% 的训练和 90% 的测试。我可以增加测试吗? 如何?

这是我的代码

model = Sequential()
model.add(Conv1D( filters=256,kernel_size=5, activation = 'relu',input_shape=(7,1)))
model.add(layers.GlobalMaxPooling1D())
model.add(layers.Dense(128, activation='relu'))

model.add(layers.Dense(64, activation='relu'))

model.add(layers.Dense(64, activation='relu'))
model.add(layers.Dense(64, activation='relu'))

model.add(Dense(11, activation='softmax'))
model.summary()
model.compile(Adam(lr=0.001),
              loss='sparse_categorical_crossentropy',
              metrics=['accuracy'])
history = model.fit(X_train, y_train,
                    epochs=200,
                    verbose=True,
                    validation_data=(X_test, y_test),
                    batch_size=128)
loss, accuracy = model.evaluate(X_train, y_train, verbose=True)
print("Training Accuracy: {:.4f}".format(accuracy))
loss, accuracy = model.evaluate(X_test, y_test, verbose=False)
print("Testing Accuracy:  {:.4f}".format(accuracy))

调试 model 的第一步是像示例一样对 plot 训练验证曲线。

典型的训练验证曲线

现在根据曲线的行为方式,可能会有以下可能的推论和解决方案。

  1. 随着 model 的训练,两条曲线发散,训练不断改进,而测试变得更糟或比训练更早饱和。

    原因:Model 过度拟合训练,需要正则化,例如。 辍学,体重衰减等。

  2. 两条曲线在末端紧贴在一起,没有进一步的改进发生。

    原因:Model 饱和或陷入局部最小值,尝试增加学习率以推出最小值,如果仍然没有重大改进,请尝试增加 model 的复杂度。

  3. 两条曲线在末端已经饱和,但相距很小,并且在进一步训练时没有发生重大变化。

    原因:model 已经从可用数据中学到了它可以做的事情并且不会进一步改进,尝试数据转换以生成新数据或获取更多数据。

暂无
暂无

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

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