在分析了我的神经网络的代码后,我意识到计算网络中每个弧的权重变化的方法 ( -rate*gradient + momentum*previous_delta - decay*rate*weight
),已经给定了梯度,是瓶颈(包含 55% 的样本)。
有什么技巧可以有效地计算这些值吗?
在分析了我的神经网络的代码后,我意识到计算网络中每个弧的权重变化的方法 ( -rate*gradient + momentum*previous_delta - decay*rate*weight
),已经给定了梯度,是瓶颈(包含 55% 的样本)。
有什么技巧可以有效地计算这些值吗?
这是正常行为。我假设您正在使用迭代过程来解决每个进化步骤的权重(例如反向传播?)。如果神经元的数量很大并且训练(回测)算法很短,那么在神经网络的训练过程中,像这样的权重突变会消耗更多的计算时间是很正常的。
您是否使用简单的 XOR 问题或类似问题得到了这个结果?如果是这样,您可能会发现,如果您开始解决更复杂的问题(例如多维数组中的模式检测、图像处理等),这些函数将开始消耗很少的计算时间。
如果您正在分析,我建议您分析一个更接近神经网络设计目的的问题(我猜您设计它不是为了解决 XOR 或玩井字游戏),您可能会发现优化代码-rate*gradient + momentum*previous_delta - decay*rate*weight
或多或少是浪费时间,至少这是我的经验。
如果您确实发现此代码在实际应用程序中是计算密集型的,那么我建议您尝试减少通过结构更改执行此代码行的次数。神经网络优化是一个丰富的领域,我不可能从如此广泛的问题中给你有用的建议,但我会说,如果你的程序异常缓慢,你不太可能通过在如此低的水平上进行修补来看到显着的改进代码。但是,我会根据自己的经验提出以下建议:
static
中的循环。请注意,这是对我解释为非技术问题的非技术答案。