PyBrain - Panduan Cepat
Pybrain adalah pustaka sumber terbuka untuk pembelajaran Mesin yang diimplementasikan menggunakan python. Library ini menawarkan kepada Anda beberapa algoritme pelatihan yang mudah digunakan untuk jaringan, kumpulan data, pelatih untuk melatih dan menguji jaringan.
Definisi Pybrain menurut dokumentasi resminya adalah sebagai berikut -
PyBrain adalah Perpustakaan Pembelajaran Mesin modular untuk Python. Tujuannya adalah untuk menawarkan algoritme yang fleksibel, mudah digunakan, namun tetap kuat untuk Tugas Pembelajaran Mesin dan berbagai lingkungan yang telah ditentukan untuk menguji dan membandingkan algoritme Anda.
PyBrain adalah kependekan dari Python-Based Reinforcement Learning, Artificial Intelligence, dan Neural Network Library. Faktanya, kami menemukan nama itu terlebih dahulu dan kemudian merekayasa balik "Backronym" yang cukup deskriptif ini.
Fitur Pybrain
Berikut ini adalah fitur-fitur Pybrain -
Jaringan
Jaringan terdiri dari modul dan dihubungkan menggunakan koneksi. Pybrain mendukung jaringan saraf seperti Feed-Forward Network, Recurrent Network, dll.
feed-forward networkadalah jaringan neural, di mana informasi antar node bergerak ke arah depan dan tidak akan pernah berjalan mundur. Jaringan Feed Forward adalah yang pertama dan paling sederhana di antara jaringan yang tersedia di jaringan saraf tiruan.
Informasi tersebut diteruskan dari node input, di samping node tersembunyi dan kemudian ke node output.
Recurrent Networksmirip dengan Feed Forward Network; satu-satunya perbedaan adalah ia harus mengingat data di setiap langkah. Sejarah setiap langkah harus disimpan.
Set data
Set data adalah data yang akan diberikan untuk diuji, divalidasi, dan dilatih di jaringan. Jenis kumpulan data yang akan digunakan bergantung pada tugas yang akan kita lakukan dengan Machine Learning. Kumpulan data yang paling umum digunakan yang didukung Pybrain adalahSupervisedDataSet dan ClassificationDataSet.
SupervisedDataSet - Terdiri dari bidang input dan target. Ini adalah bentuk paling sederhana dari kumpulan data dan terutama digunakan untuk tugas pembelajaran yang diawasi.
ClassificationDataSet- Ini terutama digunakan untuk menangani masalah klasifikasi. Dibutuhkaninput, targetlapangan dan juga bidang tambahan yang disebut "kelas" yang merupakan cadangan otomatis dari target yang diberikan. Misalnya, keluarannya akan menjadi 1 atau 0 atau keluaran akan dikelompokkan bersama dengan nilai-nilai berdasarkan masukan yang diberikan, yaitu, apakah itu akan termasuk dalam satu kelas tertentu.
Pelatih
Saat kita membuat jaringan, yaitu jaringan neural, ia akan dilatih berdasarkan data pelatihan yang diberikan padanya. Sekarang apakah jaringan dilatih dengan benar atau tidak akan bergantung pada prediksi data pengujian yang diuji pada jaringan itu. Konsep terpenting dalam Pybrain Training adalah penggunaan BackpropTrainer dan TrainUntilConvergence.
BackpropTrainer - Ini adalah pelatih yang melatih parameter modul sesuai dengan kumpulan data yang diawasi atau ClassificationDataSet (berpotensi berurutan) dengan melakukan propagasi balik kesalahan (melalui waktu).
TrainUntilConvergence −Ini digunakan untuk melatih modul pada dataset hingga konvergen.
Alat
Pybrain menawarkan modul alat yang dapat membantu membangun jaringan dengan mengimpor paket: pybrain.tools.shortcuts.buildNetwork
Visualisasi
Data pengujian tidak dapat divisualisasikan menggunakan pybrain. Tapi Pybrain dapat bekerja dengan kerangka kerja lain seperti Mathplotlib, pyplot untuk memvisualisasikan data.
Keuntungan dari Pybrain
Keuntungan dari Pybrain adalah -
Pybrain adalah perpustakaan gratis sumber terbuka untuk mempelajari Pembelajaran Mesin. Ini adalah awal yang baik untuk setiap pendatang baru yang tertarik dengan Pembelajaran Mesin.
Pybrain menggunakan python untuk mengimplementasikannya dan itu membuatnya cepat dalam pengembangan dibandingkan dengan bahasa seperti Java / C ++.
Pybrain bekerja dengan mudah dengan pustaka python lainnya untuk memvisualisasikan data.
Pybrain menawarkan dukungan untuk jaringan populer seperti Feed-Forward Network, Recurrent Networks, Neural Networks, dll.
Bekerja dengan .csv untuk memuat kumpulan data sangat mudah di Pybrain. Ini juga memungkinkan penggunaan set data dari perpustakaan lain.
Pelatihan dan pengujian data mudah dilakukan menggunakan pelatih Pybrain.
Batasan Pybrain
Pybrain menawarkan lebih sedikit bantuan untuk masalah apa pun yang dihadapi. Ada beberapa pertanyaan yang belum terjawabstackoverflow dan seterusnya Google Group.
Alur Kerja Pybrain
Sesuai dokumentasi Pybrain, aliran pembelajaran mesin ditunjukkan pada gambar berikut -
Pada awalnya, kami memiliki data mentah yang setelah preprocessing dapat digunakan dengan Pybrain.
Alur Pybrain dimulai dengan kumpulan data yang dibagi menjadi data terlatih dan data uji.
jaringan dibuat, dan kumpulan data serta jaringan diberikan kepada pelatih.
pelatih melatih data di jaringan dan mengklasifikasikan keluaran sebagai kesalahan terlatih dan kesalahan validasi yang dapat divisualisasikan.
data yang diuji dapat divalidasi untuk melihat apakah keluarannya cocok dengan data yang dilatih.
Terminologi
Ada istilah penting yang harus dipertimbangkan saat bekerja dengan Pybrain untuk pembelajaran mesin. Mereka adalah sebagai berikut -
Total Error- Ini mengacu pada kesalahan yang ditampilkan setelah jaringan dilatih. Jika error terus berubah di setiap iterasi, itu berarti masih perlu waktu untuk menyelesaikannya, hingga mulai menunjukkan error yang konstan antar iterasi. Setelah itu mulai menunjukkan nomor kesalahan konstan, itu berarti bahwa jaringan telah berkumpul dan akan tetap sama terlepas dari pelatihan tambahan apa pun yang diterapkan.
Trained data - Ini adalah data yang digunakan untuk melatih jaringan Pybrain.
Testing data - Ini adalah data yang digunakan untuk menguji jaringan Pybrain yang terlatih.
Trainer- Saat kita membuat jaringan, yaitu jaringan saraf, jaringan itu akan dilatih berdasarkan data pelatihan yang diberikan padanya. Sekarang apakah jaringan dilatih dengan benar atau tidak akan bergantung pada prediksi data pengujian yang diuji pada jaringan itu. Konsep terpenting dalam Pybrain Training adalah penggunaan BackpropTrainer dan TrainUntilConvergence.
BackpropTrainer - Ini adalah pelatih yang melatih parameter modul sesuai dengan kumpulan data yang diawasi atau ClassificationDataSet (berpotensi berurutan) dengan melakukan propagasi balik kesalahan (melalui waktu).
TrainUntilConvergence - Digunakan untuk melatih modul pada dataset hingga konvergen.
Layers - Lapisan pada dasarnya adalah sekumpulan fungsi yang digunakan pada lapisan tersembunyi jaringan.
Connections- Koneksi berfungsi mirip dengan lapisan; satu-satunya perbedaan adalah ia menggeser data dari satu node ke node lainnya dalam suatu jaringan.
Modules - Modul adalah jaringan yang terdiri dari buffer input dan output.
Supervised Learning- Dalam hal ini, kita memiliki input dan output, dan kita dapat menggunakan algoritme untuk memetakan input dengan output. Algoritme dibuat untuk mempelajari data latih yang diberikan dan diiterasi padanya dan proses iterasi berhenti ketika algoritme memprediksi data yang benar.
Unsupervised- Dalam hal ini, kami memiliki masukan tetapi tidak mengetahui keluarannya. Peran pembelajaran tanpa pengawasan adalah mendapatkan pelatihan sebanyak mungkin dengan data yang diberikan.
Pada bab ini, kita akan mengerjakan instalasi PyBrain. Untuk mulai bekerja dengan PyBrain, kita perlu menginstal Python terlebih dahulu. Jadi kami akan bekerja untuk mengikuti -
- Instal Python
- Pasang PyBrain
Menginstal Python
Untuk menginstal Python, buka situs resmi Python: www.python.org/downloads seperti yang ditunjukkan di bawah ini dan klik versi terbaru yang tersedia untuk windows, Linux / Unix dan macOS. Unduh Python sesuai dengan OS 64 atau 32-bit yang tersedia untuk Anda.
Setelah Anda mengunduh, klik .exe file dan ikuti langkah-langkah untuk menginstal python di sistem Anda.
Manajer paket python, yaitu pip juga akan diinstal secara default dengan instalasi di atas. Untuk membuatnya berfungsi secara global di sistem Anda, tambahkan langsung lokasi python ke variabel PATH, hal yang sama ditunjukkan pada awal instalasi untuk diingat untuk memeriksa kotak centang yang bertuliskan TAMBAHKAN ke PATH. Jika Anda lupa untuk memeriksanya, harap ikuti langkah-langkah yang diberikan di bawah ini untuk ditambahkan ke PATH.
Tambahkan ke PATH
Untuk menambah PATH, ikuti langkah-langkah di bawah ini -
Klik kanan pada ikon Komputer Anda dan klik pada properti -> Pengaturan Sistem Lanjutan.
Ini akan menampilkan layar seperti gambar di bawah ini
Klik Variabel Lingkungan seperti yang ditunjukkan di atas. Ini akan menampilkan layar seperti gambar di bawah ini
Pilih Path dan klik tombol Edit, tambahkan jalur lokasi python Anda di bagian akhir. Sekarang mari kita periksa versi python.
Memeriksa versi Python
Kode di bawah ini membantu kami dalam memeriksa versi Python -
E:\pybrain>python --version
Python 3.7.3
Menginstal PyBrain
Sekarang kita telah menginstal Python, kita akan menginstal Pybrain. Clone repositori pybrain seperti yang ditunjukkan di bawah ini -
git clone git://github.com/pybrain/pybrain.git
C:\pybrain>git clone git://github.com/pybrain/pybrain.git
Cloning into 'pybrain'...
remote: Enumerating objects: 2, done.
remote: Counting objects: 100% (2/2), done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 12177 (delta 0), reused 0 (delta 0), pack-reused 12175
Receiving objects: 100% (12177/12177), 13.29 MiB | 510.00 KiB/s, done.
Resolving deltas: 100% (8506/8506), done.
Sekarang lakukan cd pybrain dan jalankan perintah berikut -
python setup.py install
Perintah ini akan menginstal pybrain di sistem Anda.
Setelah selesai, untuk memeriksa apakah pybrain diinstal atau tidak, buka command line prompt dan mulai interpreter python seperti yang ditunjukkan di bawah ini -
C:\pybrain\pybrain>python
Python 3.7.3 (v3.7.3:ef4ec6ed12, Mar 25 2019, 22:22:05) [MSC v.1916 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>>
Kita bisa menambahkan import pybrain menggunakan kode di bawah ini -
>>> import pybrain
>>>
Jika import pybrain berfungsi tanpa kesalahan, itu berarti pybrain berhasil diinstal. Anda sekarang dapat menulis kode Anda untuk mulai bekerja dengan pybrain.
PyBrain adalah library yang dikembangkan untuk Machine Learning dengan Python. Ada beberapa konsep penting dalam Machine Learning dan salah satunya adalah Networks. Jaringan terdiri dari modul dan dihubungkan menggunakan koneksi.
Tata letak jaringan neural sederhana adalah sebagai berikut -
Pybrain mendukung jaringan saraf seperti Jaringan Feed-Forward, Jaringan Berulang, dll.
SEBUAH feed-forward networkadalah jaringan neural, di mana informasi antar node bergerak ke arah depan dan tidak akan pernah berjalan mundur. Jaringan Feed Forward adalah yang pertama dan paling sederhana di antara jaringan yang tersedia di jaringan saraf tiruan. Informasi tersebut diteruskan dari node input, di samping node tersembunyi dan kemudian ke node output.
Berikut adalah tata letak jaringan umpan maju sederhana.
Lingkaran dikatakan sebagai modul dan garis dengan panah adalah koneksi ke modul.
Node A, B, C dan D adalah node masukan
H1, H2, H3, H4 adalah node tersembunyi dan O adalah outputnya.
Di jaringan di atas, kami memiliki 4 node masukan, 4 lapisan tersembunyi dan 1 keluaran. Jumlah garis yang ditunjukkan pada diagram menunjukkan parameter bobot dalam model yang disesuaikan selama pelatihan.
Recurrent Networksmirip dengan Feed Forward Network dengan satu-satunya perbedaan yaitu ia harus mengingat data di setiap langkah. Sejarah setiap langkah harus disimpan.
Berikut adalah Tata Letak Jaringan Berulang sederhana -
Jaringan terdiri dari modul, dan mereka terhubung menggunakan koneksi. Dalam bab ini, kita akan belajar untuk -
- Buat Jaringan
- Analisis Jaringan
Membuat Jaringan
Kami akan menggunakan interpreter python untuk mengeksekusi kode kami. Untuk membuat jaringan di pybrain, kita harus menggunakanbuildNetwork api seperti yang ditunjukkan di bawah ini -
C:\pybrain\pybrain>python
Python 3.7.3 (v3.7.3:ef4ec6ed12, Mar 25 2019, 22:22:05) [MSC v.1916 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>>
>>>
>>> from pybrain.tools.shortcuts import buildNetwork
>>> network = buildNetwork(2, 3, 1)
>>>
Kami telah membuat jaringan menggunakan buildNetwork () dan parameternya adalah 2, 3, 1 yang berarti jaringan terdiri dari 2 input, 3 tersembunyi, dan satu output tunggal.
Di bawah ini adalah rincian jaringan, yaitu Modul dan Koneksi -
C:\pybrain\pybrain>python
Python 3.7.3 (v3.7.3:ef4ec6ed12, Mar 25 2019, 22:22:05) [MSC v.1916 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> from pybrain.tools.shortcuts import buildNetwork
>>> network = buildNetwork(2,3,1)
>>> print(network)
FeedForwardNetwork-8
Modules:
[<BiasUnit 'bias'>, <LinearLayer 'in'>, <SigmoidLayer 'hidden0'>,
<LinearLay er 'out'>]
Connections:
[<FullConnection 'FullConnection-4': 'hidden0' -> 'out'>, <FullConnection 'F
ullConnection-5': 'in' -> 'hidden0'>, <FullConnection 'FullConnection-6': 'bias'
-< 'out'>, <FullConnection 'FullConnection-7': 'bias' -> 'hidden0'>]
>>>
Modul terdiri dari Lapisan, dan Koneksi dibuat dari Objek Sambungan Penuh. Jadi masing-masing modul dan koneksi diberi nama seperti yang ditunjukkan di atas.
Menganalisis Jaringan
Anda dapat mengakses lapisan modul dan koneksi satu per satu dengan mengacu pada namanya sebagai berikut -
>>> network['bias']
<BiasUnit 'bias'>
>>> network['in']
<LinearLayer 'in'>
Set data adalah data masukan yang akan diberikan untuk menguji, memvalidasi, dan melatih jaringan. Jenis kumpulan data yang akan digunakan bergantung pada tugas yang akan kita lakukan dengan Machine Learning. Dalam bab ini, kita akan melihat yang berikut ini -
- Membuat Set Data
- Menambahkan Data ke Set Data
Pertama-tama kita akan belajar cara membuat Dataset dan menguji dataset dengan input yang diberikan.
Membuat Set Data
Untuk membuat dataset kita perlu menggunakan paket dataset pybrain: pybrain.datasets.
Pybrain mendukung kelas set data seperti SupervisedDataset, SequentialDataset, ClassificationDataSet. Kami akan memanfaatkanSupervisedDataset , untuk membuat dataset. Dataset yang akan digunakan bergantung pada tugas pembelajaran mesin yang coba diterapkan pengguna. SupervisiDataset adalah yang paling sederhana dan kita akan menggunakan yang sama di sini.
SEBUAH SupervisedDataset datasetmembutuhkan masukan dan target params. Pertimbangkan tabel kebenaran XOR, seperti yang ditunjukkan di bawah ini -
SEBUAH | B | A XOR B |
---|---|---|
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 0 |
Input yang diberikan seperti array 2 dimensi dan kita mendapatkan 1 output. Jadi disini inputnya menjadi size dan targetnya outputnya yaitu 1. Jadi input yang akan digunakan untuk dataset kita adalah 2,1.
createataset.py
from pybrain.datasets import SupervisedDataSet
sds = SupervisedDataSet(2, 1)
print(sds)
Inilah yang kita dapatkan ketika kita mengeksekusi kode di atas python createataset.py -
C:\pybrain\pybrain\src>python createdataset.py
input: dim(0, 2)
[]
target: dim(0, 1)
[]
Ini menampilkan input ukuran 2 dan target ukuran 1 seperti yang ditunjukkan di atas.
Menambahkan Data ke Set Data
Sekarang mari kita tambahkan data sampel ke dataset.
createataset.py
from pybrain.datasets import SupervisedDataSet
sds = SupervisedDataSet(2, 1)
xorModel = [
[(0,0), (0,)],
[(0,1), (1,)],
[(1,0), (1,)],
[(1,1), (0,)],
]
for input, target in xorModel:
sds.addSample(input, target)
print("Input is:")
print(sds['input'])
print("\nTarget is:")
print(sds['target'])
Kami telah membuat array XORModel seperti yang ditunjukkan di bawah ini -
xorModel = [
[(0,0), (0,)],
[(0,1), (1,)],
[(1,0), (1,)],
[(1,1), (0,)],
]
Untuk menambahkan data ke dataset, kami menggunakan metode addSample () yang menerima input dan target.
Untuk menambahkan data ke addSample, kita akan mengulang melalui array xorModel seperti yang ditunjukkan di bawah ini -
for input, target in xorModel:
sds.addSample(input, target)
Setelah dieksekusi, berikut ini adalah output yang kita dapatkan -
python createataset.py
C:\pybrain\pybrain\src>python createdataset.py
Input is:
[[0. 0.]
[0. 1.]
[1. 0.]
[1. 1.]]
Target is:
[[0.]
[1.]
[1.]
[0.]]
Anda bisa mendapatkan detail input dan target dari dataset yang dibuat hanya dengan menggunakan indeks input dan target seperti yang ditunjukkan di bawah ini -
print(sds['input'])
print(sds[‘target’])
Set data adalah data yang akan diberikan untuk diuji, divalidasi, dan dilatih di jaringan. Jenis kumpulan data yang akan digunakan bergantung pada tugas yang akan kita lakukan dengan pembelajaran mesin. Kita akan membahas berbagai tipe dataset dalam bab ini.
Kita dapat bekerja dengan dataset dengan menambahkan paket berikut -
pybrain.dataset
SupervisedDataSet
SupervisedDataSet terdiri dari bidang input dan target. Ini adalah bentuk paling sederhana dari kumpulan data dan terutama digunakan untuk tugas pembelajaran yang diawasi.
Di bawah ini adalah bagaimana Anda dapat menggunakannya dalam kode -
from pybrain.datasets import SupervisedDataSet
Metode yang tersedia di SupervisedDataSet adalah sebagai berikut -
addSample (inp, target)
Metode ini akan menambah sampel input dan target baru.
splitWithProportion (proporsi = 0,10)
Ini akan membagi dataset menjadi dua bagian. Bagian pertama akan memiliki% dari dataset yang diberikan sebagai input, yaitu jika inputnya adalah 0,10, maka itu adalah 10% dari dataset dan 90% dari data. Anda dapat memutuskan proporsinya sesuai pilihan Anda. Kumpulan data yang terbagi dapat digunakan untuk menguji dan melatih jaringan Anda.
copy() - Mengembalikan salinan dalam dari kumpulan data.
clear() - Hapus dataset.
saveToFile (nama file, format = Tidak Ada, ** kwargs)
Simpan objek ke file yang diberikan oleh nama file.
Contoh
Berikut adalah contoh kerja menggunakan SupervisedDataset -
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 dari program 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)
ClassificationDataSet
Dataset ini terutama digunakan untuk menangani masalah klasifikasi. Dibutuhkan masukan, bidang target dan juga bidang tambahan yang disebut "kelas" yang merupakan cadangan otomatis dari target yang diberikan. Misalnya, keluarannya akan menjadi 1 atau 0 atau keluaran akan dikelompokkan bersama dengan nilai-nilai berdasarkan masukan yang diberikan, yaitu akan termasuk dalam satu kelas tertentu.
Inilah cara Anda dapat menggunakannya dalam kode -
from pybrain.datasets import ClassificationDataSet
Syntax
// ClassificationDataSet(inp, target=1, nb_classes=0, class_labels=None)
Metode yang tersedia di ClassificationDataSet adalah sebagai berikut -
addSample(inp, target) - Metode ini akan menambah sampel input dan target baru.
splitByClass() - Metode ini akan memberikan dua dataset baru, dataset pertama akan memiliki kelas yang dipilih (0..nClasses-1), yang kedua akan memiliki sampel yang tersisa.
_convertToOneOfMany() - Metode ini akan mengubah kelas target menjadi representasi 1-of-k, mempertahankan target lama sebagai kelas lapangan
Berikut adalah contoh kerja dari ClassificationDataSet.
Contoh
from sklearn import datasets
import matplotlib.pyplot as plt
from pybrain.datasets import ClassificationDataSet
from pybrain.utilities import percentError
from pybrain.tools.shortcuts import buildNetwork
from pybrain.supervised.trainers import BackpropTrainer
from pybrain.structure.modules import SoftmaxLayer
from numpy import ravel
digits = datasets.load_digits()
X, y = digits.data, digits.target
ds = ClassificationDataSet(64, 1, nb_classes=10)
for i in range(len(X)):
ds.addSample(ravel(X[i]), y[i])
test_data_temp, training_data_temp = ds.splitWithProportion(0.25)
test_data = ClassificationDataSet(64, 1, nb_classes=10)
for n in range(0, test_data_temp.getLength()):
test_data.addSample( test_data_temp.getSample(n)[0], test_data_temp.getSample(n)[1] )
training_data = ClassificationDataSet(64, 1, nb_classes=10)
for n in range(0, training_data_temp.getLength()):
training_data.addSample( training_data_temp.getSample(n)[0], training_data_temp.getSample(n)[1] )
test_data._convertToOneOfMany()
training_data._convertToOneOfMany()
net = buildNetwork(training_data.indim, 64, training_data.outdim, outclass=SoftmaxLayer)
trainer = BackpropTrainer(
net, dataset=training_data, momentum=0.1,learningrate=0.01,verbose=True,weightdecay=0.01
)
trnerr,valerr = trainer.trainUntilConvergence(dataset=training_data,maxEpochs=10)
plt.plot(trnerr,'b',valerr,'r')
plt.show()
trainer.trainEpochs(10)
print('Percent Error on testData:',percentError(trainer.testOnClassData(dataset=test_data), test_data['class']))
Dataset yang digunakan pada contoh di atas adalah dataset digit dan kelas-kelasnya dari 0-9, jadi ada 10 kelas. Inputnya 64, target 1 dan kelas, 10.
Kode melatih jaringan dengan kumpulan data dan mengeluarkan grafik untuk kesalahan pelatihan dan kesalahan validasi. Ini juga memberikan persentase kesalahan pada testdata yaitu sebagai berikut -
Keluaran
Total error: 0.0432857814358
Total error: 0.0222276374185
Total error: 0.0149012052174
Total error: 0.011876985318
Total error: 0.00939854792853
Total error: 0.00782202445183
Total error: 0.00714707652044
Total error: 0.00606068893793
Total error: 0.00544257958975
Total error: 0.00463929281336
Total error: 0.00441275665294
('train-errors:', '[0.043286 , 0.022228 , 0.014901 , 0.011877 , 0.009399 , 0.007
822 , 0.007147 , 0.006061 , 0.005443 , 0.004639 , 0.004413 ]')
('valid-errors:', '[0.074296 , 0.027332 , 0.016461 , 0.014298 , 0.012129 , 0.009
248 , 0.008922 , 0.007917 , 0.006547 , 0.005883 , 0.006572 , 0.005811 ]')
Percent Error on testData: 3.34075723830735
Pada bab ini, kita akan belajar bagaimana mendapatkan data untuk bekerja dengan dataset Pybrain.
Yang paling umum digunakan adalah dataset adalah -
- Menggunakan sklearn
- Dari file CSV
Menggunakan sklearn
Menggunakan sklearn
Berikut ini tautan yang memiliki detail dataset dari sklearn:https://scikit-learn.org/stable/datasets/index.html
Berikut ini beberapa contoh cara menggunakan dataset dari sklearn -
Contoh 1: load_digits ()
from sklearn import datasets
from pybrain.datasets import ClassificationDataSet
digits = datasets.load_digits()
X, y = digits.data, digits.target
ds = ClassificationDataSet(64, 1, nb_classes=10)
for i in range(len(X)):
ds.addSample(ravel(X[i]), y[i])
Contoh 2: load_iris ()
from sklearn import datasets
from pybrain.datasets import ClassificationDataSet
digits = datasets.load_iris()
X, y = digits.data, digits.target
ds = ClassificationDataSet(4, 1, nb_classes=3)
for i in range(len(X)):
ds.addSample(X[i], y[i])
Dari file CSV
Kami juga dapat menggunakan data dari file csv sebagai berikut -
Berikut adalah contoh data untuk tabel kebenaran xor: datasetettest.csv
Berikut adalah contoh kerja untuk membaca data dari file .csv untuk dataset.
Contoh
from pybrain.tools.shortcuts import buildNetwork
from pybrain.structure import TanhLayer
from pybrain.datasets import SupervisedDataSet
from pybrain.supervised.trainers import BackpropTrainer
import pandas as pd
print('Read data...')
df = pd.read_csv('data/datasettest.csv',header=0).head(1000)
data = df.values
train_output = data[:,0]
train_data = data[:,1:]
print(train_output)
print(train_data)
# 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:
_gate = 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
for i in range(0, len(train_output)) :
_gate.addSample(train_data[i], train_output[i])
#Training the network with dataset norgate.
trainer = BackpropTrainer(nn, _gate)
# will run the loop 1000 times to train it.
for epoch in range(1000):
trainer.train()
trainer.testOnData(dataset=_gate, verbose = True)
Panda digunakan untuk membaca data dari file csv seperti yang ditunjukkan pada contoh.
Keluaran
C:\pybrain\pybrain\src>python testcsv.py
Read data...
[0 1 1 0]
[
[0 0]
[0 1]
[1 0]
[1 1]
]
Testing on data:
('out: ', '[0.004 ]')
('correct:', '[0 ]')
error: 0.00000795
('out: ', '[0.997 ]')
('correct:', '[1 ]')
error: 0.00000380
('out: ', '[0.996 ]')
('correct:', '[1 ]')
error: 0.00000826
('out: ', '[0.004 ]')
('correct:', '[0 ]')
error: 0.00000829
('All errors:', [7.94733477723902e-06, 3.798267582566822e-06, 8.260969076585322e
-06, 8.286246525558165e-06])
('Average error:', 7.073204490487332e-06)
('Max error:', 8.286246525558165e-06, 'Median error:', 8.260969076585322e-06)
Sejauh ini, kami telah melihat cara membuat jaringan dan kumpulan data. Untuk bekerja dengan kumpulan data dan jaringan bersama-sama, kita harus melakukannya dengan bantuan pelatih.
Di bawah ini adalah contoh yang berfungsi untuk melihat cara menambahkan kumpulan data ke jaringan yang dibuat, dan kemudian dilatih dan diuji menggunakan pelatih.
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)
Untuk menguji jaringan dan dataset, kita membutuhkan BackpropTrainer. BackpropTrainer adalah pelatih yang melatih parameter modul sesuai dengan kumpulan data yang diawasi (berpotensi berurutan) dengan melakukan propagasi balik kesalahan (melalui waktu).
Kami telah membuat 2 dataset kelas - SupervisedDataSet. Kami menggunakan model data NOR sebagai berikut -
SEBUAH | B | A NOR B |
---|---|---|
0 | 0 | 1 |
0 | 1 | 0 |
1 | 0 | 0 |
1 | 1 | 0 |
Model data di atas digunakan untuk melatih jaringan.
norgate = 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,))
Berikut ini adalah kumpulan data yang digunakan untuk menguji -
# 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,))
Pelatih digunakan sebagai berikut -
#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()
Untuk menguji dataset, kita dapat menggunakan kode di bawah ini -
trainer.testOnData(dataset=nortrain, verbose = True)
Keluaran
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)
Jika Anda memeriksa output, data pengujian hampir cocok dengan dataset yang kami sediakan dan karenanya kesalahannya adalah 0,008.
Sekarang mari kita ubah data pengujian dan melihat kesalahan rata-rata. Kami telah mengubah output seperti yang ditunjukkan di bawah ini -
Berikut ini adalah kumpulan data yang digunakan untuk menguji -
# 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), (0,))
norgate.addSample((0, 1), (1,))
norgate.addSample((1, 0), (1,))
norgate.addSample((1, 1), (0,))
Mari kita sekarang mengujinya.
Keluaran
python testnework.py
C:\pybrain\pybrain\src>python testnetwork.py
Testing on data:
('out: ', '[0.988 ]')
('correct:', '[0 ]')
error: 0.48842978
('out: ', '[0.027 ]')
('correct:', '[1 ]')
error: 0.47382097
('out: ', '[0.021 ]')
('correct:', '[1 ]')
error: 0.47876379
('out: ', '[-0.04 ]')
('correct:', '[0 ]')
error: 0.00079160
('All errors:', [0.4884297811030845, 0.47382096780393873, 0.47876378995939756, 0
.0007915982149002194])
('Average error:', 0.3604515342703303)
('Max error:', 0.4884297811030845, 'Median error:', 0.47876378995939756)
Kami mendapatkan kesalahan sebagai 0,36, yang menunjukkan bahwa data pengujian kami tidak sepenuhnya cocok dengan jaringan yang dilatih.
Dalam bab ini, kita akan melihat beberapa contoh di mana kita akan melatih data dan menguji kesalahan pada data yang dilatih.
Kami akan menggunakan pelatih -
BackpropTrainer
BackpropTrainer adalah pelatih yang melatih parameter modul sesuai dengan kumpulan data yang diawasi atau ClassificationDataSet (berpotensi berurutan) dengan melakukan propagasi balik kesalahan (melalui waktu).
TrainUntilConvergence
Ini digunakan untuk melatih modul pada dataset hingga konvergen.
Saat kita membuat jaringan neural, jaringan tersebut akan dilatih berdasarkan data pelatihan yang diberikan padanya. Sekarang apakah jaringan tersebut dilatih dengan benar atau tidak akan bergantung pada prediksi data pengujian yang diuji pada jaringan tersebut.
Mari kita lihat contoh kerja langkah demi langkah yang mana akan membangun jaringan saraf dan memprediksi kesalahan pelatihan, kesalahan pengujian dan kesalahan validasi.
Menguji Jaringan kami
Berikut adalah langkah-langkah yang akan kami ikuti untuk menguji Jaringan kami -
- Mengimpor PyBrain yang diperlukan dan paket lainnya
- Buat ClassificationDataSet
- Memisahkan dataset 25% sebagai data uji dan 75% sebagai data terlatih
- Mengonversi data Testdata dan data Terlatih kembali sebagai ClassificationDataSet
- Membuat Jaringan Neural
- Melatih Jaringan
- Memvisualisasikan kesalahan dan data validasi
- Persentase untuk data pengujian Error
Step 1
Mengimpor PyBrain yang diperlukan dan paket lainnya.
Paket yang kita butuhkan diimpor seperti yang ditunjukkan di bawah ini -
from sklearn import datasets
import matplotlib.pyplot as plt
from pybrain.datasets import ClassificationDataSet
from pybrain.utilities import percentError
from pybrain.tools.shortcuts import buildNetwork
from pybrain.supervised.trainers import BackpropTrainer
from pybrain.structure.modules import SoftmaxLayer
from numpy import ravel
Step 2
Langkah selanjutnya adalah membuat ClassificationDataSet.
Untuk Dataset, kita akan menggunakan dataset dari dataset sklearn seperti yang ditunjukkan di bawah ini -
Lihat set data load_digits dari sklearn di tautan di bawah ini -
https://scikit-learn.org/stable/modules/generated/sklearn.datasets.load_digits.html#sklearn.datasets.load_digits
digits = datasets.load_digits()
X, y = digits.data, digits.target
ds = ClassificationDataSet(64, 1, nb_classes=10)
# we are having inputs are 64 dim array and since the digits are from 0-9 the
classes considered is 10.
for i in range(len(X)):
ds.addSample(ravel(X[i]), y[i]) # adding sample to datasets
Step 3
Memisahkan kumpulan data 25% sebagai data uji dan 75% sebagai data terlatih -
test_data_temp, training_data_temp = ds.splitWithProportion(0.25)
Jadi disini, kami telah menggunakan metode pada dataset yang disebut splitWithProportion () dengan nilai 0,25, itu akan membagi dataset menjadi 25% sebagai data uji dan 75% sebagai data latih.
Step 4
Mengonversi data Testdata dan data Terlatih kembali sebagai ClassificationDataSet.
test_data = ClassificationDataSet(64, 1, nb_classes=10)
for n in range(0, test_data_temp.getLength()):
test_data.addSample( test_data_temp.getSample(n)[0], test_data_temp.getSample(n)[1] )
training_data = ClassificationDataSet(64, 1, nb_classes=10)
for n in range(0, training_data_temp.getLength()):
training_data.addSample(
training_data_temp.getSample(n)[0], training_data_temp.getSample(n)[1]
)
test_data._convertToOneOfMany()
training_data._convertToOneOfMany()
Menggunakan metode splitWithProportion () pada dataset mengubah dataset menjadi superviseddataset, jadi kita akan mengubah dataset kembali ke dataset klasifikasi seperti yang ditunjukkan pada langkah di atas.
Step 5
Langkah selanjutnya adalah membuat Jaringan Neural.
net = buildNetwork(training_data.indim, 64, training_data.outdim, outclass=SoftmaxLayer)
Kami membuat jaringan di mana input dan output digunakan dari data pelatihan.
Step 6
Melatih Jaringan
Sekarang bagian yang penting adalah melatih jaringan pada dataset seperti yang ditunjukkan di bawah ini -
trainer = BackpropTrainer(net, dataset=training_data,
momentum=0.1,learningrate=0.01,verbose=True,weightdecay=0.01)
Kami menggunakan metode BackpropTrainer () dan menggunakan dataset pada jaringan yang dibuat.
Step 7
Langkah selanjutnya adalah memvisualisasikan kesalahan dan validasi data.
trnerr,valerr = trainer.trainUntilConvergence(dataset=training_data,maxEpochs=10)
plt.plot(trnerr,'b',valerr,'r')
plt.show()
Kami akan menggunakan metode yang disebut trainUntilConvergence pada data pelatihan yang akan berkumpul untuk epochs 10. Ini akan mengembalikan kesalahan pelatihan dan kesalahan validasi yang telah kita gambarkan seperti yang ditunjukkan di bawah ini. Garis biru menunjukkan kesalahan pelatihan dan garis merah menunjukkan kesalahan validasi.
Total kesalahan yang diterima selama eksekusi kode di atas ditunjukkan di bawah ini -
Total error: 0.0432857814358
Total error: 0.0222276374185
Total error: 0.0149012052174
Total error: 0.011876985318
Total error: 0.00939854792853
Total error: 0.00782202445183
Total error: 0.00714707652044
Total error: 0.00606068893793
Total error: 0.00544257958975
Total error: 0.00463929281336
Total error: 0.00441275665294
('train-errors:', '[0.043286 , 0.022228 , 0.014901 , 0.011877 , 0.009399 , 0.007
822 , 0.007147 , 0.006061 , 0.005443 , 0.004639 , 0.004413 ]')
('valid-errors:', '[0.074296 , 0.027332 , 0.016461 , 0.014298 , 0.012129 , 0.009
248 , 0.008922 , 0.007917 , 0.006547 , 0.005883 , 0.006572 , 0.005811 ]')
Kesalahan dimulai pada 0,04 dan kemudian turun untuk setiap epoch, yang berarti jaringan semakin terlatih dan menjadi lebih baik untuk setiap epoch.
Step 8
Persentase kesalahan data pengujian
Kami dapat memeriksa kesalahan persen menggunakan metode persenError seperti yang ditunjukkan di bawah ini -
print('Percent Error on
testData:',percentError(trainer.testOnClassData(dataset=test_data),
test_data['class']))
Percent Error on testData - 3.34075723830735
Kami mendapatkan persen kesalahan, yaitu 3,34%, yang berarti jaringan saraf 97% akurat.
Di bawah ini adalah kode lengkapnya -
from sklearn import datasets
import matplotlib.pyplot as plt
from pybrain.datasets import ClassificationDataSet
from pybrain.utilities import percentError
from pybrain.tools.shortcuts import buildNetwork
from pybrain.supervised.trainers import BackpropTrainer
from pybrain.structure.modules import SoftmaxLayer
from numpy import ravel
digits = datasets.load_digits()
X, y = digits.data, digits.target
ds = ClassificationDataSet(64, 1, nb_classes=10)
for i in range(len(X)):
ds.addSample(ravel(X[i]), y[i])
test_data_temp, training_data_temp = ds.splitWithProportion(0.25)
test_data = ClassificationDataSet(64, 1, nb_classes=10)
for n in range(0, test_data_temp.getLength()):
test_data.addSample( test_data_temp.getSample(n)[0], test_data_temp.getSample(n)[1] )
training_data = ClassificationDataSet(64, 1, nb_classes=10)
for n in range(0, training_data_temp.getLength()):
training_data.addSample(
training_data_temp.getSample(n)[0], training_data_temp.getSample(n)[1]
)
test_data._convertToOneOfMany()
training_data._convertToOneOfMany()
net = buildNetwork(training_data.indim, 64, training_data.outdim, outclass=SoftmaxLayer)
trainer = BackpropTrainer(
net, dataset=training_data, momentum=0.1,
learningrate=0.01,verbose=True,weightdecay=0.01
)
trnerr,valerr = trainer.trainUntilConvergence(dataset=training_data,maxEpochs=10)
plt.plot(trnerr,'b',valerr,'r')
plt.show()
trainer.trainEpochs(10)
print('Percent Error on testData:',percentError(
trainer.testOnClassData(dataset=test_data), test_data['class']
))
Jaringan umpan maju adalah jaringan saraf, di mana informasi antara node bergerak ke arah depan dan tidak akan pernah berjalan mundur. Jaringan Feed Forward adalah yang pertama dan paling sederhana di antara jaringan yang tersedia di jaringan saraf tiruan. Informasi tersebut diteruskan dari node input, di samping node tersembunyi dan kemudian ke node output.
Dalam bab ini kita akan membahas bagaimana -
- Buat Jaringan Feed-Forward
- Tambahkan Koneksi dan Modul ke FFN
Membuat Jaringan Feed Forward
Anda dapat menggunakan IDE python pilihan Anda, misalnya, PyCharm. Dalam hal ini, kami menggunakan Visual Studio Code untuk menulis kode dan akan mengeksekusi hal yang sama di terminal.
Untuk membuat jaringan feedforward, kita perlu mengimpornya dari pybrain.structure seperti yang ditunjukkan di bawah ini -
ffn.py
from pybrain.structure import FeedForwardNetwork
network = FeedForwardNetwork()
print(network)
Jalankan ffn.py seperti yang ditunjukkan di bawah ini -
C:\pybrain\pybrain\src>python ffn.py
FeedForwardNetwork-0
Modules:
[]
Connections:
[]
Kami belum menambahkan modul dan koneksi apa pun ke jaringan feedforward. Oleh karena itu jaringan menunjukkan array kosong untuk Modul dan Koneksi.
Menambahkan Modul dan Koneksi
Pertama kita akan membuat layer input, hidden, output dan menambahkan yang sama ke modul seperti yang ditunjukkan di bawah ini -
ffy.py
from pybrain.structure import FeedForwardNetwork
from pybrain.structure import LinearLayer, SigmoidLayer
network = FeedForwardNetwork()
#creating layer for input => 2 , hidden=> 3 and output=>1
inputLayer = LinearLayer(2)
hiddenLayer = SigmoidLayer(3)
outputLayer = LinearLayer(1)
#adding the layer to feedforward network
network.addInputModule(inputLayer)
network.addModule(hiddenLayer)
network.addOutputModule(outputLayer)
print(network)
Keluaran
C:\pybrain\pybrain\src>python ffn.py
FeedForwardNetwork-3
Modules:
[]
Connections:
[]
Kami masih mendapatkan modul dan koneksi kosong. Kami perlu menyediakan koneksi ke modul yang dibuat seperti yang ditunjukkan di bawah ini -
Berikut adalah kode di mana kami telah membuat koneksi antara input, hidden dan output layer dan menambahkan koneksi ke jaringan.
ffy.py
from pybrain.structure import FeedForwardNetwork
from pybrain.structure import LinearLayer, SigmoidLayer
from pybrain.structure import FullConnection
network = FeedForwardNetwork()
#creating layer for input => 2 , hidden=> 3 and output=>1
inputLayer = LinearLayer(2)
hiddenLayer = SigmoidLayer(3)
outputLayer = LinearLayer(1)
#adding the layer to feedforward network
network.addInputModule(inputLayer)
network.addModule(hiddenLayer)
network.addOutputModule(outputLayer)
#Create connection between input ,hidden and output
input_to_hidden = FullConnection(inputLayer, hiddenLayer)
hidden_to_output = FullConnection(hiddenLayer, outputLayer)
#add connection to the network
network.addConnection(input_to_hidden)
network.addConnection(hidden_to_output)
print(network)
Keluaran
C:\pybrain\pybrain\src>python ffn.py
FeedForwardNetwork-3
Modules:
[]
Connections:
[]
Kami masih belum bisa mendapatkan modul dan koneksi. Sekarang mari kita tambahkan langkah terakhir, yaitu kita perlu menambahkan metode sortModules () seperti yang ditunjukkan di bawah ini -
ffy.py
from pybrain.structure import FeedForwardNetwork
from pybrain.structure import LinearLayer, SigmoidLayer
from pybrain.structure import FullConnection
network = FeedForwardNetwork()
#creating layer for input => 2 , hidden=> 3 and output=>1
inputLayer = LinearLayer(2)
hiddenLayer = SigmoidLayer(3)
outputLayer = LinearLayer(1)
#adding the layer to feedforward network
network.addInputModule(inputLayer)
network.addModule(hiddenLayer)
network.addOutputModule(outputLayer)
#Create connection between input ,hidden and output
input_to_hidden = FullConnection(inputLayer, hiddenLayer)
hidden_to_output = FullConnection(hiddenLayer, outputLayer)
#add connection to the network
network.addConnection(input_to_hidden)
network.addConnection(hidden_to_output)
network.sortModules()
print(network)
Keluaran
C:\pybrain\pybrain\src>python ffn.py
FeedForwardNetwork-6
Modules:
[<LinearLayer 'LinearLayer-3'gt;, <SigmoidLayer 'SigmoidLayer-7'>,
<LinearLayer 'LinearLayer-8'>]
Connections:
[<FullConnection 'FullConnection-4': 'SigmoidLayer-7' -> 'LinearLayer-8'>,
<FullConnection 'FullConnection-5': 'LinearLayer-3' -> 'SigmoidLayer-7'>]
Kami sekarang dapat melihat modul dan detail koneksi untuk feedforwardnetwork.
Recurrent Networks sama seperti feed-forward network dengan hanya perbedaan yang Anda perlukan untuk mengingat data di setiap langkah. Histori setiap langkah harus disimpan.
Kami akan belajar bagaimana -
- Buat Jaringan Berulang
- Menambahkan Modul dan Koneksi
Membuat Jaringan Berulang
Untuk membuat jaringan berulang, kita akan menggunakan kelas RecurrentNetwork seperti yang ditunjukkan di bawah ini -
rn.py
from pybrain.structure import RecurrentNetwork
recurrentn = RecurrentNetwork()
print(recurrentn)
python rn.py
C:\pybrain\pybrain\src>python rn.py
RecurrentNetwork-0
Modules:
[]
Connections:
[]
Recurrent Connections:
[]
Kita dapat melihat koneksi baru yang disebut Recurrent Connections untuk jaringan berulang. Saat ini belum ada data yang tersedia.
Sekarang mari kita membuat layer dan menambahkan ke modul dan membuat koneksi.
Menambahkan Modul dan Koneksi
Kita akan membuat layer, yaitu input, hidden dan output. Lapisan tersebut akan ditambahkan ke modul input dan output. Selanjutnya, kita akan membuat koneksi untuk input menjadi tersembunyi, tersembunyi ke output dan koneksi berulang antara tersembunyi ke tersembunyi.
Berikut adalah kode untuk jaringan berulang dengan modul dan koneksi.
rn.py
from pybrain.structure import RecurrentNetwork
from pybrain.structure import LinearLayer, SigmoidLayer
from pybrain.structure import FullConnection
recurrentn = RecurrentNetwork()
#creating layer for input => 2 , hidden=> 3 and output=>1
inputLayer = LinearLayer(2, 'rn_in')
hiddenLayer = SigmoidLayer(3, 'rn_hidden')
outputLayer = LinearLayer(1, 'rn_output')
#adding the layer to feedforward network
recurrentn.addInputModule(inputLayer)
recurrentn.addModule(hiddenLayer)
recurrentn.addOutputModule(outputLayer)
#Create connection between input ,hidden and output
input_to_hidden = FullConnection(inputLayer, hiddenLayer)
hidden_to_output = FullConnection(hiddenLayer, outputLayer)
hidden_to_hidden = FullConnection(hiddenLayer, hiddenLayer)
#add connection to the network
recurrentn.addConnection(input_to_hidden)
recurrentn.addConnection(hidden_to_output)
recurrentn.addRecurrentConnection(hidden_to_hidden)
recurrentn.sortModules()
print(recurrentn)
python rn.py
C:\pybrain\pybrain\src>python rn.py
RecurrentNetwork-6
Modules:
[<LinearLayer 'rn_in'>, <SigmoidLayer 'rn_hidden'>,
<LinearLayer 'rn_output'>]
Connections:
[<FullConnection 'FullConnection-4': 'rn_hidden' -> 'rn_output'>,
<FullConnection 'FullConnection-5': 'rn_in' -> 'rn_hidden'>]
Recurrent Connections:
[<FullConnection 'FullConnection-3': 'rn_hidden' -> 'rn_hidden'>]
Di ouput di atas kita bisa melihat Modules, Connections dan Recurrent Connections.
Sekarang mari kita aktifkan jaringan menggunakan metode aktivasi seperti yang ditunjukkan di bawah ini -
rn.py
Tambahkan kode di bawah ini ke yang dibuat sebelumnya -
#activate network using activate() method
act1 = recurrentn.activate((2, 2))
print(act1)
act2 = recurrentn.activate((2, 2))
print(act2)
python rn.py
C:\pybrain\pybrain\src>python rn.py
[-1.24317586]
[-0.54117783]
Kami telah melihat bagaimana melatih jaringan menggunakan pelatih di pybrain. Dalam bab ini, akan menggunakan algoritme pengoptimalan yang tersedia dengan Pybrain untuk melatih jaringan.
Dalam contoh, kami akan menggunakan algoritme pengoptimalan GA yang perlu diimpor seperti yang ditunjukkan di bawah ini -
from pybrain.optimization.populationbased.ga import GA
Contoh
Di bawah ini adalah contoh jaringan pelatihan yang berfungsi menggunakan algoritme pengoptimalan GA -
from pybrain.datasets.classification import ClassificationDataSet
from pybrain.optimization.populationbased.ga import GA
from pybrain.tools.shortcuts import buildNetwork
# create XOR dataset
ds = ClassificationDataSet(2)
ds.addSample([0., 0.], [0.])
ds.addSample([0., 1.], [1.])
ds.addSample([1., 0.], [1.])
ds.addSample([1., 1.], [0.])
ds.setField('class', [ [0.],[1.],[1.],[0.]])
net = buildNetwork(2, 3, 1)
ga = GA(ds.evaluateModuleMSE, net, minimize=True)
for i in range(100):
net = ga.learn(0)[0]
print(net.activate([0,0]))
print(net.activate([1,0]))
print(net.activate([0,1]))
print(net.activate([1,1]))
Keluaran
Metode pengaktifan pada jaringan untuk input hampir sama dengan output seperti yang ditunjukkan di bawah ini -
C:\pybrain\pybrain\src>python example15.py
[0.03055398]
[0.92094839]
[1.12246157]
[0.02071285]
Lapisan pada dasarnya adalah serangkaian 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
Koneksi bekerja mirip dengan lapisan; satu-satunya perbedaan adalah ia menggeser data dari satu node ke node lainnya dalam suatu jaringan.
Dalam bab ini, kita akan belajar tentang -
- Memahami Koneksi
- Membuat Koneksi
Memahami Koneksi
Berikut adalah contoh kerja koneksi yang digunakan saat membuat jaringan.
Contoh
ffy.py
from pybrain.structure import FeedForwardNetwork
from pybrain.structure import LinearLayer, SigmoidLayer
from pybrain.structure import FullConnection
network = FeedForwardNetwork()
#creating layer for input => 2 , hidden=> 3 and output=>1
inputLayer = LinearLayer(2)
hiddenLayer = SigmoidLayer(3)
outputLayer = LinearLayer(1)
#adding the layer to feedforward network
network.addInputModule(inputLayer)
network.addModule(hiddenLayer)
network.addOutputModule(outputLayer)
#Create connection between input ,hidden and output
input_to_hidden = FullConnection(inputLayer, hiddenLayer)
hidden_to_output = FullConnection(hiddenLayer, outputLayer)
#add connection to the network
network.addConnection(input_to_hidden)
network.addConnection(hidden_to_output)
network.sortModules()
print(network)
Keluaran
C:\pybrain\pybrain\src>python ffn.py
FeedForwardNetwork-6
Modules:
[<LinearLayer 'LinearLayer-3'>, <SigmoidLayer 'SigmoidLayer-7'>,
<LinearLayer 'LinearLayer-8'>]
Connections:
[<FullConnection 'FullConnection-4': 'SigmoidLayer-7' -> 'LinearLayer-8'>,
<FullConnection 'FullConnection-5': 'LinearLayer-3' -> 'SigmoidLayer-7'>]
Membuat Koneksi
Di Pybrain, kita dapat membuat koneksi dengan menggunakan modul koneksi seperti yang ditunjukkan di bawah ini -
Contoh
connect.py
from pybrain.structure.connections.connection import Connection
class YourConnection(Connection):
def __init__(self, *args, **kwargs):
Connection.__init__(self, *args, **kwargs)
def _forwardImplementation(self, inbuf, outbuf):
outbuf += inbuf
def _backwardImplementation(self, outerr, inerr, inbuf):
inerr += outer
Untuk membuat koneksi, ada 2 metode - _forwardImplementation () dan _backwardImplementation () .
The _forwardImplementation () disebut dengan buffer output dari modul masuk yang inbuf , dan buffer masukan dari modul keluar disebut outbuf . The inbuf ditambahkan ke modul keluar outbuf .
The _backwardImplementation () disebut dengan outerr , inerr , dan inbuf . Kesalahan modul keluar ditambahkan ke kesalahan modul masuk di _backwardImplementation () .
Sekarang mari kita gunakan YourConnection dalam jaringan.
testconnection.py
from pybrain.structure import FeedForwardNetwork
from pybrain.structure import LinearLayer, SigmoidLayer
from connect import YourConnection
network = FeedForwardNetwork()
#creating layer for input => 2 , hidden=> 3 and output=>1
inputLayer = LinearLayer(2)
hiddenLayer = SigmoidLayer(3)
outputLayer = LinearLayer(1)
#adding the layer to feedforward network
network.addInputModule(inputLayer)
network.addModule(hiddenLayer)
network.addOutputModule(outputLayer)
#Create connection between input ,hidden and output
input_to_hidden = YourConnection(inputLayer, hiddenLayer)
hidden_to_output = YourConnection(hiddenLayer, outputLayer)
#add connection to the network
network.addConnection(input_to_hidden)
network.addConnection(hidden_to_output)
network.sortModules()
print(network)
Keluaran
C:\pybrain\pybrain\src>python testconnection.py
FeedForwardNetwork-6
Modules:
[<LinearLayer 'LinearLayer-3'>, <SigmoidLayer 'SigmoidLayer-7'>,
<LinearLayer 'LinearLayer-8'>]
Connections:
[<YourConnection 'YourConnection-4': 'LinearLayer-3' -> 'SigmoidLayer-7'>,
<YourConnection 'YourConnection-5': 'SigmoidLayer-7' -> 'LinearLayer-8'>]
Reinforcement Learning (RL) adalah bagian penting dalam Machine Learning. Pembelajaran penguatan membuat agen mempelajari perilakunya berdasarkan masukan dari lingkungan.
Komponen yang berinteraksi satu sama lain selama Penguatan adalah sebagai berikut -
- Environment
- Agent
- Task
- Experiment
Tata letak Reinforcement Learning diberikan di bawah ini -
Di RL, agen berbicara dengan lingkungan dalam iterasi. Pada setiap iterasi, agen menerima observasi yang memiliki imbalan. Ia kemudian memilih tindakan dan mengirimkannya ke lingkungan. Lingkungan di setiap iterasi pindah ke keadaan baru dan hadiah yang diterima setiap kali disimpan.
Tujuan agen RL adalah mengumpulkan hadiah sebanyak mungkin. Di antara iterasi kinerja agen dibandingkan dengan kinerja agen yang bertindak dengan cara yang baik dan perbedaan kinerja menimbulkan penghargaan atau kegagalan. RL pada dasarnya digunakan dalam tugas-tugas pemecahan masalah seperti kontrol robot, elevator, telekomunikasi, game, dll.
Mari kita lihat bagaimana bekerja dengan RL di Pybrain.
Kami akan mengerjakan labirin environmentyang akan direpresentasikan dengan 2 dimensi numpy array dimana 1 adalah dinding dan 0 adalah bidang bebas. Tanggung jawab agen adalah pindah ke lapangan bebas dan menemukan titik tujuan.
Berikut adalah aliran langkah demi langkah bekerja dengan lingkungan labirin.
Langkah 1
Impor paket yang kita butuhkan dengan kode di bawah ini -
from scipy import *
import sys, time
import matplotlib.pyplot as pylab # for visualization we are using mathplotlib
from pybrain.rl.environments.mazes import Maze, MDPMazeTask
from pybrain.rl.learners.valuebased import ActionValueTable
from pybrain.rl.agents import LearningAgent
from pybrain.rl.learners import Q, QLambda, SARSA #@UnusedImport
from pybrain.rl.explorers import BoltzmannExplorer #@UnusedImport
from pybrain.rl.experiments import Experiment
from pybrain.rl.environments import Task
Langkah 2
Buat lingkungan labirin menggunakan kode di bawah ini -
# create the maze with walls as 1 and 0 is a free field
mazearray = array(
[[1, 1, 1, 1, 1, 1, 1, 1, 1],
[1, 0, 0, 1, 0, 0, 0, 0, 1],
[1, 0, 0, 1, 0, 0, 1, 0, 1],
[1, 0, 0, 1, 0, 0, 1, 0, 1],
[1, 0, 0, 1, 0, 1, 1, 0, 1],
[1, 0, 0, 0, 0, 0, 1, 0, 1],
[1, 1, 1, 1, 1, 1, 1, 0, 1],
[1, 0, 0, 0, 0, 0, 0, 0, 1],
[1, 1, 1, 1, 1, 1, 1, 1, 1]]
)
env = Maze(mazearray, (7, 7)) # create the environment, the first parameter is the
maze array and second one is the goal field tuple
LANGKAH 3
Langkah selanjutnya adalah membuat Agen.
Agen memainkan peran penting dalam RL. Ini akan berinteraksi dengan lingkungan labirin menggunakan metode getAction () dan integrObservation ().
Agen memiliki pengontrol (yang akan memetakan negara bagian menjadi tindakan) dan pelajar.
Pengontrol di PyBrain seperti modul, yang masukannya adalah status dan mengubahnya menjadi tindakan.
controller = ActionValueTable(81, 4)
controller.initialize(1.)
Itu ActionValueTablemembutuhkan 2 masukan, yaitu jumlah status dan tindakan. Lingkungan labirin standar memiliki 4 tindakan: utara, selatan, timur, barat.
Sekarang kita akan membuat pelajar. Kami akan menggunakan algoritma pembelajaran SARSA () agar pelajar dapat digunakan dengan agen.
learner = SARSA()
agent = LearningAgent(controller, learner)
LANGKAH 4
Langkah ini menambahkan Agen ke Lingkungan.
Untuk menghubungkan agen ke lingkungan, kita membutuhkan komponen khusus yang disebut tugas. Peran atask adalah mencari tujuan di lingkungan dan bagaimana agen mendapat penghargaan atas tindakannya.
Lingkungan memiliki tugasnya sendiri. Lingkungan Maze yang kami gunakan memiliki tugas MDPMazeTask. MDP adalah singkatan dari“markov decision process”yang artinya, agen tersebut mengetahui posisinya di labirin. Lingkungan akan menjadi parameter tugas.
task = MDPMazeTask(env)
LANGKAH 5
Langkah selanjutnya setelah menambahkan agen ke lingkungan adalah membuat Eksperimen.
Sekarang kita perlu membuat eksperimen, sehingga kita dapat memiliki tugas dan agen berkoordinasi satu sama lain.
experiment = Experiment(task, agent)
Sekarang kita akan menjalankan percobaan 1000 kali seperti yang ditunjukkan di bawah ini -
for i in range(1000):
experiment.doInteractions(100)
agent.learn()
agent.reset()
Lingkungan akan berjalan 100 kali antara agen dan tugas ketika kode berikut dijalankan -
experiment.doInteractions(100)
Setelah setiap iterasi, itu memberikan kembali status baru untuk tugas yang memutuskan informasi dan hadiah apa yang harus diteruskan ke agen. Kita akan memplot tabel baru setelah mempelajari dan mengatur ulang agen di dalam perulangan for.
for i in range(1000):
experiment.doInteractions(100)
agent.learn()
agent.reset()
pylab.pcolor(table.params.reshape(81,4).max(1).reshape(9,9))
pylab.savefig("test.png")
Ini kode lengkapnya -
Contoh
maze.py
from scipy import *
import sys, time
import matplotlib.pyplot as pylab
from pybrain.rl.environments.mazes import Maze, MDPMazeTask
from pybrain.rl.learners.valuebased import ActionValueTable
from pybrain.rl.agents import LearningAgent
from pybrain.rl.learners import Q, QLambda, SARSA #@UnusedImport
from pybrain.rl.explorers import BoltzmannExplorer #@UnusedImport
from pybrain.rl.experiments import Experiment
from pybrain.rl.environments import Task
# create maze array
mazearray = array(
[[1, 1, 1, 1, 1, 1, 1, 1, 1],
[1, 0, 0, 1, 0, 0, 0, 0, 1],
[1, 0, 0, 1, 0, 0, 1, 0, 1],
[1, 0, 0, 1, 0, 0, 1, 0, 1],
[1, 0, 0, 1, 0, 1, 1, 0, 1],
[1, 0, 0, 0, 0, 0, 1, 0, 1],
[1, 1, 1, 1, 1, 1, 1, 0, 1],
[1, 0, 0, 0, 0, 0, 0, 0, 1],
[1, 1, 1, 1, 1, 1, 1, 1, 1]]
)
env = Maze(mazearray, (7, 7))
# create task
task = MDPMazeTask(env)
#controller in PyBrain is like a module, for which the input is states and
convert them into actions.
controller = ActionValueTable(81, 4)
controller.initialize(1.)
# create agent with controller and learner - using SARSA()
learner = SARSA()
# create agent
agent = LearningAgent(controller, learner)
# create experiment
experiment = Experiment(task, agent)
# prepare plotting
pylab.gray()
pylab.ion()
for i in range(1000):
experiment.doInteractions(100)
agent.learn()
agent.reset()
pylab.pcolor(controller.params.reshape(81,4).max(1).reshape(9,9))
pylab.savefig("test.png")
Keluaran
python maze.py
Warna di bidang bebas akan berubah di setiap iterasi.
Sekarang kami tahu cara membangun jaringan dan melatihnya. Dalam bab ini, kita akan memahami cara membuat dan menyimpan jaringan, dan menggunakan jaringan kapan pun diperlukan.
Simpan dan Pulihkan Jaringan
Kami akan menggunakan NetworkWriter dan NetworkReader dari alat Pybrain, yaitu pybrain.tools.customxml.
Berikut adalah contoh kerja yang sama -
from pybrain.tools.shortcuts import buildNetwork
from pybrain.tools.customxml import NetworkWriter
from pybrain.tools.customxml import NetworkReader
net = buildNetwork(2,1,1)
NetworkWriter.writeToFile(net, 'network.xml')
net = NetworkReader.readFrom('network.xml')
Jaringan disimpan di dalam network.xml.
NetworkWriter.writeToFile(net, 'network.xml')
Untuk membaca xml bila diperlukan kita dapat menggunakan kode sebagai berikut -
net = NetworkReader.readFrom('network.xml')
Berikut adalah file network.xml yang dibuat -
<?xml version="1.0" ?>
<PyBrain>
<Network class="pybrain.structure.networks.feedforward.FeedForwardNetwork" name="FeedForwardNetwork-8">
<name val="'FeedForwardNetwork-8'"/>
<Modules>
<LinearLayer class="pybrain.structure.modules.linearlayer.LinearLayer" inmodule="True" name="in">
<name val="'in'"/>
<dim val="2"/>
</LinearLayer>
<LinearLayer class="pybrain.structure.modules.linearlayer.LinearLayer" name="out" outmodule="True">
<name val="'out'"/>
<dim val="1"/>
</LinearLayer>
<BiasUnit class="pybrain.structure.modules.biasunit.BiasUnit" name="bias">
<name val="'bias'"/>
</BiasUnit>
<SigmoidLayer class="pybrain.structure.modules.sigmoidlayer.SigmoidLayer" name="hidden0">
<name val="'hidden0'"/>
<dim val="1"/>
</SigmoidLayer>
</Modules>
<Connections>
<FullConnection class="pybrain.structure.connections.full.FullConnection" name="FullConnection-6">
<inmod val="bias"/>
<outmod val="out"/>
<Parameters>[1.2441093186965146]</Parameters>
</FullConnection>
<FullConnection class="pybrain.structure.connections.full.FullConnection" name="FullConnection-7">
<inmod val="bias"/>
<outmod val="hidden0"/>
<Parameters>[-1.5743530012126412]</Parameters>
</FullConnection>
<FullConnection class="pybrain.structure.connections.full.FullConnection" name="FullConnection-4">
<inmod val="in"/>
<outmod val="hidden0"/>
<Parameters>[-0.9429546042034236, -0.09858196752687162]</Parameters>
</FullConnection>
<FullConnection class="pybrain.structure.connections.full.FullConnection" name="FullConnection-5">
<inmod val="hidden0"/>
<outmod val="out"/>
<Parameters>[-0.29205472354634304]</Parameters>
</FullConnection>
</Connections>
</Network>
</PyBrain>
API
Di bawah ini adalah daftar API yang telah kami gunakan sepanjang tutorial ini.
Untuk Jaringan
activate(input)- Dibutuhkan parameter, yaitu nilai yang akan diuji. Ini akan mengembalikan hasil berdasarkan masukan yang diberikan.
activateOnDataset(dataset) - Ini akan mengulangi dataset yang diberikan dan mengembalikan output.
addConnection(c) - Menambahkan koneksi ke jaringan.
addInputModule(m) - Menambahkan modul yang diberikan ke jaringan dan menandainya sebagai modul masukan.
addModule(m) - Menambahkan modul yang diberikan ke jaringan.
addOutputModule(m) - Menambahkan modul ke jaringan dan menandainya sebagai modul keluaran.
reset() - Mengatur ulang modul dan jaringan.
sortModules()- Ini mempersiapkan jaringan untuk aktivasi dengan menyortir secara internal. Itu harus dipanggil sebelum aktivasi.
Untuk Kumpulan Data yang Diawasi
addSample(inp, target) - Menambahkan sampel input dan target baru.
splitWithProportion(proportion=0.5) - Membagi dataset menjadi dua bagian, bagian pertama berisi data bagian proporsi dan set berikutnya berisi data bagian yang tersisa.
Untuk Pelatih
trainUntilConvergence(dataset=None, maxEpochs=None, verbose=None, continueEpochs=10, validationProportion=0.25)- Digunakan untuk melatih modul pada dataset hingga konvergen. Jika set data tidak diberikan, ia akan mencoba melatih set data terlatih yang digunakan di awal.
Dalam bab ini, semua kemungkinan contoh yang dieksekusi menggunakan PyBrain dicantumkan.
Contoh 1
Bekerja dengan Tabel Kebenaran NOR dan mengujinya untuk kebenaran.
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
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 2
Untuk Dataset, kita akan menggunakan dataset dari dataset sklearn seperti yang ditunjukkan di bawah ini: Lihat dataset load_digits dari sklearn: scikit-learn.org
Ini memiliki 10 kelas, yaitu angka yang akan diprediksi dari 0-9.
Total data masukan di X adalah 64.
from sklearn import datasets
import matplotlib.pyplot as plt
from pybrain.datasets import ClassificationDataSet
from pybrain.utilities import percentError
from pybrain.tools.shortcuts import buildNetwork
from pybrain.supervised.trainers import BackpropTrainer
from pybrain.structure.modules import SoftmaxLayer
from numpy import ravel
digits = datasets.load_digits()
X, y = digits.data, digits.target
ds = ClassificationDataSet(64, 1, nb_classes=10) )
# we are having inputs are 64 dim array and since the digits are from 0-9
the classes considered is 10.
for i in range(len(X)):
ds.addSample(ravel(X[i]), y[i]) # adding sample to datasets
test_data_temp, training_data_temp = ds.splitWithProportion(0.25)
#Splitting the datasets 25% as testdata and 75% as trained data
# Using splitWithProportion() method on dataset converts the dataset to
#superviseddataset, so we will convert the dataset back to classificationdataset
#as shown in above step.
test_data = ClassificationDataSet(64, 1, nb_classes=10)
for n in range(0, test_data_temp.getLength()):
test_data.addSample( test_data_temp.getSample(n)[0], test_data_temp.getSample(n)[1] )
training_data = ClassificationDataSet(64, 1, nb_classes=10)
for n in range(0, training_data_temp.getLength()):
training_data.addSample(
training_data_temp.getSample(n)[0], training_data_temp.getSample(n)[1]
)
test_data._convertToOneOfMany()
training_data._convertToOneOfMany()
net = buildNetwork(
training_data.indim, 64, training_data.outdim, outclass=SoftmaxLayer
)
#creating a network wherein the input and output are used from the training data.
trainer = BackpropTrainer(
net, dataset=training_data, momentum=0.1,learningrate=0.01,verbose=True,weightdecay=0.01
)
#Training the Network
trnerr,valerr = trainer.trainUntilConvergence(dataset=training_data,maxEpochs=10)
#Visualizing the error and validation data
plt.plot(trnerr,'b',valerr,'r')
plt.show()
trainer.trainEpochs(10)
print('Percent Error on testData:',percentError(
trainer.testOnClassData(dataset=test_data), test_data['class']
))
Keluaran
Total error: 0.0432857814358
Total error: 0.0222276374185
Total error: 0.0149012052174
Total error: 0.011876985318
Total error: 0.00939854792853
Total error: 0.00782202445183
Total error: 0.00714707652044
Total error: 0.00606068893793
Total error: 0.00544257958975
Total error: 0.00463929281336
Total error: 0.00441275665294
('train-errors:', '[0.043286 , 0.022228 , 0.014901 , 0.011877 , 0.009399 , 0.007
822 , 0.007147 , 0.006061 , 0.005443 , 0.004639 , 0.004413 ]')
('valid-errors:', '[0.074296 , 0.027332 , 0.016461 , 0.014298 , 0.012129 , 0.009
248 , 0.008922 , 0.007917 , 0.006547 , 0.005883 , 0.006572 , 0.005811 ]')
Percent Error on testData: 3.34075723830735