From 5c4a536c5a8cbc7aeb57bbe6f38a83be72ee21a6 Mon Sep 17 00:00:00 2001 From: aliaksei-kudravets Date: Thu, 26 May 2022 11:08:48 +0200 Subject: [PATCH] add backpropTrainer model with controled data set --- neurone/main.py | 71 ++++++++++++++++++++++++++++++++++++++++++++++ neurone/model.txt | Bin 0 -> 3478 bytes 2 files changed, 71 insertions(+) create mode 100644 neurone/main.py create mode 100644 neurone/model.txt diff --git a/neurone/main.py b/neurone/main.py new file mode 100644 index 0000000..64b5d2c --- /dev/null +++ b/neurone/main.py @@ -0,0 +1,71 @@ +import pybrain3 +import pickle +import matplotlib.pylab as plt +from numpy import ravel +from pybrain3.tools.shortcuts import buildNetwork +from pybrain3.datasets import SupervisedDataSet +from pybrain3.supervised.trainers import BackpropTrainer +from pybrain3.tools.xml.networkwriter import NetworkWriter +from pybrain3.tools.xml.networkreader import NetworkReader + +# https://www.machinelearningmastery.ru/how-to-configure-the-number-of-layers-and-nodes-in-a-neural-network/ +class SupervisedDataSetModel(): + def __init__(self, metrics:int = 4, + predictions:int = 1, + input_layer:int = 4, + hidden_layer:int = 3, + output_layer:int = 1): + # 4 метрики, 1 предикшн + self.metrics = metrics + self.predictions = predictions + self.input_layer = input_layer + self.hidden_layer = hidden_layer + self.output_layer = output_layer + self.ds = SupervisedDataSet(metrics, predictions) + + + def activateModel(self): + self.net = buildNetwork(self.input_layer, self.hidden_layer, self.output_layer, bias=True) + self.trainer = BackpropTrainer(self.net, dataset=self.ds, momentum=0.1, learningrate=0.01, verbose=True, weightdecay=0.01) + + self.trnerr, self.valerr = self.trainer.trainUntilConvergence() + + plt.plot(self.trnerr, 'b', self.valerr, 'r') + plt.show() + + def addDataToModel(self, input:list, target:list): + self.ds.addSample(inp=input, target=target) + + def predict(self, data:list): + y = self.net.activate(data) + print(y) + return y + + def saveModel(self): + fileObject = open('model.txt', 'wb') + pickle.dump(self.net, fileObject) + fileObject.close() + + +def getModel(): + fileObject = open('model.txt', 'rb') + net2 = pickle.load(fileObject) + fileObject.close() + return net2 + +model = SupervisedDataSetModel() + +# model.addDataToModel([2, 3, 80, 1], [5]) +# model.addDataToModel([5, 5, 50, 2], [4]) +# model.addDataToModel([10, 7, 40, 3], [3]) +# model.addDataToModel([15, 9, 20, 4], [2]) +# model.addDataToModel([20, 11, 10, 5], [1]) + +# model.activateModel() + +# model.saveModel() + +# USE MODEL - > +model = getModel() +print(model.activate([2, 3, 80, 1])) + diff --git a/neurone/model.txt b/neurone/model.txt new file mode 100644 index 0000000000000000000000000000000000000000..64f96946e2fe0cec6240475cc79911009fc77abd GIT binary patch literal 3478 zcmcInZ%iCT6u;{pJ^t2HXedE!BMpTQJ!^~D80s}b5W9q^)NiH7-t8We|EvaD!32o~6e zf{iLsEv`)1sgz=*RnsDauw9j^Wo?TKi6}fpa3zx{hM^l=P_5fmo=z1PttctDOx5^4 zcs)$=S5%KTYIY_&7ES5^ZpKbqs$>|_7&sp{l%%e479DwVO;$@_7LVJ4t_k|GvNA#~LwUk;GKjrbx%l;fdMq z`A2s3&OI>IF@LP>jcw|o&UpgUr~x&j7P=E^&E01QSaPNmw#>4zl;y?O4$oebcXmpZ zubd30FYjqRed^N3HA8!tWm753!ri!pS=NaH;G0UBiUsi43EbjCVvjCqRZ}FxWlL2b z8~Kw(fFmQQP7G3#^rMZy3{)=$0qq9XHnO&fwhG!T2GJIH>iwdiHh^4t=49*FGrtRa zi(~9*dhr&=)YHsa(-%WeGiOZ*3*F1WYAyj*LX}KgQ!Rqa?}68c=Yi;uRAB5j*!ODPb7_(J{^pn4GB7JdlPy}ZBG?c3cxQi2+}D{y6ETDZ50#IrHU5j&Y^0 zH`DNv^YDR#lUHvG%%f-j{Qm6hV$6B7qWArgB`4Y2^v;vt{t!EFzWm1xU;OAies1&R zV>^F}9cizEx`ds#`V(I?unzkKy6<3HYjB(qyF)Dg*2N1&Qc zf@d-vm-4Lm!Tzh6aaX&br}V&O`ltpK8wqwoLgFAnI;F*od;bbg@D76B6$5Avo^z1A z&covXi{_EIoP1f8cZKvAf@q--{ve0HyjI=1l8ir?L?0Gc^`d69{)Bp5!q1L;KLyuM zN*7urmgz#BXLJ$#{1mvKo9Y*SYgqdAbLZ?S{mQG07n~zQ3$K4R^PR(-@%P&^_59B3 z$5-M|Py~=K4to3QU<4QRhzq*F(zy#d6H?Gi26I`s(ACoXP3*4Ici(?|_hRhgrD09k zfAv2E!z%_m6v@VLh22yGNd`?z>=v(*h!VarqgzNZR%H`V#p_L;nkM~@qLv@Uiymc) z9m)TFqt}3*=XxFm@`vO3f;Eo4b&B-`%Q7nR${F;lue7MUpIE-1R=E}FIyKGrvo?2y c0tc4`%+rz|9&7s)!;!fA?^8U!>LWJ#H&-QRL;wH) literal 0 HcmV?d00001