Ccmmutty logo
Commutty IT
3 min read

esp32でMicroMLPを用いてマイコン上で機械学習してみた

https://cdn.magicode.io/media/notebox/04fe5b4f-8e44-4e0d-91fa-648f32273b9b.jpeg

はじめに

TensorFlow Lite for Microcontrollersなどはマイコン上で推論器を動かすことはできるがマイコン上で学習はしない。 MicroMLPを使うと簡単な学習をマイコン上でできるようなので、試してみた。
なおmicropythonの環境が必要となるが、前回環境構築をしている。

環境

MicroMLP

MicroMLPはESP32上で多層パーセプトロンを構築するライブラリである。
mcrioMLP.py というファイルを入れるだけでニューラルネットワークを用いた学習ができるようになってしまう。とても簡単。

Getting Started

1. mircopython の環境構築

前回を参考にmicropythonの環境を構築する。

2. プロジェクトの作成

Pymakrを使ってプロジェクトを作成する。

3. microMLPのインストール

githubにあるmicroMLP.pyをプロジェクトフォルダに配置する。

4. サンプル実行

READMEにXORを学習するサンプルコードがあるので、それをmain.pyに書く。
from microMLP import MicroMLP

# ニューラルネットワークの構築
# 入力が2次元、隠れ層が1つ、出力が1次元
# 活性化関数はハイパボリックタンジェント
# 全結合
mlp = MicroMLP.Create( neuronsByLayers           = [2, 2, 1],
                       activationFuncName        = MicroMLP.ACTFUNC_TANH,
                       layersAutoConnectFunction = MicroMLP.LayersFullConnect )

# MicroMLP内で扱える値の型([NNValueクラス](https://github.com/jczic/MicroMLP#using-micromlpnnvalue-class-))に変換
# Float, Int, Percent, Byte, Bool, AnalogSignalがある。
nnFalse  = MicroMLP.NNValue.FromBool(False)
nnTrue   = MicroMLP.NNValue.FromBool(True)

# 学習用データを設定
mlp.AddExample( [nnFalse, nnFalse], [nnFalse] )
mlp.AddExample( [nnFalse, nnTrue ], [nnTrue ] )
mlp.AddExample( [nnTrue , nnTrue ], [nnFalse] )
mlp.AddExample( [nnTrue , nnFalse], [nnTrue ] )

# 学習を実行
learnCount = mlp.LearnExamples()

# 推論を実行
print( "LEARNED :" )print( "  - False xor False = %s" % mlp.Predict([nnFalse, nnFalse])[0].AsBool )
print( "  - False xor True  = %s" % mlp.Predict([nnFalse, nnTrue] )[0].AsBool )
print( "  - True  xor True  = %s" % mlp.Predict([nnTrue , nnTrue] )[0].AsBool )
print( "  - True  xor False = %s" % mlp.Predict([nnTrue , nnFalse])[0].AsBool )

終わりに

MicroMLPを使ってesp32上で多層パーセプトロンの学習を行ってみた。
いちいちPCで学習しなくて済むので、ちょっとしたことを学習するのには使えそう。
一方、環境としては貧弱なので、マイコンで集めたデータを吸い上げて学習し、反映するサイクルを作ってしまえばそっちの方がいいかも。

Discussion

コメントにはログインが必要です。