更新(28 / 05 / 2024): 我们所有产品都有大量库存,也可以在    立即购买

如何在 SBC 中集成神经网络

在本文中,我们将学习如何将神经网络集成到 SBC. 我们将创建一个 3 层神经网络来逼近函数 sin(x)。

该过程分为两部分: 1. 训练网络,这将在 PC 上完成; 2. 运行网络,这将在 SBC 中完成。

第 1 部分。神经网络训练

对于这一部分,我们将使用 Jupyter 笔记本,以及 Keras、Numpy 和 Pylab 库。

Step 1. 导入必要的库

步骤 2. 创建训练数据集

我们的数据集包含 10000-0*pi 范围内的 2 个随机数作为输入 X,它们对应的 sin 函数作为输入 Y。请注意,我们已将 Y 的范围调整为从 0 到 1。

步骤 3. 创建神经网络

为了创建神经网络,我们创建了一个模型对象并向其添加 3 层。 这是通过 Keras 库提供的 API 完成的。

第一层的神经元数量为 32,中间层为 32,输出为 1。

我们将使用 relu 和 sigmoid 激活。

使用的优化器是 Adam 和误差函数 MSE。

网络参数个数为 1153。

步骤 4. 培训

训练时,神经网络使用数据集来调整其参数,以使误差最小化。

在这种情况下,我们将整个数据集通过网络 10 次,分 32 个样本批次。

我们可以看到,在训练结束时,误差非常小,为 2.5e-5。

步骤 5. 验证

现在我们将最后一次测试神经网络并将其与预期值进行比较。 如图所示,网络非常接近正弦函数。

步骤 6. 导出数据

此功能允许您将神经网络的权重导出到文本文件,然后从 SBC 加载它。

第 2 部分。在 SBC 上执行

首先,我们将回顾神经网络的实现。

神经网络分为 4 类:Neural_Network、Layer、Perceptron 和 Activation。

每个类基本上都有一个称为 process 的方法,负责完成所有工作,以及加载和保存方法。

活化 类,实现线性、relu、sigmoid 和 tanh 激活函数。

感知器 类负责执行所有的乘法。 请注意,向量乘法功能是在 ASM 中实现的,以免牺牲性能。

ASM 与 Python 实现

向量乘法负责大部分 CPU 使用,因此在 ASM 上实现它可以大大提高库的性能。 在这个例子中,执行了一个简单的 100×100 向量乘法。 一个python实现需要1339us,而ASM实现只需要28us。 在保留相同输出值的同时,这大约快 50 倍。

类将几个感知器并行分组。

班级 神经网络 堆叠所有网络层。

最后,我们可以查看/检查网络的使用情况。

我们将带有权重的文件复制到 SBC 并执行以下 main.py。

此代码从 sine.unn 文件加载网络并计算 0.123 的正弦,然后显示网络获得的值和真实正弦,以及计算时间(以微秒为单位)。

输出:

如我们所见,输出近似于预期值,小数点后 4 位。

这个网络有 1153 个权重,需要 4612(1153*4) 字节的 RAM 来存储浮点值的权重,处理时间为 5.8ms。

如果你喜欢这个内容,你可以关注我们 Twitter, YouTube, Facebook or LinkedIn 保持更新这样的内容。

有任何问题或要求吗?
联系我们!我们将在 24 小时内回复!

图标
联系我们 ArduSimple
关闭

想了解更多关于 GPS/RTK 的信息吗?

1. 我们的工程团队会联系您解决任何问题
2.我们会及时通知您促销和新产品发布
3.只有当我们有重要新闻时您才会收到我们的消息,我们不会向您发送垃圾邮件