Jas*_*per 24 classification machine-learning neural-network keras tensorflow
我正在尝试使用深度学习来预测来自约会网站的15个自我报告属性的收入.
我们得到的结果相当奇怪,我们的验证数据比我们的训练数据更准确,损失更低.这在不同大小的隐藏层中是一致的.这是我们的模型:
for hl1 in [250, 200, 150, 100, 75, 50, 25, 15, 10, 7]:
def baseline_model():
model = Sequential()
model.add(Dense(hl1, input_dim=299, kernel_initializer='normal', activation='relu', kernel_regularizer=regularizers.l1_l2(0.001)))
model.add(Dropout(0.5, seed=seed))
model.add(Dense(3, kernel_initializer='normal', activation='sigmoid'))
model.compile(loss='categorical_crossentropy', optimizer='adamax', metrics=['accuracy'])
return model
history_logs = LossHistory()
model = baseline_model()
history = model.fit(X, Y, validation_split=0.3, shuffle=False, epochs=50, batch_size=10, verbose=2, callbacks=[history_logs])
Run Code Online (Sandbox Code Playgroud)
这就是准确性和损失的一个示例: 精度与250个神经元的隐含层和损失.
我们试图消除正规化和辍学,这正如预期的那样,以过度拟合结束(培训acc:~85%).我们甚至尝试用相似的结果大幅降低学习率.
有没有人见过类似的结果?
yhe*_*non 48
当您使用时会发生这种情况Dropout
,因为训练和测试时的行为是不同的.
训练时,一部分功能设置为零(自您使用以来,在您的情况下为50%Dropout(0.5)
).测试时,使用所有功能(并进行适当缩放).因此,测试时的模型更加稳健 - 并且可以提高测试精度.
Jas*_*ine 11
您可以查看Keras常见问题解答,特别是"为什么培训损失远高于测试损失?"部分..
我还建议你花一些时间阅读这篇 关于建立NN时应该始终考虑的"健全性检查"的非常好的 文章.
此外,只要有可能,请检查您的结果是否有意义.例如,在具有分类交叉熵的n级分类的情况下,第一时期的损失应该是-ln(1/n)
.
除了你的具体情况,我认为除了Dropout
数据集拆分有时可能会导致这种情况.特别是如果数据集拆分不是随机的(在存在时间或空间模式的情况下),验证集可能与列车基本上不同,即噪声较小或方差较小,因此更容易预测,从而导致验证集上的更高精度而不是训练.
此外,如果验证集与训练相比非常小,那么随机模型比训练更适合验证集.
这表明数据集中存在高偏差。这是不合时宜的。发出的解决方案是:
网络可能正在努力适应训练数据。因此,请尝试使用更大的网络。
尝试使用其他的深度神经网络。我的意思是说要稍微改变架构。
训练更长的时间。
尝试使用高级优化算法。
归档时间: |
|
查看次数: |
19492 次 |
最近记录: |