我正在尝试使用brain.js
或synapse.js
(或任何其他JS NN库)来完成以下操作:
我的输入如下:
{
accelX: 0.12,
accelY: 0.25,
accelZ: 0.91,
powerA: 1,
powerB: 0.75,
powerC: 0.44,
powerD: 0.92
}
我希望输出为电机功率:
{
powerA: 1,
powerB: 0.75,
powerC: 0.44,
powerD: 0.92
}
这样accel
接近0.我想我可以通过随机调整每个电机的功率来训练它,然后检查加速度是否接近0.如果它们是,则将它包含在训练集。如果没有,那么不要包括在训练集中。
这样,随着时间的推移,我将拥有一个包含7个输入的各种状态的训练集,以及适当的输出应该是什么,以实现我在accel的所需目标0。我的问题是:我该如何构建这个?我对ANN还是比较新的。我不是在找人为我编写代码或为我解决这个问题,但可能是正确方向的一般指示。
如果有任何不清楚的地方,请添加评论,我会更新问题以澄清。
由于
答案 0 :(得分:1)
首先,我看到输入和输出都有电机功率。通过这种方式,我假设您的意思是通过电机的当前功率以及当前的加速度值来确定电机的下一个功率设置。我还假设您有某种“物理功能”,它接受来自神经网络的输出(电机功率),并根据引起运动的电机使加速度值适当变化。最终目标是使用每个加速度的0值来休息。
我不建议使用训练集。您需要做的是创建一个评估神经网络有效性的评分函数。一个非常简单的方法可能是通过100个循环运行神经网络,然后将该神经网络的平均加速度作为分数。现在的目标是尽量减少分数。
将神经网络权重设置为随机值。并将优化算法应用于神经网络的权重。优化算法调整参数(权重)以降低分数函数。不需要培训数据。
有许多不同的优化功能。模拟退火可能是最容易实现的,但我能想到的非常有效的优化算法。其他可能性包括Nelder Mead,Genetic Algorithms或Hill Climbing。