MicroMLP เป็น perceptron หลายชั้นของโครงข่ายประสาทเทียมขนาดเล็ก (ใช้เป็นหลักในโมดูล ESP32 และ Pycom)
รวมง่ายมากและเบามากด้วยไฟล์เดียวเท่านั้น:
คุณสมบัติ MicroMLP:
- โครงสร้างหลายชั้นและการเชื่อมต่อที่ปรับเปลี่ยนได้
- อคติแบบบูรณาการต่อเซลล์ประสาท
- รวมความเป็นพลาสติกของการเชื่อมต่อ
- ฟังก์ชั่นการเปิดใช้งานตามเลเยอร์
- พารามิเตอร์ Alpha, Eta และ Gain
- การจัดการชุดตัวอย่างและการเรียนรู้
- ฟังก์ชั่น QLearning เพื่อใช้การเรียนรู้แบบเสริมกำลัง
- บันทึกและโหลดโครงสร้างทั้งหมดไปยัง/จากไฟล์ json
- ฟังก์ชั่นการเปิดใช้งานต่างๆ :
- ขั้นตอนไบนารี Heaviside
- ลอจิสติกส์ (sigmoid หรือ soft step)
- แทนเจนต์ไฮเปอร์โบลิก
- วงจรเรียงกระแส SoftPlus
- ReLU (หน่วยเชิงเส้นตรง)
- ฟังก์ชันเกาส์เซียน
ใช้การเรียนรู้เชิงลึกเพื่อ:
- การประมวลผลสัญญาณ (การประมวลผลคำพูด การระบุตัวตน การกรอง)
- การประมวลผลภาพ (การบีบอัด การจดจำ รูปแบบ)
- การควบคุม (การวินิจฉัย การควบคุมคุณภาพ หุ่นยนต์)
- การเพิ่มประสิทธิภาพ (การวางแผน การควบคุมการจราจร การเงิน)
- การจำลอง (การจำลองกล่องดำ)
- การจำแนกประเภท (การวิเคราะห์ DNA)
- การประมาณค่า (ฟังก์ชันที่ไม่รู้จัก, ฟังก์ชันที่ซับซ้อน)
การใช้ฟังก์ชันคงที่ MicroMLP :
ชื่อ | การทำงาน |
---|
สร้าง | mlp = MicroMLP.Create(neuronsByLayers, activationFuncName, layersAutoConnectFunction=None, useBiasValue=1.0) |
LoadFromFile | 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) |
รับLayerIndex | idx = mlp.GetLayerIndex(layer) |
ลบเลเยอร์ | mlp.RemoveLayer(layer) |
รับInputLayer | inputLayer = mlp.GetInputLayer() |
GetOutputLayer | outputLayer = mlp.GetOutputLayer() |
เรียนรู้ | ok = mlp.Learn(inputVectorNNValues, targetVectorNNValues) |
ทดสอบ | ok = mlp.Test(inputVectorNNValues, targetVectorNNValues) |
ทำนาย | outputVectorNNValues = mlp.Predict(inputVectorNNValues) |
QLearningเรียนรู้เพื่อเลือกการกระทำ | 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 | รับ |
MSEเปอร์เซ็นต์ | mlp.MSEPercent | รับ |
แม่เปอร์เซ็นต์ | 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" | ไมโครMLP.ACTFUNC_HEAVISIDE | ขั้นตอนไบนารี Heaviside |
| "Sigmoid" | ไมโครMLP.ACTFUNC_SIGMOID | ลอจิสติกส์ (sigmoid หรือ soft step) |
| "TanH" | ไมโครMLP.ACTFUNC_TANH | ไฮเพอร์โบลิกแทนเจนต์ |
| "SoftPlus" | ไมโครMLP.ACTFUNC_SOFTPLUS | วงจรเรียงกระแส SoftPlus |
| "ReLU" | ไมโครMLP.ACTFUNC_RELU | หน่วยเชิงเส้นตรงที่ถูกแก้ไข |
| "Gaussian" | ไมโครMLP.ACTFUNC_GAUSSIAN | ฟังก์ชันเกาส์เซียน |
ฟังก์ชั่นเชื่อมต่อเลเยอร์อัตโนมัติ | รายละเอียด |
---|
MicroMLP.LayersFullConnect | เชื่อมต่อเครือข่ายอย่างสมบูรณ์ |
การใช้คลาส MicroMLP.Layer :
ชื่อ | การทำงาน |
---|
ตัวสร้าง | layer = MicroMLP.Layer(parentMicroMLP, activationFuncName=None, neuronsCount=0) |
รับLayerIndex | idx = layer.GetLayerIndex() |
GetNeuron | neuron = layer.GetNeuron(neuronIndex) |
รับ NeuronIndex | idx = layer.GetNeuronIndex(neuron) |
เพิ่มนิวรอน | layer.AddNeuron(neuron) |
ลบนิวรอน | layer.RemoveNeuron(neuron) |
ข้อผิดพลาด GetMeanSquare | mse = layer.GetMeanSquareError() |
GetMeanAbsoluteError | mae = layer.GetMeanAbsoluteError() |
GetMeanSquareErrorAsPercent | mseP = layer.GetMeanSquareErrorAsPercent() |
GetMeanAbsoluteErrorAsPercent | maeP = layer.GetMeanAbsoluteErrorAsPercent() |
ลบ | layer.Remove() |
คุณสมบัติ | ตัวอย่าง | อ่าน/เขียน |
---|
ผู้ปกครองMicroMLP | layer.ParentMicroMLP | รับ |
ActivationFuncName | layer.ActivationFuncName | รับ |
เซลล์ประสาท | layer.Neurons | รับ |
NeuronsCount | layer.NeuronsCount | รับ |
การใช้คลาส MicroMLP.InputLayer(Layer) :
ชื่อ | การทำงาน |
---|
ตัวสร้าง | inputLayer = MicroMLP.InputLayer(parentMicroMLP, neuronsCount=0) |
ตั้งค่าInputVectorNNValues | ok = inputLayer.SetInputVectorNNValues(inputVectorNNValues) |
การใช้คลาส MicroMLP.OutputLayer(Layer) :
ชื่อ | การทำงาน |
---|
ตัวสร้าง | outputLayer = MicroMLP.OutputLayer(parentMicroMLP, activationFuncName, neuronsCount=0) |
GetOutputVectorNNValues | outputVectorNNValues = outputLayer.GetOutputVectorNNValues() |
ข้อผิดพลาด ComputeTargetLayer | ok = outputLayer.ComputeTargetLayerError(targetVectorNNValues) |
การใช้คลาส MicroMLP.Neuron :
ชื่อ | การทำงาน |
---|
ตัวสร้าง | neuron = MicroMLP.Neuron(parentLayer) |
รับ NeuronIndex | idx = neuron.GetNeuronIndex() |
GetInputConnections | connections = neuron.GetInputConnections() |
GetOutputConnections | connections = neuron.GetOutputConnections() |
เพิ่มInputConnection | neuron.AddInputConnection(connection) |
เพิ่มการเชื่อมต่อเอาท์พุต | neuron.AddOutputConnection(connection) |
ลบInputConnection | neuron.RemoveInputConnection(connection) |
ลบOutputConnection | neuron.RemoveOutputConnection(connection) |
ตั้งค่าอคติ | neuron.SetBias(bias) |
รับอคติ | neuron.GetBias() |
ตั้งค่าOutputNNValue | neuron.SetOutputNNValue(nnvalue) |
ค่าคำนวณ | neuron.ComputeValue() |
ข้อผิดพลาดในการคำนวณ | neuron.ComputeError(targetNNValue=None) |
ลบ | neuron.Remove() |
คุณสมบัติ | ตัวอย่าง | อ่าน/เขียน |
---|
ParentLayer | neuron.ParentLayer | รับ |
เอาท์พุตที่คำนวณแล้ว | neuron.ComputedOutput | รับ |
ข้อผิดพลาดของ ComputedDelta | neuron.ComputedDeltaError | รับ |
ข้อผิดพลาดสัญญาณคอมพิวเตอร์ | neuron.ComputedSignalError | รับ |
การใช้คลาส MicroMLP.Connection :
ชื่อ | การทำงาน |
---|
ตัวสร้าง | connection = MicroMLP.Connection(neuronSrc, neuronDst, weight=None) |
อัพเดทน้ำหนัก | connection.UpdateWeight(eta, alpha) |
ลบ | connection.Remove() |
คุณสมบัติ | ตัวอย่าง | อ่าน/เขียน |
---|
NeuronSrc | connection.NeuronSrc | รับ |
NeuronDst | connection.NeuronDst | รับ |
น้ำหนัก | connection.Weight | รับ |
การใช้คลาส MicroMLP.Bias :
ชื่อ | การทำงาน |
---|
ตัวสร้าง | bias = MicroMLP.Bias(neuronDst, value=1.0, weight=None) |
อัพเดทน้ำหนัก | bias.UpdateWeight(eta, alpha) |
ลบ | bias.Remove() |
คุณสมบัติ | ตัวอย่าง | อ่าน/เขียน |
---|
NeuronDst | 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 | รับ/ตั้งค่า |
โดย JC`zic สำหรับ HC² ;')
ให้มันง่ายโง่ ?