ニューラルネットワークを作成するために、このステップバイステップの例では、 合計.ipynb、期待される出力は単に入力の合計であり、1つの隠れ層のみを使用します。この単純な操作はさまざまな方法で実行できますが、 Moku ニューラルネットワーク 単純な代数から複雑な推論まで、ほぼすべての機能を実装できます。他の例を見る こちら ニューラルネットワークガイドをダウンロードする こちら.
一般的な前提条件
Moku ニューラル ネットワークの使用を開始するには、次のものが必要です。
- A Moku:Pro デバイス(Moku:LabとMoku:Goは現在サポートされていません)
- モク バージョン 3.3WindowsまたはmacOSでダウンロード可能
- Pythonのインストール(v3.11); Moku Pythonを参照してください インストールガイド 詳細については、次のリンクを参照してください。 アナコンダPython のインストールは v3.11 以上である必要があります。使用しているバージョンが不明な場合は、コマンド プロンプトまたはターミナルで Python –version または python3 –version を使用して Python のバージョンを確認してください。
Pythonの前提条件
Pythonをマシンにインストールしたら、以下のコマンドを実行してMoku Neural Network APIをコンピュータのコマンドラインまたはターミナルウィンドウにインストールします。これにより、APIがインストールされ、必要な依存関係がすべて取得されます。
pip install 'moku[neuralnetwork]'
これにより、次のものがインストールされます。
- Moku ニューラルネットワーク API
- ナンピー 1.26.4
- Ipyカーネル6.29.5
- マトプロットライブラリ3.9.2
- テキドム4.66.5
- テンソルフロー 2.16.2
- SciPy (この例では必須ですが、一般的には必要ありません)
Pythonを定期的に使用している場合は、これらのパッケージのほとんどはすでにインストールされている可能性があります。確認するには、コマンドプロンプトまたはターミナルを開いて次のように入力します。 ピップインストールXここで、 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 に示すように、トレーニング用の信号を生成します。シミュレーション データには、3 つの入力チャネルと XNUMX つの出力チャネルが必要です。Moku:Pro を使用して、実際のトレーニング データを生成またはキャプチャすることもできます。生成された入力信号を、必要な合計出力と並べてプロットし、トレーニング データを確認します (図 XNUMX)。
図 2: シミュレートされたトレーニング データの生成。
図 3: モデルのトレーニングのためのシミュレートされたトレーニング入力と望ましい出力。
次に、モデルをトレーニングするためのデータを準備する必要があります。まず、入力を次の形式の行列に再形成します(N,3) と出力は (N,1) を実行してからモデルに送信します。このコードを図 4 に示します。
図 4: トレーニング用のデータの転置。
この例では、既存のデータはトレーニングには十分ですが、追加のトレーニング データを生成したり、入力と出力をスケーリングしたりすることもできます。スケーリングを適用することを選択した場合は、実行時に Moku Neural Network で同じスケーリングを適用する必要があります。
ステップ 2: モデルを定義する
これで、ニューラル ネットワーク モデルを構築できます。まず、「linn_model」というオブジェクトを作成します。これは、Moku ニューラル ネットワーク インストルメントの構成と制約を表します。図 5 のモデル オブジェクトをインスタンス化したら、以前に生成したトレーニング データをモデルに渡すことができます。
図 5: モデルのインスタンス化。
次に、配列を作成してモデルを定義します。配列の各要素は、ニューラル ネットワークのレイヤーに対応します。これらの要素はタプルで、ニューロンの数とそのレイヤーの活性化関数を指定します。たとえば、(16, 'relu') は、ReLU 活性化関数を持つ 16 個のニューロンのレイヤーを示します。入力レイヤーと出力レイヤー以外のニューロンの数と各レイヤーの活性化関数は、ユーザーが決定します。sum.ipynb モデルでは単一のニューロンを使用しますが (図 7)、そのモデル定義をコメント アウトして、追加のオプションをいくつか試してみてください。レイヤーごとに異なる活性化関数とニューロンの数を設定できます。
図 6: モデル定義の構築。
このセルを実行すると、図 7 に示すようにモデル定義が入力されます。
図 7: sum.ipynb モデル定義。
独自のモデルを作成する場合、最大 100 つの密なレイヤー (隠しレイヤーとも呼ばれる) を含めることができ、各レイヤーには最大 XNUMX 個のニューロンが含まれます。各レイヤーに対して、ReLU、tanh、softsign、線形、およびシグモイドのアクティベーション関数を選択します。レイヤーの出力は、次のレイヤーに移動する前にこのアクティベーション関数を通過します。これらがなければ、ニューラル ネットワークの操作は完全に線形になり、単一の操作に縮小されます。
ステップ3: モデルをトレーニングしてフィードバックを表示する
モデルを定義したので、次はモデルをトレーニングして、目的のマッピングを表現する必要があります。これは、いくつかの基本的な引数を指定して fit_model() 関数を呼び出すだけです。モデルを 500 エポック (トレーニング ステップ) トレーニングし、上記のトレーニング データの 10% を検証用に取っておきます。また、損失関数が停滞したときにトレーニングを停止する早期停止構成も設定します。このアプローチは、モデルが一般性を犠牲にしてトレーニング データを非常に正確に予測する「過剰適合」を回避するのに役立ちます。完了までの時間を短縮できるという利点もあります。

図 8: モデルのトレーニング。
トレーニングが完了したら、トレーニング損失と検証損失をプロットして、トレーニングの成功を評価します。図 9 の損失はトレーニングが進むにつれて減少しますが、これは予想どおりです。
図 9: トレーニングからの損失と検証損失をプロットしたもの。
図 10 に示すように、トレーニングが完了したら予測出力をプロットしてモデルを検証することができます。XNUMX 番目のプロットのスケールは、予測出力と目的の出力の差が非常に小さいことを示していることに注意してください。
図 10: モデルからの望ましい出力と予測された出力をプロットします。
ステップ4: パラメータを保存する
これで完全にトレーニングされたモデルができたので、Moku で実行する準備が整いました。Moku ニューラル ネットワークで使用するために、モデルを .linn ファイルに保存します (図 11)。
図 11: ネットワーク モデルを Moku ニューラル ネットワークと互換性のある .linn に保存する機能。
Moku を使用したモデルのデプロイと検証
In マルチインストゥルメントモード Moku:Pro (図 12) で、スロット 1 に Moku ニューラル ネットワークを配置し、スロット 2 にオシロスコープを配置します。次に、オシロスコープの出力をニューラル ネットワークの入力に接続します。次に、「変更を適用」をクリックし、FPGA が構成されるのを待ちます。
図 12: Moku:Pro のマルチインストゥルメントモードの構成。
次に、ニューラル ネットワーク メニューを開き、図 13 に示すように、ダイアグラムの下にある [ネットワーク構成の読み込み] ボタンを使用して、Python スクリプトによって生成された sum.linn ファイルをアップロードします。予想どおり、XNUMX つの入力、XNUMX つの出力、および線形活性化関数を持つ XNUMX つのレイヤーが表示されます。
図 13: sum.linn がロードされた Moku ニューラル ネットワーク。
オシロスコープに入り、右下隅の正弦波アイコンをクリックして、内蔵の波形ジェネレーターを開きます。モデルの機能をテストするために、図14に示す1つの信号を生成してください。この例では、振幅1Vpp、周波数500kHzの正弦波と、振幅100mVpp、周波数XNUMXHzの正弦波のXNUMXつの正弦波を使用します。
図 13: 組み込み波形ジェネレーターの設定例。
加算された信号がオシロスコープのチャンネル A に表示されます。マウスを使用してオシロスコープのビューを拡大縮小し、信号を表示します。加算された 15 つの正弦波は、図 XNUMX の信号のようになります。
図 15: Moku ニューラル ネットワークの出力。
図16に示すように、カーソルと内蔵測定を使用してネットワークの動作を確認し、予想される振幅と周波数成分をテストするか、Moku スペクトラムアナライザ追加の信号タイプ、周波数、またはその他のパラメータを使用して、自由にネットワークをテストしてください。

図 16: Moku ニューラル ネットワークの出力の検証。
結論
ここから、提供されているサンプル スクリプトを変更したり、独自のスクリプトを記述して、他の Moku 機器と統合できるユニークで強力な機械学習モデルを作成できます。制御システムをリアルタイムで実行したり、実験の出力を予測したり、これらはすべて、再構成可能な高性能テストおよび測定機器のスイートと統合された唯一の FPGA ベースのニューラル ネットワークによって実現されます。
ビデオチュートリアルをご希望ですか? オンデマンドのウェビナーを視聴する高速で柔軟な信号解析、クローズドループ フィードバックなどを実現する FPGA ベースのニューラル ネットワークを実装する方法を学習します。
Mokuニューラルネットワークの詳細
提供されている残りの例を確認し、仕様を確認し、Mokuニューラルネットワークについて学習を続けてください。質問がありますか?お問い合わせください。 こちら.
ユーザーフォーラムに参加してください
新機能のご提案がありますか?あるいは、ヒントを共有したいですか?ユーザーフォーラムでは、使用例、新機能の発表、製品のアップデートなど、Liquid Instrumentsとグローバルユーザーコミュニティとのつながりをワンストップで提供しています。