【问题标题】:Neural network parameter selection神经网络参数选择
【发布时间】:2017-05-16 03:35:30
【问题描述】:

我正在研究 Matlab 中的(两层)前馈神经网络。我正在研究可以最小化分类错误的参数。

google search 透露这些是其中的一些:

  • 隐藏层中的神经元数量
  • 学习率
  • 势头
  • 培训类型
  • 时代
  • 最小误差
  • 还有其他建议吗?

我在 Matlab 中改变了隐藏神经元的数量,从 1 到 10 不等。我发现分类误差接近 0%,有 1 个隐藏神经元,然后随着神经元数量的增加而非常轻微地增长。我的问题是:不应该更多的隐藏神经元保证一个相等或更好的答案,即为什么分类错误会随着更多的隐藏神经元而上升?

另外,我如何改变 Matlab 中的学习率、动量、训练类型、时期和最小误差?

非常感谢

【问题讨论】:

  • 您在寻找什么类型的神经网络?说前馈网络?还是别的什么?
  • 添加:两层前馈神经网络

标签: matlab neural-network


【解决方案1】:

由于您正在考虑一个简单的两层前馈网络,并且已经指出了减少分类错误需要考虑的 6 个不同事项,我只想添加一件事,那就是训练数据量。如果你用更多的数据训练一个神经网络,它会工作得更好。请注意,使用大量数据进行训练是从神经网络(尤其是深度神经网络)获得良好结果的关键。

为什么分类错误会随着隐藏神经元的增多而上升?

答案很简单。您的模型过度拟合了训练数据,因此导致性能不佳。请注意,如果您增加隐藏层中的神经元数量,则会减少训练错误但会增加测试错误。

在下图中,看看增加隐藏层大小会发生什么!

如何在 Matlab 中改变学习率、动量、训练类型、历元和最小误差?

我希望您已经在 Matlab 中看到过feed forward neural net。您只需要操作函数feedforwardnet(hiddenSizes,trainFcn) 的第二个参数,即trainFcn - 一个训练函数。

例如,如果您想使用 具有动量和自适应学习率反向传播的梯度下降,则使用 traingdx 作为训练函数。如果你想使用梯度下降和自适应学习率反向传播,你也可以使用traingda

您可以根据需要更改函数的所有必需参数。例如,如果你想使用traingda,那么你只需要遵循以下两个步骤。

  • net.trainFcn 设置为traingda。这会将 net.trainParam 设置为 traingda 的默认参数。

  • net.trainParam 属性设置为所需值。

示例

net = feedforwardnet(3,'traingda');
net.trainParam.lr = 0.05;  % setting the learning rate to 5%
net.trainParam.epochs = 2000  % setting number of epochs

请看这个 - gradient descent with adaptive learning rate backpropagationgradient descent with momentum and adaptive learning rate backpropagation

【讨论】:

    猜你喜欢
    • 2012-04-29
    • 2013-12-20
    • 2020-02-21
    • 2020-04-25
    • 2016-10-28
    • 2016-01-22
    • 1970-01-01
    • 2020-09-29
    • 2013-07-01
    相关资源
    最近更新 更多