Iti0210lab12: erinevus redaktsioonide vahel
| 83. rida: | 83. rida: | ||
Märkus: <code>predict()</code> meetod tahab parameetrina sisendite massiivi ja annab vastuseks ka klasside massiivi. Antud näites on aga üks pilt ja seega mõlema massiivi pikkuseks 1. | Märkus: <code>predict()</code> meetod tahab parameetrina sisendite massiivi ja annab vastuseks ka klasside massiivi. Antud näites on aga üks pilt ja seega mõlema massiivi pikkuseks 1. | ||
Klassifikaatorite [https://github.com/zalandoresearch/fashion-mnist#labels tähendused]. | |||
Redaktsioon: 22. aprill 2018, kell 16:24
Närvivõrk: pildituvastus
Sissejuhatus
Kasutame sklearn paketi närvivõrgu implementatsiooni, et tuvastada piltidelt objekte (täpsemalt 10-t erinevat tüüpi riideesemeid ja aksessuaare).
Lubatud on kasutada ka enda valitud masinõppe paketti.
Kõigepealt treenime närvivõrgu, kasutades Fashion-MNIST andmestikku. See sisaldab 60000 rasterformaadis pilti treenimiseks ning 10000 samas formaadis pilti testimiseks.
Siis proovime närvivõrku rakendada suvaliste piltide tuvastamiseks.
Ettevalmistus
- Loe läbi "Why we made Fashion-MNIST".
- Laadi andmed alla: juhend / lingid.
- Tee selgeks, kuidas andmefaile avada ja pildiandmeid sisse laadida]. Näiteks Pythoni ja
scikit-learnkasutamisel on abi sellest skriptist.
import mnist_reader
X_train, y_train = mnist_reader.load_mnist('', kind='train')
X_test, y_test = mnist_reader.load_mnist('', kind='t10k')
Närvivõrgu treenimine
Kasutame mitmekihilist perceptron tüüpi närvivõrku (dokumentatsioon).
Kuna tegu on 8-bitiste piltidega, kus iga piksli väärtus on 0 kuni 255, siis on soovitatav sisendid normaliseerida vahemikku (0, 1).
from sklearn.neural_network import MLPClassifier
clf = MLPClassifier(max_iter = 50,
hidden_layer_sizes=(10,), random_state=1)
X_train = X_train / 255.0
X_test = X_test / 255.0
clf.fit(X_train, y_train)
print(clf.score(X_test, y_test))
Huvitavad parameetrid:
max_iter- mitu treenimise "epohhi" tehakse. Vähem on kiirem, aga kaalud ei pruugi konvergeeruda.hidden_layer_sizes- annab närvivõrgu struktuuri. Toodud näites on ühe peidetud kihiga struktuur (sisendite ja väljundite arv on fikseeritud treeningandmetega).
Põhimõtteliselt on võimalik kiiruse huvides ka treeningandmete suurust vähendada, aga lõplik treenimine tuleks kindlasti teha täisandmete pealt.
import random X_small, y_small = zip(*random.sample(list(zip(X_train, y_train)), 6000)) clf.fit(X_small, y_small)
Katsetamine
Otsi Google pildiotsinguga sobivaid pilte ja konverteeri need 28x28, grayscale formaati. Pane tähele kuidas MNIST-Fashion treeningandmetes on kujundid esitatud: taust on must ja objektid on heledad, seetõttu on tõenäoliselt vajalik inverteerimine.
Enne:
Pärast:
Proovime laadida ja klassifitseerida. Pildifail tuleks saada ühemõõtmelise massiivi kujule ning iga piksli väärtus normaliseerida samuti kui treenimisel.
import numpy as np
from scipy.misc import imread
bla = imread("test1_28.bmp", mode='L')
X = np.reshape(bla, (1,28*28)) / 255.0
print(X.shape)
print(clf.predict(X))
Märkus: predict() meetod tahab parameetrina sisendite massiivi ja annab vastuseks ka klasside massiivi. Antud näites on aga üks pilt ja seega mõlema massiivi pikkuseks 1.
Klassifikaatorite tähendused.
