为了创建神经网络,此分步示例使用 总和.ipynb,其中预期输出只是输入的总和,并且仅使用一个隐藏层。虽然这个简单的操作可以通过多种方式完成,但训练 Moku 神经网络 实现几乎任何函数,从简单的代数到复杂的推理。查找其他示例 开始 并下载神经网络指南 开始.

一般先决条件

要开始使用 Moku 神经网络,您需要满足以下条件:

  • A Moku:Pro 设备(目前不支持 Moku:Lab 和 Moku:Go)
  • Moku 3.3版本,可在 Windows 或 macOS 上下载
  • Python 安装 (v3.11);请参阅我们的 Moku Python 安装指南 了解详情。您还可以安装导航器,例如 蟒蛇。您的 Python 安装必须是 v3.11 或更高版本。如果您不确定您使用的是哪个版本,请在命令提示符或终端中使用 Python –version 或 python3 –version 检查您的 Python 版本。

Python 先决条件

在您的计算机上安装 Python 后,请在计算机的命令行或终端窗口中运行以下命令来安装 Moku 神经网络 API。这将安装 API 并引入所有必需的依赖项:

pip install 'moku[neuralnetwork]'

这将安装以下组件: 

  • Moku神经网络API
  • 麻木 1.26.4
  • Ipykernel 6.29.5
  • Matplotlib 3.9.2
  • 特勤局 4.66.5
  • TensorFlow 2.16.2
  • SciPy(本例需要,但一般不需要) 

如果你经常使用 Python,那么这些软件包中的大多数可能都已安装。要验证,请打开命令提示符或终端并输入 pip 安装 X,在 Moku:Pro 上 X 是要安装的包的名称。如果包已安装,该命令将返回如下消息: 

(base) jessicapatterson@Jessicas-MacBook-Pro ~ % pip install numpy
Requirement already satisfied: numpy in /opt/anaconda3/lib/python3.12/site-packages (1.26.4)


安装 tensorflow 的步骤可能因您是否要使用 GPU 进行计算而异。有关如何安装的详细说明,请参阅 Tensorflow 的 文档,特别是如果您预计要使用 GPU。现在,只需使用 pip install tensorflow 即可确认已安装。

(base) jessicapatterson@Jessicas-MacBook-Pro ~ % pip install tensorflow

安装后,尝试调用 Tensorflow 并创建张量,使用以下命令:

(base) jessicapatterson@Jessicas-MacBook-Pro ~ % python -c "import tensorflow as tf; print(tf.reduce_sum(tf.random.normal([1000, 1000])))"

如果此命令执行时没有错误,则安装已完成,您可以继续下一步。如果它返回错误“TensorFlow 库已编译为使用 AVX 指令,但这些指令在您的计算机上不可用”,则您的计算机很遗憾无法运行 Tensorflow。请参阅其文档以了解此问题的解决方案。

(base) jessicapatterson@Jessicas-MacBook-Pro ~ % python -c "import tensorflow as tf; print(tf.reduce_sum(tf.random.normal([1000, 1000])))"
tf.Tensor(258.68292, shape=(), dtype=float32)

训练一个简单的神经网络

对于我们的第一个神经网络,我们将训练一个模型来生成输入通道的加权和,并带有可选的偏差/偏移项。权重和偏差将通过用 Python 创建的人工训练数据来确定。然后,我们可以将参数加载到 Moku 神经网络工具上,并使用 摩库示波器 及其内置的波形生成器。此示例将使用 Jupyter 笔记本轻松、交互式地执行 Python 代码。但是,从您最喜欢的 IDE 编写和执行的简单 Python 脚本也足够了。

首先从 Anaconda 窗口启动 Jupyter,然后上传并打开 sum.ipynb Python 笔记本。

步骤 1:导入和函数定义

首先运行第一个代码块(图 1),它将导入所有必要的依赖项,并调用神经网络 API。如果第一个代码块执行时没有错误,则所有部分都已到位,我们可以继续下一步。如果返回错误,请检查上面的部分以确保已安装所有先决条件。

图 1:sum.ipynb 所需的导入

接下来,如图 2 所示,生成训练信号。我们需要三个输入通道和一个模拟数据输出通道。您还可以使用 Moku:Pro 生成或捕获真实世界的训练数据。通过将我们生成的输入信号与所需的总和输出一起绘制来验证您的训练数据(图 3)。

图 2:生成模拟训练数据。

图 3:用于训练模型的模拟训练输入和期望输出。

接下来,我们必须准备用于训练模型的数据。我们首先将输入重塑为形式为 ( 的矩阵) 的矩阵。N,3)并形成输出(N,1) 然后将它们发送到模型。此代码如图 4 所示。

图 4:转置数据以进行训练。

在此示例中,我们现有的数据足以进行训练,但您可以选择生成其他训练数据或缩放输入和输出。如果您选择应用缩放,则需要在运行时在 Moku 神经网络中应用相同的缩放。

第 2 步:定义模型

现在我们可以构建神经网络模型了。我们首先创建一个名为“linn_model”的对象,它代表 Moku 神经网络仪器的配置和约束。一旦我们在图 5 中实例化了模型对象,我们就可以将之前生成的训练数据传递到模型中。

图5:实例化模型。

然后,我们通过创建一个数组来定义模型,数组中的每个元素对应于神经网络的一层。这些元素是元组,它们给出了该层的神经元数量和激活函数。例如,(16, 'relu') 表示具有 ReLU 激活函数的 16 个神经元层。除了输入层和输出层之外,每层的神经元数量和激活函数由用户决定。虽然 sum.ipynb 模型使用单个神经元(图 7),但您可以随意注释掉该模型定义并尝试一些其他选项。每层可以有不同的激活函数和神经元数量。

图6:构建模型定义。

执行此单元格将填充模型定义,如图 7 所示。

图 7:sum.ipynb 模型定义。

创建自己的模型时,最多可以包含 100 个密集层(也称为隐藏层),每个层最多包含 XNUMX 个神经元。为每层选择 ReLU、tanh、softsign、线性和 S 型激活函数。层输出在移动到下一层之前会通过此激活函数。如果没有这些,神经网络操作将完全是线性的,并会缩减为单个操作。

步骤 3:训练模型并查看反馈

现在我们已经定义了模型,我们需要训练它,以便它能够代表我们想要的映射。这就像使用几个基本参数调用 fit_model() 函数一样简单。我们将允许我们的模型训练 500 个时期(训练步骤),并将上面的 10% 的训练数据留作验证。我们还设置了一个早期停止配置,以便在损失函数稳定时停止训练。这种方法有助于避免“过度拟合”,即模型变得非常擅长预测训练数据,但代价是通用性。它还有加快完成时间的好处。

训练周期

图8:训练模型。

训练完成后,绘制训练损失和验证损失以评估训练的成功性。请注意,图 9 中的损失随着训练的进行而减少,这是预期的。

图 9:绘制训练损失和验证损失。

您可以选择通过绘制已经训练好的预测输出来验证您的模型,如图 10 所示。请注意第二张图的比例,显示预测输出和期望输出之间的差异非常小。

图 10:绘制模型的期望输出和预测输出。

步骤4:保存参数

现在我们已经拥有一个经过全面训练的模型,可以在 Moku 上运行了。将模型保存为 .linn 文件,以便在 Moku 神经网络中使用(图 11)。

图11:将网络模型保存为与Moku神经网络兼容的.linn的函数。

使用 Moku 部署并验证模型

In 多仪器并行模式 在 Moku:Pro(图 12)上,将 Moku 神经网络放置在插槽 1 中,将示波器放置在插槽 2 中。接下来,将示波器的输出连接到神经网络的输入。然后单击“应用更改”并等待 FPGA 配置。

图 12:Moku:Pro 上的多仪器模式配置。

现在,打开神经网络菜单并使用位于图表下方的“加载网络配置”按钮上传由 Python 脚本生成的 sum.linn 文件,如图 13 所示。您应该看到一个具有三个输入、一个输出和一个线性激活函数的层,正如预期的那样。

神经网络、单个神经元和层

图 13:加载了 sum.linn 的 Moku 神经网络。

进入示波器,点击右下角的正弦波图标打开内置的波形发生器。生成两个信号来测试模型的功能,如图 14 所示。在本例中,我们将使用两个正弦波:一个幅度为 1 Vpp,频率为 1 kHz;另一个幅度为 500 mVpp,频率为 100 Hz。

图 13:嵌入式波形发生器示例设置。

您应该看到示波器的 A 通道上出现了相加的信号。使用鼠标缩放示波器视图以查看信号。两个正弦波相加后应该类似于图 15 中的信号。

图 15:Moku 神经网络的输出。

使用光标和内置测量功能验证网络的运行情况(如图 16 所示),测试预期的幅度和频率分量,或者使用 Moku 频谱分析仪. 可以使用附加信号类型、频率或其他参数随意测试网络。

图16:验证Moku神经网络输出。

结语

在这里,您可以修改提供的示例脚本或编写自己的脚本,以创建独特、强大的机器学习模型,并与任何其他 Moku 仪器集成。实时运行控制系统、预测实验输出等,所有这些都通过唯一基于 FPGA 的神经网络与一套可重构的高性能测试和测量仪器集成在一起。

需要视频教程? 点播观看我们的网络研讨会.您将学习如何实现基于 FPGA 的神经网络,以实现快速、灵活的信号分析、闭环反馈等。

了解有关 Moku 神经网络的更多信息

查看其余提供的示例,查看规范,并继续了解 Moku 神经网络。有问题?联系我们 开始.

加入我们的用户论坛来与我们保持联系

想要新的功能吗? 有技术支持提示要分享? 从客户案例到新功能公告等等, 用户论坛 是您的一站式门户,作为产品更新以及与 Liquid Instruments 和我们的全球用户社区建立联系。


在演示模式下试用 Moku

您可以下载适用于 macOS 和 Windows 的 Moku: 应用程序 开始.


获取常见问题的答案

在我们的网站上查找有关设备和仪器的问题和答案 知识库.


与 Moku 用户联系

即刻加入 用户论坛 请求新功能、分享支持提示并与我们的全球用户社区联系。