是否可以在微控制器上运行神经网络


23

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


2
出于好奇,您为什么要这么做?
乔什·范德·胡克

1
我不是该领域的专家,但是最后我听说,NN的训练是在仿真中完成的,并且NN是在机箱上实现的,并且可能是一个比Arduino高的控制器。
乔什·范德·胡克

1
好吧,您不必链接它,只需在仿真中训练NN,然后提取NN的拓扑,包括边缘权重和节点链接。然后,您对NN进行编程(这只是您必须求解的一个方程式)。我认为在进行此项目之前,需要做更多的研究。
乔什·范德·胡克

1
可能值得一提的是我16岁,这是我在高中学习电子专业的工作。
约旦

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

Answers:


10

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


1
我同意。假设您可以获得在Arduino上进行训练所需的复杂性的神经网络,那么您仍然需要大量的训练时间。NN的外部训练是顺理成章的方法。
fgb 2012年

23

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

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


5

是。如果仅在前馈模式下运行它,然后离线进行其他地方的训练:

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

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

  • 使用固定点还是浮点(对于不带FPU的MCU)
  • 使用具有FPU的MCU
  • 使训练阶段在PC上离线进行

这是我对网络所做的快速撰写


3

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.