【问题标题】:High training error at the beginning of training a Convolutional neural network训练卷积神经网络开始时的高训练误差
【发布时间】:2016-07-01 11:52:26
【问题描述】:

在卷积神经网络中, 我正在训练一个 CNN,在训练过程中,尤其是在训练开始时,我得到了极高的训练错误。之后,此错误开始缓慢下降。在大约 500 个 Epoch 之后,训练误差接近于零(例如 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';

非常感谢您在这方面的帮助和建议,在此先感谢您。

【问题讨论】:

    标签: image-processing neural-network conv-neural-network recurrent-neural-network biological-neural-network


    【解决方案1】:

    如果您在全连接 (fc) 层中有大量隐藏单元并且没有足够的训练数据,则网络将过度拟合训练集。卷积层不太容易过度拟合,因为它们的参数较少。减少 fc 层中隐藏单元的数量可以减少过拟合。为了调整这些超参数(如 fc 层中隐藏节点的数量),使用了验证集,以便模型在测试集上提供良好的性能。虽然 dropout 有助于减少 fc 层中的过拟合,但如果添加太多隐藏单元,可能还不够。

    是的,一开始,预计训练误差会很高。 CNN 使用随机优化进行训练,因此需要一些时间来学习参数。

    【讨论】:

    • 亲爱的 Bharat,谢谢你的回答,事实上,我正在做的是在每个 Epoch 之后(完全通过训练数据),我使用训练中的批处理来评估训练错误放。这就是验证集的意思吗?另一件事我已经在 Adagrad 优化方法中使用了 dropout。从您的回答中,我了解到一开始训练错误很高是正常的。
    • 验证集与训练集是分开的。尽管查看训练误差可以了解优化是否收敛,但它并不能说明模型是否过度拟合。因此,使用验证集(或未用于训练的一小部分训练集)来衡量模型的性能。是的,就在第一个 epoch 训练错误可能很高之后。
    • 不,就我而言,它有所不同。它开始很高,然后非常缓慢地下降。但是,我在测试集上得到了很好的结果。只是,一开始就抛出一个很高的训练错误让我很困扰。
    【解决方案2】:

    隐藏层/神经元越多,NN 中的权重就越多。这意味着更多的参数来模拟你的问题。因此,添加神经元/层可以提供更好的学习是有道理的。

    另一方面,训练更多的权重意味着更多的过度拟合风险。确保训练集中的样本至少是 NN 中权重的 5 倍。

    防止过拟合的另一种解决方案是使用 dropout。

    顺便说一句,你使用哪个库?

    【讨论】:

    • 亲爱的 FiReTiTi,感谢您的帮助,在前两行中,您说使用更多层/神经元可以获得更好的结果,但是在我的 CNN 中发生了什么,因为我减少了隐藏神经元的数量得到更好的结果。我用这个代码[这里](github.com/jimmy-ren/vcnn_double-bladed)
    • 权重初始化是随机的,因此在相同的数据上运行两次相同的架构可能会提供不同的结果。当我在回答中说结果时,我会更具体,我的意思是学习。权重越多,学习效果越好,但在测试集上的预测可能越差。
    • 这就是我的想法。每次随机生成权重是否正确?以及确保每个实施的最佳结果或不太相同的结果的最佳方法是什么。
    • 设置相同权重的唯一方法是在生成随机值之前指定种子。
    猜你喜欢
    • 2018-05-01
    • 2019-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-21
    • 2020-09-10
    • 2017-08-31
    • 1970-01-01
    相关资源
    最近更新 更多