72 lines
2.3 KiB
Python
72 lines
2.3 KiB
Python
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]))
|
|
|