在java中编写一个简单的反向传播+前馈神经网络类后,我尝试使用阴影施法器NN来检查四边形(或三角形)是否在顶点上投射阴影。
输入(标准化,8 + 2 * targetNumber total):
输出(标准化,targetNumber总计):
问题:需要考虑多少个神经元?我是否必须尝试神经元数量 - 隐藏层,隐藏层数,最小训练迭代,......的所有组合? 有没有办法预见到这一点?
问题:对于数百万个顶点,这种方法与通常的光线跟踪器的性能如何相比(NN似乎比光线跟踪器更令人尴尬地平行)?
答案 0 :(得分:3)
问题:对于数百万个顶点,这种方法与通常的光线跟踪器的性能如何相比(NN似乎比光线跟踪器更令人尴尬地平行)?
您尝试解决的问题似乎不是机器学习模型的问题。对于复杂的统计数据的问题,应该使用这样的方法,对于这些问题,发现良好的算法解决方案对于人来说太难了。你可以深入分析这些容易出现的问题(在某种意义上,你可以找到高效的算法)(因为它只是2/3维数据)应该使用经典方法,而不是神经网络(也没有任何其他machnie学习模型)来解决)。
即使你会尝试这样做,你对问题的表达也准备不足,网络不会通过显示这样的数据来学习“影子的想法”,有两个很多模型可以用神经网络表示一致与您的数据。即使是受过训练的网络的效率似乎也不能与“算法”替代方案相比。
总结一下 - 没有理由使用这些方法,事实上,使用它们:
问题:需要考虑多少神经元?我是否必须尝试神经元数量 - 隐藏层,隐藏层数,最小训练迭代,......的所有组合?有没有办法预见到这一点?
正如我之前所说,无论你使用什么参数,它都不会很好地学习这类数据。但对于“未来参考” - 对于“简单”神经网络,实际上你总是只需要一个隐藏层。由于梯度消失现象(深度学习是一次成功的修复),在大多数情况下,更多的隐藏层实际上并没有帮助。隐藏图层大小有一些拇指规则,但没有真正的数学答案。一个好的选择是使用大量隐藏单元并添加强正规化,这将防止网络过度拟合,这可能是由于隐藏层太大而导致的。 Regarind迭代次数 - 您应该从不将其用作参数。只要网络不符合某些明确定义的停止标准,就应对网络进行培训 - 迭代次数不是其中之一。最经典和最好的工作是测量泛化误差(独立的验证集上的错误),当它开始上升时 - 停止学习过程。