PyBrain - Ebenen

Ebenen sind im Grunde eine Reihe von Funktionen, die auf verborgenen Ebenen eines Netzwerks verwendet werden.

Wir werden die folgenden Details zu Ebenen in diesem Kapitel durchgehen -

  • Ebene verstehen
  • Erstellen einer Ebene mit Pybrain

Ebenen verstehen

Wir haben früher Beispiele gesehen, in denen wir Ebenen wie folgt verwendet haben:

  • TanhLayer
  • SoftmaxLayer

Beispiel mit TanhLayer

Unten sehen Sie ein Beispiel, in dem wir TanhLayer zum Aufbau eines Netzwerks verwendet haben:

testnetwork.py

from pybrain.tools.shortcuts import buildNetwork
from pybrain.structure import TanhLayer
from pybrain.datasets import SupervisedDataSet
from pybrain.supervised.trainers import BackpropTrainer

# Create a network with two inputs, three hidden, and one output
nn = buildNetwork(2, 3, 1, bias=True, hiddenclass=TanhLayer)

# Create a dataset that matches network input and output sizes:
norgate = SupervisedDataSet(2, 1)

# Create a dataset to be used for testing.
nortrain = SupervisedDataSet(2, 1)

# Add input and target values to dataset
# Values for NOR truth table
norgate.addSample((0, 0), (1,))
norgate.addSample((0, 1), (0,))
norgate.addSample((1, 0), (0,))
norgate.addSample((1, 1), (0,))

# Add input and target values to dataset
# Values for NOR truth table
nortrain.addSample((0, 0), (1,))
nortrain.addSample((0, 1), (0,))
nortrain.addSample((1, 0), (0,))
nortrain.addSample((1, 1), (0,))

#Training the network with dataset norgate.
trainer = BackpropTrainer(nn, norgate)

# will run the loop 1000 times to train it.
for epoch in range(1000):
   trainer.train()
trainer.testOnData(dataset=nortrain, verbose = True)

Ausgabe

Die Ausgabe für den obigen Code lautet wie folgt:

python testnetwork.py

C:\pybrain\pybrain\src>python testnetwork.py
Testing on data:
('out: ', '[0.887 ]')
('correct:', '[1 ]')
error: 0.00637334
('out: ', '[0.149 ]')
('correct:', '[0 ]')
error: 0.01110338
('out: ', '[0.102 ]')
('correct:', '[0 ]')
error: 0.00522736
('out: ', '[-0.163]')
('correct:', '[0 ]')
error: 0.01328650
('All errors:', [0.006373344564625953, 0.01110338071737218, 
   0.005227359234093431, 0.01328649974219942])
('Average error:', 0.008997646064572746)
('Max error:', 0.01328649974219942, 'Median error:', 0.01110338071737218)

Beispiel mit SoftMaxLayer

Im Folgenden finden Sie ein Beispiel, in dem wir SoftmaxLayer zum Aufbau eines Netzwerks verwendet haben.

from pybrain.tools.shortcuts import buildNetwork
from pybrain.structure.modules import SoftmaxLayer
from pybrain.datasets import SupervisedDataSet
from pybrain.supervised.trainers import BackpropTrainer

# Create a network with two inputs, three hidden, and one output
nn = buildNetwork(2, 3, 1, bias=True, hiddenclass=SoftmaxLayer)

# Create a dataset that matches network input and output sizes:
norgate = SupervisedDataSet(2, 1)

# Create a dataset to be used for testing.
nortrain = SupervisedDataSet(2, 1)

# Add input and target values to dataset
# Values for NOR truth table
norgate.addSample((0, 0), (1,))
norgate.addSample((0, 1), (0,))
norgate.addSample((1, 0), (0,))
norgate.addSample((1, 1), (0,))

# Add input and target values to dataset
# Values for NOR truth table
nortrain.addSample((0, 0), (1,))
nortrain.addSample((0, 1), (0,))
nortrain.addSample((1, 0), (0,))
nortrain.addSample((1, 1), (0,))

#Training the network with dataset norgate.
trainer = BackpropTrainer(nn, norgate)

# will run the loop 1000 times to train it.
for epoch in range(1000):
trainer.train()
trainer.testOnData(dataset=nortrain, verbose = True)

Ausgabe

Die Ausgabe ist wie folgt -

C:\pybrain\pybrain\src>python example16.py
Testing on data:
('out: ', '[0.918 ]')
('correct:', '[1 ]')
error: 0.00333524
('out: ', '[0.082 ]')
('correct:', '[0 ]')
error: 0.00333484
('out: ', '[0.078 ]')
('correct:', '[0 ]')
error: 0.00303433
('out: ', '[-0.082]')
('correct:', '[0 ]')
error: 0.00340005
('All errors:', [0.0033352368788838365, 0.003334842961037291, 
   0.003034328685718761, 0.0034000458892589056])
('Average error:', 0.0032761136037246985)
('Max error:', 0.0034000458892589056, 'Median error:', 0.0033352368788838365)

Ebene in Pybrain erstellen

In Pybrain können Sie Ihre eigene Ebene wie folgt erstellen:

Um eine Ebene zu erstellen, müssen Sie verwenden NeuronLayer class als Basisklasse zum Erstellen aller Arten von Ebenen.

Beispiel

from pybrain.structure.modules.neuronlayer import NeuronLayer
class LinearLayer(NeuronLayer):
   def _forwardImplementation(self, inbuf, outbuf):
      outbuf[:] = inbuf
   def _backwardImplementation(self, outerr, inerr, outbuf, inbuf):
      inerr[:] = outer

Um eine Ebene zu erstellen, müssen zwei Methoden implementiert werden: _forwardImplementation () und _backwardImplementation () .

The _forwardImplementation() takes in 2 arguments inbufund outbuf, die Scipy-Arrays sind. Seine Größe hängt von den Eingabe- und Ausgabeabmessungen der Ebenen ab.

Die _backwardImplementation () wird verwendet, um die Ableitung der Ausgabe in Bezug auf die angegebene Eingabe zu berechnen.

Um eine Ebene in Pybrain zu implementieren, ist dies das Grundgerüst der Ebenenklasse -

from pybrain.structure.modules.neuronlayer import NeuronLayer
class NewLayer(NeuronLayer):
   def _forwardImplementation(self, inbuf, outbuf):
      pass
   def _backwardImplementation(self, outerr, inerr, outbuf, inbuf):
      pass

Wenn Sie eine quadratische Polynomfunktion als Schicht implementieren möchten, können Sie dies wie folgt tun:

Betrachten wir eine Polynomfunktion als -

f(x) = 3x2

Die Ableitung der obigen Polynomfunktion ist wie folgt:

f(x) = 6 x

Die letzte Schichtklasse für die obige Polynomfunktion lautet wie folgt:

testlayer.py

from pybrain.structure.modules.neuronlayer import NeuronLayer
class PolynomialLayer(NeuronLayer):
   def _forwardImplementation(self, inbuf, outbuf):
      outbuf[:] = 3*inbuf**2
   def _backwardImplementation(self, outerr, inerr, outbuf, inbuf):
      inerr[:] = 6*inbuf*outerr

Verwenden wir nun die unten gezeigte Ebene -

testlayer1.py

from testlayer import PolynomialLayer
from pybrain.tools.shortcuts import buildNetwork
from pybrain.tests.helpers import gradientCheck

n = buildNetwork(2, 3, 1, hiddenclass=PolynomialLayer)
n.randomize()

gradientCheck(n)

GradientCheck () testet, ob die Ebene einwandfrei funktioniert oder nicht. Wir müssen das Netzwerk übergeben, in dem die Ebene für gradientCheck (n) verwendet wird. Wenn die Ebene einwandfrei funktioniert, wird die Ausgabe als „Perfekter Verlauf“ ausgegeben.

Ausgabe

C:\pybrain\pybrain\src>python testlayer1.py
Perfect gradient