神经网络参数选择

时间:2017-01-01 23:18:01

标签: matlab neural-network

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

google search显示这些是其中的一部分:

  • 隐藏层中的神经元数量
  • 学习率
  • 动量
  • 培训类型
  • 历元
  • 最小错误
  • 还有其他建议吗?

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

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

非常感谢

1 个答案:

答案 0 :(得分:1)

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

  

为什么分类错误与更多隐藏的神经元一起上升?

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

在下图中,了解隐藏图层大小增加会发生什么情况!

enter image description here

  

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

我希望您已在Matlab中看到feed forward neural net。您只需要操作函数def h(i: Int): EitherT[Future, String, Int] = EitherT.right(Future.successful(i + 1)) val fut = Future.successful(1) // mapping gives us Future[EitherT[Future, String, Int]] fut.map(h) // lifting to EitherT and flatMap gives us EitherT[Future, String, Int] EitherT.right(fut).flatMap(h) 的第二个参数feedforwardnet(hiddenSizes,trainFcn) - 训练函数。

例如,如果您想使用梯度下降与动量和自适应学习率反向传播,那么使用trainFcn作为训练函数。如果您想使用梯度下降和自适应学习率反向传播,也可以使用traingdx

您可以根据需要更改功能的所有必需参数。例如,如果您想使用traingda,则只需执行以下两个步骤即可。

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

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

示例

net.trainParam

请注意这一点 - gradient descent with adaptive learning rate backpropagationgradient descent with momentum and adaptive learning rate backpropagation