Neural network 基于Arduino-Uno的神经网络

Neural network 基于Arduino-Uno的神经网络,neural-network,artificial-intelligence,arduino-uno,Neural Network,Artificial Intelligence,Arduino Uno,目前,我正试图实现Martin Howard等人在《神经网络设计》一书中提出的“函数逼近的案例研究”。这本书可以免费下载 其想法是使用最少的硬件实现网络,因此,我继续在PC机上离线开发网络模型,然后在硬件上实现网络 首先,我使用了神经网络工具箱和Matlab的相关函数。神经网络是在Matlab中开发和训练的。神经网络结构、权值和偏差值由Matlab识别 我们有三个输入和一个输出。因此,网络为3:5:1 使用以下代码在Arduino Uno板上实现上述开发的网络 #定义数字传感器输入3 #定义nu

目前,我正试图实现Martin Howard等人在《神经网络设计》一书中提出的“函数逼近的案例研究”。这本书可以免费下载

其想法是使用最少的硬件实现网络,因此,我继续在PC机上离线开发网络模型,然后在硬件上实现网络

首先,我使用了神经网络工具箱和Matlab的相关函数。神经网络是在Matlab中开发和训练的。神经网络结构、权值和偏差值由Matlab识别

我们有三个输入和一个输出。因此,网络为3:5:1

使用以下代码在Arduino Uno板上实现上述开发的网络

#定义数字传感器输入3
#定义numberHiddenNeurons 5
浮点传感器值[数字传感器输入]={0,0.4175,4.5925};
浮动隐藏层路由[数字隐藏区];
浮点hiddenLayerWeights[numberHiddenNeurons][numberSensorInputs]={38.49837624633022,4.8228789906421374,1.3602896899243053},{3.8474962878030912,-0.84371644817851899,-28.923549991793433},{-27.727414898404337,-11.92309062680966,19.5376762258441405},{3.8569873599794,-3.8475757590905},{0.29236102795668545,0.58525756760800285,-0.38214991270897147}};
浮动hiddenLayerBias[numberHiddenNeurons]={39.11544288218294,-28.225689527012,-16.51740880294345,0.8700678975676468,0.90940774428664883};
浮点输出层权重[numberHiddenNeurons]={0.76894513764837624,-10.951307034874729,0.2457977459618178,10.887280941632419,4.3216425653566999};
浮点输出LAYERBIAS=-2.8262415757548638;
无效设置(){
//以每秒9600位的速度初始化串行通信:
Serial.begin(9600);
}
void循环(){
//传递的参数是神经元编号。

对于(int j=0;jj),您忘记了这个问题。问题是:从两个实现(Matlab和Arduino)获得的结果是不同的。结果有很大的差异。据了解,差异是由于Matlab和Arduino的数字精度造成的。但是我们如何解决这个问题。你能提供一个Matlab的输入/输出示例,正确的输入/输出和Arduino的输入/输出,不正确的输入/输出吗?好奇的是,你为什么要使用
十六进制
格式?给定的输入为,p=[0.4175 4.5925];Matlab生成4.3624的输出。Arduino生成6.7564897537231445的输出。在Serial.println函数中指定的参数16是打印浮点数时使用的小数位数。请参阅:@KaderS我刚刚将您的源代码移植到
C
文件,它打印
6.7564897537231445
,因此没有帽子。也许你应该回顾一下matlab移植到c的过程,你没有发布原始代码,所以我们帮不了什么忙。
c
代码应该更容易调试,至少可以将部分结果与你的matlab版本进行比较。