MicroMLP是一個微型人工神經網路多層感知器(主要用在ESP32和Pycom模組上)
非常容易集成,並且非常輕量,僅包含一個文件:
MicroMLP 的特性:
- 可修改的多層和連接結構
- 神經元的綜合偏差
- 包括連結的可塑性
- 按層激活函數
- 參數 Alpha、Eta 和增益
- 管理範例集和學習
- 使用強化學習的 QLearning 函數
- 將所有結構儲存到 json 檔案或從 json 檔案載入所有結構
- 各種激活函數:
- 海維賽二元步
- 邏輯(S形或軟步驟)
- 雙曲正切
- 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() |
取得圖層 | layer = mlp.GetLayer(layerIndex) |
取得圖層索引 | idx = mlp.GetLayerIndex(layer) |
刪除圖層 | mlp.RemoveLayer(layer) |
取得輸入層 | inputLayer = mlp.GetInputLayer() |
獲取輸出層 | 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 | 得到 |
均方誤差 | mlp.MSE | 得到 |
MAE | mlp.MAE | 得到 |
MSE百分比 | mlp.MSEPercent | 得到 |
MAE百分比 | mlp.MAEPercent | 得到 |
範例計數 | mlp.ExamplesCount | 得到 |
使用MicroMLP學習異或問題(使用雙曲正切):
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 | 邏輯(S形或軟步驟) |
| "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) |
取得圖層索引 | idx = layer.GetLayerIndex() |
取得神經元 | neuron = layer.GetNeuron(neuronIndex) |
取得神經元索引 | idx = layer.GetNeuronIndex(neuron) |
添加神經元 | layer.AddNeuron(neuron) |
刪除神經元 | layer.RemoveNeuron(neuron) |
取得均方誤差 | mse = layer.GetMeanSquareError() |
取得平均絕對誤差 | mae = layer.GetMeanAbsoluteError() |
取得均方誤差百分比 | mseP = layer.GetMeanSquareErrorAsPercent() |
取得平均絕對誤差百分比 | maeP = layer.GetMeanAbsoluteErrorAsPercent() |
消除 | layer.Remove() |
財產 | 例子 | 讀/寫 |
---|
母微MLP | layer.ParentMicroMLP | 得到 |
啟動函數名稱 | layer.ActivationFuncName | 得到 |
神經元 | layer.Neurons | 得到 |
神經元計數 | layer.NeuronsCount | 得到 |
使用MicroMLP.InputLayer(Layer)類別:
姓名 | 功能 |
---|
建構函數 | inputLayer = MicroMLP.InputLayer(parentMicroMLP, neuronsCount=0) |
設定輸入向量NN值 | ok = inputLayer.SetInputVectorNNValues(inputVectorNNValues) |
使用MicroMLP.OutputLayer(Layer)類別:
姓名 | 功能 |
---|
建構函數 | outputLayer = MicroMLP.OutputLayer(parentMicroMLP, activationFuncName, neuronsCount=0) |
取得輸出向量NN值 | outputVectorNNValues = outputLayer.GetOutputVectorNNValues() |
計算目標層錯誤 | ok = outputLayer.ComputeTargetLayerError(targetVectorNNValues) |
使用MicroMLP.Neuron類別:
姓名 | 功能 |
---|
建構函數 | neuron = MicroMLP.Neuron(parentLayer) |
取得神經元索引 | idx = neuron.GetNeuronIndex() |
取得輸入連接 | connections = neuron.GetInputConnections() |
獲取輸出連接 | connections = neuron.GetOutputConnections() |
新增輸入連接 | neuron.AddInputConnection(connection) |
新增輸出連接 | neuron.AddOutputConnection(connection) |
刪除輸入連接 | neuron.RemoveInputConnection(connection) |
刪除輸出連接 | neuron.RemoveOutputConnection(connection) |
設定偏差 | neuron.SetBias(bias) |
取得偏差 | neuron.GetBias() |
設定輸出神經網路值 | 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) |
更新權重 | connection.UpdateWeight(eta, alpha) |
消除 | connection.Remove() |
財產 | 例子 | 讀/寫 |
---|
神經元源 | connection.NeuronSrc | 得到 |
神經元Dst | connection.NeuronDst | 得到 |
重量 | connection.Weight | 得到 |
使用MicroMLP.Bias類別:
姓名 | 功能 |
---|
建構函數 | bias = MicroMLP.Bias(neuronDst, value=1.0, weight=None) |
更新權重 | 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 | 取得/設定 |
作為整數 | nnvalue.AsInt = 12345 | 取得/設定 |
百分比 | nnvalue.AsPercent = 65 | 取得/設定 |
阿斯字節 | nnvalue.AsByte = b'x75' | 取得/設定 |
布林值 | nnvalue.AsBool = True | 取得/設定 |
作為類比訊號 | nnvalue.AsAnalogSignal = 0.39472 | 取得/設定 |
作者:JC`zic 為 HC² 撰寫;')
保持簡單嗎,傻瓜?