MicroMLP は、マイクロ人工ニューラル ネットワーク多層パーセプトロンです (主に ESP32 および Pycom モジュールで使用されます)
統合は非常に簡単で、1 つのファイルのみで非常に軽量です。
MicroMLP の機能:
- 変更可能な多層構造と接続構造
- ニューロンに対する統合されたバイアス
- 接続部の可塑性を含む
- 層ごとの活性化関数
- パラメータ アルファ、イータ、ゲイン
- 一連の例の管理と学習
- 強化学習を利用するためのQLearning関数
- すべての構造を json ファイルに保存し、json ファイルからロードします
- 各種活性化機能:
- ヘビサイドバイナリステップ
- ロジスティック (シグモイドまたはソフト ステップ)
- 双曲線正接
- SoftPlus 整流器
- ReLU (修正線形単位)
- ガウス関数
深層学習を次の目的で使用します。
- 信号処理(音声処理、識別、フィルタリング)
- 画像処理(圧縮、認識、パターン)
- 制御(診断、品質管理、ロボティクス)
- 最適化(計画、交通規制、財務)
- シミュレーション(ブラックボックスシミュレーション)
- 分類(DNA解析)
- 近似(未知関数、複素関数)
MicroMLP静的関数の使用:
名前 | 関数 |
---|
作成する | mlp = MicroMLP.Create(neuronsByLayers, activationFuncName, layersAutoConnectFunction=None, useBiasValue=1.0) |
ファイルからロード | mlp = MicroMLP.LoadFromFile(filename) |
MicroMLP を使用すると、ニューラル ネットワークを迅速に作成できます。
from microMLP import MicroMLP
mlp = MicroMLP . Create ([ 3 , 10 , 2 ], "Sigmoid" , MicroMLP . LayersFullConnect )
MicroMLPメインクラスの使用:
名前 | 関数 |
---|
コンストラクタ | mlp = MicroMLP() |
GetLayer | layer = mlp.GetLayer(layerIndex) |
GetLayerIndex | idx = mlp.GetLayerIndex(layer) |
レイヤの削除 | mlp.RemoveLayer(layer) |
GetInputLayer | inputLayer = mlp.GetInputLayer() |
GetOutputLayer | outputLayer = mlp.GetOutputLayer() |
学ぶ | ok = mlp.Learn(inputVectorNNValues, targetVectorNNValues) |
テスト | ok = mlp.Test(inputVectorNNValues, targetVectorNNValues) |
予測する | outputVectorNNValues = mlp.Predict(inputVectorNNValues) |
QLearningLearnForChosenAction | ok = mlp.QLearningLearnForChosenAction(stateVectorNNValues, rewardNNValue, pastStateVectorNNValues, chosenActionIndex, terminalState=True, discountFactorNNValue=None) |
QLearningPredictBestActionIndex | bestActionIndex = mlp.QLearningPredictBestActionIndex(stateVectorNNValues) |
ファイルに保存 | ok = mlp.SaveToFile(filename) |
追加例 | ok = mlp.AddExample(inputVectorNNValues, targetVectorNNValues) |
クリア例 | mlp.ClearExamples() |
学ぶ例 | learnCount = mlp.LearnExamples(maxSeconds=30, maxCount=None, stopWhenLearned=True, printMAEAverage=True) |
財産 | 例 | 読み取り/書き込み |
---|
レイヤー | mlp.Layers | 得る |
レイヤー数 | mlp.LayersCount | 得る |
ネットワークが完了しています | mlp.IsNetworkComplete | 得る |
MSE | mlp.MSE | 得る |
前 | mlp.MAE | 得る |
MSEパーセント | mlp.MSEPercent | 得る |
MAEパーセント | mlp.MAEPercent | 得る |
例カウント | mlp.ExamplesCount | 得る |
MicroMLP を使用して XOr 問題を学習します (双曲線正接を使用):
from microMLP import MicroMLP
mlp = MicroMLP . Create ( neuronsByLayers = [ 2 , 2 , 1 ],
activationFuncName = MicroMLP . ACTFUNC_TANH ,
layersAutoConnectFunction = MicroMLP . LayersFullConnect )
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 )
if mlp . SaveToFile ( "mlp.json" ) :
print ( "MicroMLP structure saved!" )
変数 | 説明 | デフォルト |
---|
mlp.Eta | 誤り訂正の重み付け | 0.30 |
mlp.Alpha | 接続強度 可塑性 | 0.75 |
mlp.Gain | ネットワーク学習の向上 | 0.99 |
mlp.CorrectLearnedMAE | 自己学習エラーの閾値 | 0.02 |
グラフ | アクティベーション関数名 | 定数 | 詳細 |
---|
| "Heaviside" | MicroMLP.ACTFUNC_HEAVISIDE | ヘビサイドバイナリステップ |
| "Sigmoid" | MicroMLP.ACTFUNC_SIGMOID | ロジスティック (シグモイドまたはソフト ステップ) |
| "TanH" | MicroMLP.ACTFUNC_TANH | 双曲線正接 |
| "SoftPlus" | MicroMLP.ACTFUNC_SOFTPLUS | SoftPlus 整流器 |
| "ReLU" | MicroMLP.ACTFUNC_RELU | 整流リニアユニット |
| "Gaussian" | MicroMLP.ACTFUNC_GAUSSIAN | ガウス関数 |
レイヤー自動接続機能 | 詳細 |
---|
MicroMLP.LayersFullConnect | ネットワークが完全に接続されている |
MicroMLP.Layerクラスの使用:
名前 | 関数 |
---|
コンストラクタ | layer = MicroMLP.Layer(parentMicroMLP, activationFuncName=None, neuronsCount=0) |
GetLayerIndex | idx = layer.GetLayerIndex() |
GetNeuron | neuron = layer.GetNeuron(neuronIndex) |
GetNeuronIndex | idx = layer.GetNeuronIndex(neuron) |
ニューロンの追加 | layer.AddNeuron(neuron) |
ニューロンの削除 | layer.RemoveNeuron(neuron) |
GetMeanSquareError | mse = layer.GetMeanSquareError() |
GetMeanAbsoluteError | mae = layer.GetMeanAbsoluteError() |
GetMeanSquareErrorAsPercent | mseP = layer.GetMeanSquareErrorAsPercent() |
GetMeanAbsoluteErrorAsPercent | maeP = layer.GetMeanAbsoluteErrorAsPercent() |
取り除く | layer.Remove() |
財産 | 例 | 読み取り/書き込み |
---|
親マイクロMLP | layer.ParentMicroMLP | 得る |
アクティベーション機能名 | layer.ActivationFuncName | 得る |
ニューロン | layer.Neurons | 得る |
ニューロン数 | layer.NeuronsCount | 得る |
MicroMLP.InputLayer(Layer)クラスの使用:
名前 | 関数 |
---|
コンストラクタ | inputLayer = MicroMLP.InputLayer(parentMicroMLP, neuronsCount=0) |
SetInputVectorNNValues | ok = inputLayer.SetInputVectorNNValues(inputVectorNNValues) |
MicroMLP.OutputLayer(Layer)クラスの使用:
名前 | 関数 |
---|
コンストラクタ | outputLayer = MicroMLP.OutputLayer(parentMicroMLP, activationFuncName, neuronsCount=0) |
GetOutputVectorNNValues | outputVectorNNValues = outputLayer.GetOutputVectorNNValues() |
ComputeTargetLayerError | ok = outputLayer.ComputeTargetLayerError(targetVectorNNValues) |
MicroMLP.Neuronクラスの使用:
名前 | 関数 |
---|
コンストラクタ | neuron = MicroMLP.Neuron(parentLayer) |
GetNeuronIndex | idx = neuron.GetNeuronIndex() |
GetInputConnections | connections = neuron.GetInputConnections() |
GetOutputConnections | connections = neuron.GetOutputConnections() |
入力接続の追加 | neuron.AddInputConnection(connection) |
出力接続の追加 | neuron.AddOutputConnection(connection) |
入力接続の削除 | neuron.RemoveInputConnection(connection) |
出力接続の削除 | neuron.RemoveOutputConnection(connection) |
セットバイアス | neuron.SetBias(bias) |
取得バイアス | neuron.GetBias() |
SetOutputNNValue | neuron.SetOutputNNValue(nnvalue) |
値の計算 | neuron.ComputeValue() |
計算エラー | neuron.ComputeError(targetNNValue=None) |
取り除く | neuron.Remove() |
財産 | 例 | 読み取り/書き込み |
---|
親レイヤー | neuron.ParentLayer | 得る |
計算された出力 | neuron.ComputedOutput | 得る |
計算されたデルタエラー | neuron.ComputedDeltaError | 得る |
計算された信号エラー | neuron.ComputedSignalError | 得る |
MicroMLP.Connectionクラスの使用:
名前 | 関数 |
---|
コンストラクタ | connection = MicroMLP.Connection(neuronSrc, neuronDst, weight=None) |
UpdateWeight | connection.UpdateWeight(eta, alpha) |
取り除く | connection.Remove() |
財産 | 例 | 読み取り/書き込み |
---|
ニューロンSrc | connection.NeuronSrc | 得る |
ニューロンDst | connection.NeuronDst | 得る |
重さ | connection.Weight | 得る |
MicroMLP.Biasクラスの使用:
名前 | 関数 |
---|
コンストラクタ | bias = MicroMLP.Bias(neuronDst, value=1.0, weight=None) |
UpdateWeight | bias.UpdateWeight(eta, alpha) |
取り除く | bias.Remove() |
財産 | 例 | 読み取り/書き込み |
---|
ニューロンDst | bias.NeuronDst | 得る |
価値 | bias.Value | 得る |
重さ | bias.Weight | 得る |
MicroMLP.NNValue静的関数の使用:
名前 | 関数 |
---|
からパーセント | nnvalue = MicroMLP.NNValue.FromPercent(value) |
新しいパーセント | nnvalue = MicroMLP.NNValue.NewPercent() |
フロムバイト | nnvalue = MicroMLP.NNValue.FromByte(value) |
ニューバイト | nnvalue = MicroMLP.NNValue.NewByte() |
フロムブール | nnvalue = MicroMLP.NNValue.FromBool(value) |
ニューブール | nnvalue = MicroMLP.NNValue.NewBool() |
アナログ信号から | nnvalue = MicroMLP.NNValue.FromAnalogSignal(value) |
新しいアナログ信号 | nnvalue = MicroMLP.NNValue.NewAnalogSignal() |
MicroMLP.NNValueクラスの使用:
名前 | 関数 |
---|
コンストラクタ | nnvalue = MicroMLP.NNValue(minValue, maxValue, value) |
財産 | 例 | 読み取り/書き込み |
---|
アスフロート | nnvalue.AsFloat = 639.513 | 取得/設定 |
AsInt | nnvalue.AsInt = 12345 | 取得/設定 |
パーセントとして | nnvalue.AsPercent = 65 | 取得/設定 |
アズバイト | nnvalue.AsByte = b'x75' | 取得/設定 |
アズブール | nnvalue.AsBool = True | 取得/設定 |
アナログ信号として | nnvalue.AsAnalogSignal = 0.39472 | 取得/設定 |
HC² の JC`zic による ;')
シンプルにしてください、愚か者?