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