在卷积神经网络中, 我正在培训CNN,在培训过程中,特别是在训练开始时,我得到了极高的训练错误。之后,此错误开始缓慢下降。在大约500个时期之后,训练误差接近零(例如0.006604)。然后,我采用最终获得的模型来测量其对测试数据的准确性,我得到了大约89.50%。 这看起来很正常吗?我的意思是在训练过程的一开始就获得很高的训练错误率。 我想提到的另一件事是,我注意到每当我减少隐藏节点的数量时,结果在训练结束时变得更好。
我的CNN结构是:
config.forward_pass_scheme = {'conv_v', 'pool', 'conv_v', 'pool', 'conv_v', 'pool', 'conv_v','full', 'full', 'full', 'out'};
以下是我的一些超级参数:
config.learning_rate = 0.01;
config.weight_range = 2;
config.decay = 0.0005;
config.normalize_init_weights = 1;
config.dropout_full_layer = 1;
config.optimization = 'adagrad';
我们非常感谢您对此方面的帮助和建议,并提前感谢您。
答案 0 :(得分:1)
如果在完全连接(fc)层中有大量隐藏单元且没有足够的训练数据,则网络将过度匹配到训练集。卷积层不太容易过度拟合,因为它们具有较少的参数。减少fc层中隐藏单元的数量可以减少过度拟合。为了调整这些超参数(如fc层中隐藏节点的数量),使用验证集,以便模型在测试集上提供良好的性能。虽然辍学有助于减少fc图层中的过度拟合,但如果添加太多隐藏单位可能还不够。
是的,一开始,预计训练误差会很高。 CNN使用随机优化进行训练,因此学习参数需要一些时间。
答案 1 :(得分:0)
隐藏的层/神经元越多,NN中的权重就越多。它意味着更多参数来模拟您的问题。因此,添加神经元/层可以提供更好的学习。
另一方面,训练更多的重量意味着更多的过度拟合风险。确保你的训练集中至少有5倍的样本,你的NN中有权重。
另一种防止过度拟合的解决方案是使用辍学。
顺便说一句,您使用哪个库?