python - Keras CNN,高训练低测试
问题描述
我正在做一个文本分类,我的数据集大小是 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))
解决方案
调试模型的第一步是像示例一样绘制训练验证曲线。
现在根据曲线的行为方式,可能会有以下可能的推论和解决方案。
两条曲线随着模型的训练而发散,训练不断改进,而测试要么变得更糟,要么比训练更早饱和。
原因:模型过度拟合训练,需要正则化,例如。辍学,体重衰减等。
两条曲线在末端紧贴在一起,没有进一步的改进发生。
原因:模型饱和或陷入局部最小值,尝试提高学习率以推出最小值,如果仍然没有重大改进,请尝试增加模型的复杂度。
两条曲线在末端已经饱和,但相距很小,并且在进一步训练时没有发生重大变化。
原因:模型已经从可用数据中学到了它可以做的事情并且不会进一步改进,尝试数据转换以生成新数据或获取更多数据。
推荐阅读
- javascript - 异步/等待同步函数改变反应状态
- html - 当前输入值未传递给 AngularJS 中的事件处理程序
- r - 将多列合并为一列并根据它来自的列重命名值
- javascript - GET API_Link net::ERR_FAILED -------- Uncaught (in promise) TypeError: Failed to fetch
- python - 尝试使用 Seaborn 绘制绘图,但错误提示“str”对象没有属性“get”
- swift - onReceive String.publisher 导致无限循环
- java - 如何使用 ReactorCloudFoundryClient 启动 CloudFoundry 应用程序?
- c# - 替换字符串中的“\”
- python - 如何“梳理”列表以查找某些字符串?
- python - 使用 rabbitmq 和 pika 运行长任务