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