我们将使用 TensorFflow 训练神经网络并在微控制器中实现它。我们的神经网络将预测 sin(x)。使用相同的过程,我们可以用正确的数据预测不同的输出。
人工神经网络在维基百科中被定义为“受构成动物大脑的生物神经网络模糊启发的计算系统。此类系统通过考虑示例来“学习”执行任务,通常无需使用特定于任务的规则进行编程。
所以第一部分是我们必须教神经网络 sin(x) 函数是怎样的。
我们在 colab 中使用 TensorFlow,这里是链接https://colab.research.google.com/drive/1ABDULCjzvNZJ6TwHpTvAJnKeyM-_kfPR
我们需要训练数据,所以我们得到 x, y 对训练:
x, y 对用于测试我们的神经网络:
神经网络中的基本计算单位是神经元或节点,它从其他一些节点或外部源接收输入并计算输出。每个输入都有一个关联的权重 (a),这是根据其对其他输入的相对重要性加上常量分配的,称为偏差 (b)。该节点将非线性函数应用于其输入的加权和,称为激活函数。在我们的例子中,我们使用 softsign 函数作为激活函数。
我们现在定义一个简单的神经网络,节点按层排列。相邻层的节点之间有连接或边缘。所有这些连接都有与之关联的权重。我们使用四层,一个输入层,两个隐藏层和一个输出层。
我们在输入层有一个节点,在第一个隐藏层有 10 个节点,在第二个隐藏层有 3 个节点,在输出层有一个节点。这是图表:
在 TensorFlow 中定义为:
。
我们评估模型,误差非常低。
为了在微控制器中实现模型,我们需要架构,我们之前定义了三层和每个节点的权重。
正如我们所料,我们有三层,这些是权重:
输入层只有一个输入 x 我们要计算 y = sin(x)。
第一隐藏层有10个节点,每个节点执行操作:
所以第一个数组有 10 个元素,每个节点一个“a”,第二个 10 个元素的数组是“b”。
第二个隐藏层有 3 个节点和 10 个输入,所以我们有一个 3x10 数组用于每个节点的“a”,以及 3 个数组用于“b”。
输出层是一个有 3 个输入的节点,所以我们有 3 个“a”和一个“b”。
我使用 platformio + vs 代码。对于 MT3620,您需要从此处安装平台支持https://github.com/Wiz-IO/platform-azure
现在我们可以在微控制器中实现它。我已经在 MT3620 板的 M7 内核和 ESP32 中实现了它。
我们只需要两个函数,一个用于层,我们传递每个节点的输入数、层中的节点数、权重、偏差和输入:
一个用于激活函数,softsign 函数:
我们使用串行端口请求输入,然后将其传递给第一个隐藏层,结果传递给第二个隐藏层,输出传递给输出层:
最后,我们将预测与 sin 函数的输出进行比较。
可以在 ESP32 中使用相同的代码并获得相同的结果。
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
全部0条评论
快来发表一下你的评论吧 !