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