MicroMLP - это многослойный перцептрон микроискусственной нейронной сети (в основном используется в модулях ESP32 и Pycom).
Очень легко интегрировать и очень легко использовать только один файл:
Возможности MicroMLP:
- Изменяемая многослойная структура и структура соединений
- Комплексное смещение нейронов
- Пластичность соединений включена в стоимость
- Функции активации по слою
- Параметры Альфа, Эта и усиление
- Управление набором примеров и обучение
- Функции QLearning для использования обучения с подкреплением
- Сохраните и загрузите всю структуру в/из файла json.
- Различные функции активации:
- Бинарный шаг Хевисайда
- Логистический (сигмовидный или мягкий шаг)
- Гиперболический тангенс
- Выпрямитель СофтПлюс
- РеЛУ (выпрямленная линейная единица)
- Функция Гаусса
Используйте глубокое обучение для:
- Обработка сигналов (обработка речи, идентификация, фильтрация)
- Обработка изображений (сжатие, распознавание, шаблоны)
- Контроль (диагностика, контроль качества, робототехника)
- Оптимизация (планирование, регулирование дорожного движения, финансы)
- Моделирование (имитация черного ящика)
- Классификация (анализ ДНК)
- Приближение (неизвестная функция, комплексная функция)
Использование статических функций 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) |
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 | получать |
МШЭ | mlp.MSE | получать |
МАЭ | mlp.MAE | получать |
MSEPercent | mlp.MSEPercent | получать |
MAEPercent | 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 | Выпрямитель СофтПлюс |
| "ReLU" | MicroMLP.ACTFUNC_RELU | Выпрямленный линейный агрегат |
| "Gaussian" | MicroMLP.ACTFUNC_GAUSSIAN | Функция Гаусса |
Функция автоматического соединения слоев | Деталь |
---|
MicroMLP.LayersFullConnect | Сеть полностью подключена |
Использование класса MicroMLP.Layer :
Имя | Функция |
---|
Конструктор | layer = MicroMLP.Layer(parentMicroMLP, activationFuncName=None, neuronsCount=0) |
GetLayerIndex | idx = layer.GetLayerIndex() |
ПолучитьНейрон | neuron = layer.GetNeuron(neuronIndex) |
ПолучитьНейронИндекс | 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) |
ПолучитьНейронИндекс | idx = neuron.GetNeuronIndex() |
GetInputConnections | connections = neuron.GetInputConnections() |
GetOutputConnections | connections = neuron.GetOutputConnections() |
Аддинпутконнектион | neuron.AddInputConnection(connection) |
Аддаутпутконнектион | neuron.AddOutputConnection(connection) |
Удалитьинпутконнектион | neuron.RemoveInputConnection(connection) |
Удалитьаутпутконнектион | neuron.RemoveOutputConnection(connection) |
SetBias | neuron.SetBias(bias) |
Получить смещение | neuron.GetBias() |
SetOutputNNValue | neuron.SetOutputNNValue(nnvalue) |
Вычислить значение | neuron.ComputeValue() |
Вычислительная ошибка | neuron.ComputeError(targetNNValue=None) |
Удалять | neuron.Remove() |
Свойство | Пример | Чтение/запись |
---|
Родительский слой | neuron.ParentLayer | получать |
ВычисляемыйВыход | neuron.ComputedOutput | получать |
ВычисляемаяDeltaError | neuron.ComputedDeltaError | получать |
ComputedSignalError | neuron.ComputedSignalError | получать |
Использование класса MicroMLP.Connection :
Имя | Функция |
---|
Конструктор | connection = MicroMLP.Connection(neuronSrc, neuronDst, weight=None) |
ОбновлениеВес | connection.UpdateWeight(eta, alpha) |
Удалять | connection.Remove() |
Свойство | Пример | Чтение/запись |
---|
НейронСрк | connection.NeuronSrc | получать |
НейронДст | connection.NeuronDst | получать |
Масса | connection.Weight | получать |
Использование класса MicroMLP.Bias :
Имя | Функция |
---|
Конструктор | bias = MicroMLP.Bias(neuronDst, value=1.0, weight=None) |
ОбновлениеВес | bias.UpdateWeight(eta, alpha) |
Удалять | bias.Remove() |
Свойство | Пример | Чтение/запись |
---|
НейронДст | 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() |
FromBool | nnvalue = MicroMLP.NNValue.FromBool(value) |
НьюБул | nnvalue = MicroMLP.NNValue.NewBool() |
FromAnalogSignal | nnvalue = MicroMLP.NNValue.FromAnalogSignal(value) |
НовыйАналоговыйСигнал | nnvalue = MicroMLP.NNValue.NewAnalogSignal() |
Использование класса MicroMLP.NNValue :
Имя | Функция |
---|
Конструктор | nnvalue = MicroMLP.NNValue(minValue, maxValue, value) |
Свойство | Пример | Чтение/запись |
---|
AsFloat | nnvalue.AsFloat = 639.513 | получить/установить |
АсИнт | nnvalue.AsInt = 12345 | получить/установить |
Аспроцент | nnvalue.AsPercent = 65 | получить/установить |
Асбайт | nnvalue.AsByte = b'x75' | получить/установить |
АсБул | nnvalue.AsBool = True | получить/установить |
Как аналоговый сигнал | nnvalue.AsAnalogSignal = 0.39472 | получить/установить |
Автор JC`zic для HC² ;')
Будь проще, глупый ?