神经网络类型和拓扑需要推荐

时间:2014-03-02 21:42:51

标签: neural-network

我在微控制器应用程序中有一个研究项目。有一个带2 x 2磁传感器和磁铁的电路板。目的是通过使用4个传感器(最左侧,最右侧,靠近左侧,靠近右侧)的数据来计算磁体的位置(X,Y,Z)。传感器的输出为0..5伏(没有磁场,输出为2.5伏)。

Hardware with 2 x 2 magnetic sensors and a magnet

现在我想训练一个神经网络,从4个传感器输入预测磁铁的x,y,z坐标。但我不知道正确的神经元网络类型(多层感知器,Adaline,Hopfield和所有其他类型)和拓扑(每层有多少层和多少隐藏神经元)。

上周,我使用Lego积木进行测量,以获得磁铁的“精确”位置并保存传感器数据。您可以在此处找到测量值:measurement03_xyz.csv。以下是高度/ z = 10.6 mm

的测量摘录
Lt.Far  Rt.Far  Lt.Near Rt.Near X   Y   Z
2.45357 2.43891 2.43891 2.52688 -16 -16 10.6
2.45846 2.46334 2.51222 2.6784  -8  -16 10.6
2.48289 2.46334 2.63441 2.68328 0   -16 10.6
2.49267 2.45357 2.69306 2.54643 8   -16 10.6
2.46334 2.43402 2.56598 2.48778 16  -16 10.6
2.46334 2.51222 2.46823 2.65396 -16 -8  10.6
2.51711 2.64907 2.62463 3.14272 -8  -8  10.6
2.69306 2.72239 3.15738 3.38221 0   -8  10.6
2.74194 2.56598 3.41642 2.84457 8   -8  10.6
2.58065 2.45846 2.77615 2.53666 16  -8  10.6
2.48289 2.62952 2.46823 2.69795 -16 0   10.6
2.66862 3.18671 2.66373 3.33822 -8  0   10.6
3.24536 3.4262  3.33822 3.57282 0   0   10.6
3.46041 2.83969 3.63148 2.90323 8   0   10.6
2.81525 2.51222 2.90811 2.54643 16  0   10.6
2.49267 2.65885 2.45357 2.57576 -16 8   10.6
2.69306 3.26979 2.54154 2.81036 -8  8   10.6
3.37732 3.57282 2.81525 2.93255 0   8   10.6
3.5826  2.88368 2.88368 2.65396 8   8   10.6
2.8739  2.51711 2.6393  2.49756 16  8   10.6
2.47312 2.55621 2.42913 2.50244 -16 16  10.6
2.56598 2.76637 2.46334 2.54154 -8  16  10.6
2.81036 2.84946 2.50733 2.55621 0   16  10.6
2.87879 2.63441 2.52199 2.51711 8   16  10.6
2.64907 2.47801 2.48778 2.47312 16  16  10.6

(前4列是以伏特为单位的传感器输入,后3列是以mm为单位的位置)

我的第一次尝试是Neurophstudio创建一个多层感知器网络,如下所示: 3 Perceptron Network with 3 hidden layers

但是当我开始训练时,整个网络错误会非常非常缓慢地下降。

我希望有神经网络经验的人能给我一个网络类型和拓扑选择的建议。

另外:这里有一些测量图表:

- 左侧,接近传感器的电压,单位为伏特:

Voltage of the left, near sensor in volts

- 左侧,接近传感器的电压,以伏特为单位,取决于所有测量点(左侧)的固定点距离(X = -8mm,Y = 0mm,Z = 1mm),仅适用于y = 0mm时的XZ平面:

Voltage of the left, near sensor in volts in dependence of the distance to the fix point (X=-8mm, Y=0mm, Z=1mm)

2 个答案:

答案 0 :(得分:0)

MLP应该这样做。尽可能简单(但不简单)。首先尝试只有一个隐藏层,尽可能少的神经元,例如从4-5-3开始(具有5个神经元的单个隐藏层)。训练和验证网络,只要它们提供价值,就只能添加更多层或神经元。

请记住将您的训练集分成训练集和验证集,否则您将面临过度拟合数据的风险,尤其是在您选择复杂网络时。只要您在验证中获得较低的错误,就可以增加复杂性。如果您开始在训练集上看到较低的错误但在看不见的数据上没有差异/更高的错误,那么您就会过度拟合并且应该回到更简单的网络。

还要考虑规范化您的数据,因为它有助于培训,例如:发明一种坐标系和电压参考系统,其中输入和输出都被缩放以帮助训练算法收敛。 Here is a good article on normalization and encoding

答案 1 :(得分:0)

当人们回答诸如“如何使用X来解决Z”这样的问题时,我通常不喜欢这样的问题,例如“为什么在使用Y时使用X”,所以我提前道歉这样做。

在你的情况下,我只是将4个传感器的4个传感器的值三角测量,不需要训练神经网络。

如果您的传感器标记如下:

A o ---------------o B
  |\             / |
  |  \         /   |
  |    \     /     |
  |      \ /       |
  |      / \       |
  |    /     \     |
  |  /         \   |
  |/             \ |
D o ---------------o C

然后你有以下4组使用(A,B,C)(A,D,C)(D,A,B)和(B,C,D)。找到磁铁的X,Y,Z坐标可以减少解决棱镜的问题。

也就是说,如果你打算使用神经网络完成任务,你必须尝试不同的配置,直到你对结果感到满意为止。

  • 确保你有一个非常大的训练集。
  • 然后创建单独的交叉验证数据集

这个想法是使用训练集来训练网络和交叉验证集,以探索改变各种参数的效果,例如神经网络的地形或学习系数等。