【发布时间】:2021-04-07 21:20:18
【问题描述】:
可以看出,在 epoch 60 左右,我的验证损失开始增加,而我的验证准确度保持不变。似乎在那个时候它开始过度拟合,但如果只是记住我的训练数据,训练损失不会继续减少到接近零吗?我的模型似乎也很小,无法过度拟合(我正在尝试对 FFT 数据进行分类)。是不是我公然做错了什么?
这是我的模型:
model = Sequential()
model.add(Conv1D(filters = 32, kernel_size = 3, activation = 'relu', input_shape = (size, 1)))
model.add(Dropout(dropout))
model.add(GlobalMaxPooling1D())
model.add(Dropout(dropout))
model.add(Dense(64, activation='relu'))
model.add(Dense(1, activation='sigmoid')) #Output layer
我的训练数据形状:
x: (1038, 2206)
y: (1038, 1)
我的参数:
EPOCHS = 300
LR = 1e-3
辍学 = 0.5
BATCH_SIZE = 128
顺便说一句,我的验证准确率约为 98%,但是当我在相同的验证数据上测试我的模型时,我得到了不正确的输出。我不认为我的验证数据制作不正确,因为我制作它的方式与我的训练数据完全相同。
【问题讨论】:
-
你的数据集大小是多少?
-
@Andrey 抱歉,我输入了我的验证数据形状。我有 1038 个样本,包含 2206 个值(每批将是 (128,2206))。
-
使用过拟合,如果你的训练损失足够低,那么它将保持在一般范围内,而验证损失会增加。损失也很难变为零,即使是训练损失。我相信你对你过度拟合的最初假设是正确的。
-
所以我唯一的选择是扩大我的数据或缩小我的网络? @AaronJones
-
不,您还可以评估您当前的数据集,看看是否有更好的方法可以分割您的数据集。也许您的验证数据集中有一些数据与您的训练数据集有很大的不同,可能会导致这种增加。我也不会让你的模型更小,而只是重新评估它的架构。
标签: python tensorflow machine-learning keras deep-learning