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² 撰写;')
保持简单吗,傻瓜?