PyBrain - Lapisan
Lapisan pada dasarnya adalah sekumpulan fungsi yang digunakan pada lapisan jaringan yang tersembunyi.
Kami akan membahas detail berikut tentang lapisan di bab ini -
- Memahami lapisan
- Membuat Layer menggunakan Pybrain
Memahami lapisan
Kami telah melihat contoh sebelumnya di mana kami telah menggunakan lapisan sebagai berikut -
- TanhLayer
- SoftmaxLayer
Contoh menggunakan TanhLayer
Di bawah ini adalah salah satu contoh di mana kami telah menggunakan TanhLayer untuk membangun jaringan -
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)
Keluaran
Output untuk kode di atas adalah sebagai berikut -
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)
Contoh menggunakan SoftMaxLayer
Di bawah ini adalah salah satu contoh di mana kami telah menggunakan SoftmaxLayer untuk membangun jaringan -
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)
Keluaran
Outputnya adalah sebagai berikut -
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)
Membuat Layer di Pybrain
Di Pybrain, Anda dapat membuat lapisan Anda sendiri sebagai berikut -
Untuk membuat lapisan, Anda perlu menggunakan NeuronLayer class sebagai kelas dasar untuk membuat semua jenis lapisan.
Contoh
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
Untuk membuat Layer, kita perlu mengimplementasikan dua metode: _forwardImplementation () dan _backwardImplementation () .
The _forwardImplementation() takes in 2 arguments inbufdan outbuf, yang merupakan array Scipy. Ukurannya tergantung pada dimensi masukan dan keluaran lapisan.
The _backwardImplementation () digunakan untuk menghitung turunan dari output sehubungan dengan masukan yang diberikan.
Jadi untuk mengimplementasikan lapisan di Pybrain, ini adalah kerangka kelas lapisan -
from pybrain.structure.modules.neuronlayer import NeuronLayer
class NewLayer(NeuronLayer):
def _forwardImplementation(self, inbuf, outbuf):
pass
def _backwardImplementation(self, outerr, inerr, outbuf, inbuf):
pass
Jika Anda ingin menerapkan fungsi polinomial kuadrat sebagai lapisan, kita dapat melakukannya sebagai berikut -
Pertimbangkan kita memiliki fungsi polinomial sebagai -
f(x) = 3x2
Turunan dari fungsi polinom di atas adalah sebagai berikut -
f(x) = 6 x
Kelas lapisan terakhir untuk fungsi polinomial di atas adalah sebagai berikut -
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
Sekarang mari kita gunakan lapisan yang dibuat seperti yang ditunjukkan di bawah ini -
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 () akan menguji apakah layer bekerja dengan baik atau tidak. Kita harus melewati jaringan di mana layer digunakan untuk gradientCheck (n). Ini akan memberikan keluaran sebagai "Gradien Sempurna" jika lapisan bekerja dengan baik.
Keluaran
C:\pybrain\pybrain\src>python testlayer1.py
Perfect gradient