def buildNet(indim, hidden, outdim=2, temperature=1., recurrent=True): from pybrain import FullConnection, BiasUnit, TanhLayer, SoftmaxLayer, RecurrentNetwork, LinearLayer, LinearConnection, FeedForwardNetwork, SigmoidLayer if recurrent: net = RecurrentNetwork() else: net = FeedForwardNetwork() net.addInputModule(LinearLayer(indim, name = 'i')) net.addModule(TanhLayer(hidden, name = 'h')) net.addModule(BiasUnit('bias')) net.addModule(SigmoidLayer(outdim, name = 'unscaled')) net.addOutputModule(SoftmaxLayer(outdim, name = 'o')) net.addConnection(FullConnection(net['i'], net['h'])) net.addConnection(FullConnection(net['bias'], net['h'])) net.addConnection(FullConnection(net['bias'], net['unscaled'])) net.addConnection(FullConnection(net['h'], net['unscaled'])) lconn = LinearConnection(net['unscaled'], net['o']) lconn._setParameters([1./temperature]*outdim) # these are fixed. lconn.paramdim = 0 net.addConnection(lconn) if recurrent: net.addRecurrentConnection(FullConnection(net['h'], net['h'])) net.sortModules() print net print 'number of parameters', net.paramdim return net
def testBank(): D = readData() print len(D), 'samples', D.indim, 'features' from pybrain import LinearLayer, FullConnection, FeedForwardNetwork, BiasUnit, SigmoidLayer net = FeedForwardNetwork() net.addInputModule(LinearLayer(D.indim, name='in')) net.addModule(BiasUnit(name='bias')) net.addOutputModule(SigmoidLayer(1, name='out')) net.addConnection(FullConnection(net['in'], net['out'])) net.addConnection(FullConnection(net['bias'], net['out'])) net.sortModules() p = net.params p *= 0.01 provider = ModuleWrapper(D, net, shuffling=False) algo = SGD( provider, net.params.copy(), #callback=printy, learning_rate=5.5e-5) #algo = vSGDfd(provider, net.params.copy(), #callback=printy # ) printy(algo, force=True) algo.run(len(D)) printy(algo, force=True) algo.run(len(D)) printy(algo, force=True) algo.run(len(D)) printy(algo, force=True) algo.run(len(D)) printy(algo, force=True) algo.run(len(D)) printy(algo, force=True)
def constructPerceptron(name, numNeurons): """Возвращает необученную сеть Аргументы: name -- имя сети, строка numNeurons -- число нейронов в каждом слое, список из целых чисел """ # Создаём сеть net = FeedForwardNetwork(name) # Создаём слои и добавляем их в сеть prevLayer = None newLayer = None for i, val in enumerate(numNeurons): # Если слой входной, он линейный if (i == 0): newLayer = LinearLayer(val, 'input') net.addInputModule(newLayer) prevLayer = newLayer # Если слой выходной, он линейный elif (i == len(numNeurons) - 1): newLayer = LinearLayer(val, 'output') net.addOutputModule(newLayer) # Иначе - слой сигмоидный else: newLayer = SigmoidLayer(val, 'hidden_' + str(i)) net.addModule(newLayer) # Если слой не входной, создаём связь между новым и предыдущим слоями if (i > 0): conn = FullConnection(prevLayer, newLayer, 'conn_' + str(i)) net.addConnection(conn) prevLayer = newLayer # Готовим сеть к активации, упорядочивая её внутреннюю структуру net.sortModules() # Готово return net
def train(self): """Train neuron grid by training sample""" self.net = FeedForwardNetwork() inLayer = LinearLayer(self.input_neurons) hiddenLayer = SigmoidLayer(self.hiden_neurons) outLayer = LinearLayer(self.OUTPUT_NEURONS) self.net.addInputModule(inLayer) self.net.addModule(hiddenLayer) self.net.addOutputModule(outLayer) in_to_hidden = FullConnection(inLayer, hiddenLayer) hidden_to_out = FullConnection(hiddenLayer, outLayer) self.net.addConnection(in_to_hidden) self.net.addConnection(hidden_to_out) self.net.sortModules() ds = ClassificationDataSet(self.input_neurons, self.OUTPUT_NEURONS, nb_classes=3) for i, coord in enumerate(self.X): ds.addSample(coord, (self.y[i], )) trainer = BackpropTrainer(self.net, dataset=ds, momentum=0.1, verbose=True, weightdecay=0.01) if self.maxErr: for i in range(self.maxEpochs): if trainer.train() < self.maxErr: print "Desired error reached" break else: trainer.trainUntilConvergence(maxEpochs=self.maxEpochs) print "Successfully finished"
from pybrain.supervised.trainers import BackpropTrainer import matplotlib.pylab as plt dateparse = lambda dates: pd.datetime.strptime(dates, '%Y-%m') data = pd.read_csv('AirPassengers.csv', parse_dates=['Month'], index_col='Month', date_parser=dateparse) ts = data['#Passengers'] # Make a new FFN object: n = FeedForwardNetwork() # Constructing the input, output and hidden layers: inLayer = LinearLayer(3) hiddenLayer = SigmoidLayer(4) outLayer = LinearLayer(1) # Adding layers to the network: n.addInputModule(inLayer) n.addModule(hiddenLayer) n.addOutputModule(outLayer) # determining how neurons should be connected: in_to_hidden = FullConnection(inLayer, hiddenLayer) hidden_to_out = FullConnection(hiddenLayer, outLayer) # Adding connections to the network n.addConnection(in_to_hidden) n.addConnection(hidden_to_out)