我正在研究Matlab中的(双层)前馈神经网络。我正在调查可以最小化分类错误的参数。
google search显示这些是其中的一部分:
我改变了Matlab中隐藏神经元的数量,从1到10变化。我发现分类误差接近0%,1个隐藏神经元,然后随着神经元数量的增加而略微增长。我的问题是:不应该有更多的隐藏神经元保证一个相同或更好的答案,也就是为什么分类错误会与更多隐藏的神经元一起上升?
另外,我如何在Matlab中改变学习率,动量,训练类型,时代和最小误差?
非常感谢
答案 0 :(得分:1)
由于您正在考虑一个简单的两层前馈网络,并且已经指出了需要考虑的6种不同的事情来减少分类错误,我只想添加一件事,那就是训练数据的数量。如果您使用更多数据训练神经网络,它将更好地工作。请注意,使用大量数据进行训练是从神经网络获得良好结果的关键,特别是来自深度神经网络。
为什么分类错误与更多隐藏的神经元一起上升?
答案很简单。您的模型过度拟合了训练数据,从而导致性能不佳。请注意,如果增加隐藏层中的神经元数量,则会减少训练错误,但会增加测试错误。
在下图中,了解隐藏图层大小增加会发生什么情况!
如何在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 backpropagation和gradient descent with momentum and adaptive learning rate backpropagation。