您能在用于机器学习的Arduino Uno等微处理器上实现简单的神经网络吗?

评论

出于好奇,您为什么要这么做?
我不是该领域的专家,但最后我听说,对NN的训练是在仿真中完成的,并且该NN是在机箱上实现的,并且可能是一个具有比Arduino高级别控制器的控制器。 >
好吧,您不必链接它,只需在仿真中训练NN,然后提取NN的拓扑,包括边缘权重和节点链接。然后,您对NN进行编程(这只是您要求解的一个方程式)。我认为在进行此项目之前,需要做更多的研究。

可能值得一提的是我16岁,这是我在高中的电子专业。

在这种情况下,我认为您在尝试实现这一目标时超出了职责范围?

#1 楼

您可以在微控制器上训练神经网络吗?也许吧,但是请不要尝试。您可以在微控制器上使用NN进行分类吗?当然,只要您可以计算传播节点和边值的结果并处理乘法。

评论


$ \ begingroup $
我同意。假设您可以在Arduino上获得具有所需复杂度的神经网络进行训练,那么您仍将花费大量的训练时间。 NN的外部训练是顺理成章的方法。
$ \ endgroup $
–fgb
2012年11月28日23:43

#2 楼

当然可以在Arduino上实现它。这里有3个实现神经网络的Arduino库:


Neuroduino
Arduino基础知识
ArduinoANN

Arduino可以处理的是一个单独的问题,尤其是在培训方面-培训数据的数万次迭代。在快速的机器上进行训练,然后将神经元权重复制到Arduino,将是开发实现的更明智的方法。

#3 楼

是。如果您仅以前馈模式运行它,并且离线进行其他地方的培训:

我在Arduino UNO上编写了3层(5-5-2)前馈ANN。它在移动机器人上运行。每当机器人撞到东西时,它将重新训练网络。网络的前馈部分是实时运行的;而反向传播训练大约需要5到20秒。我想您可以调整网络的大小以及使用参数来使其运行更快一些,但是如果您打算在Arduino上进行反向传播,我认为它会太慢。

加快速度的一些想法包括:


使用固定点与浮点数(对于不带FPU的MCU)
使用具有FPU的MCU
/>使用更简单的激活功能(即$ \ tanh $)代替Sigmoid
让培训阶段离线在PC上进行吗?

这里是我在网络上做的快速记述。

#4 楼

的确是这样,可以将神经网络嵌入微控制器中。科学文献中有很多这样的例子,但是我可以举一个惊人的例子,说明如果您足够聪明,可以使用非常简单的MCU来完成。作者在《进化比特的尖峰》中描述了实时尖峰神经网络的实现以及对其进行训练的遗传算法,以控制差速轮机器人。整个代码在嵌入1立方英寸爱丽丝机器人的微型PIC16F628 4MHz MCU中运行。