Neuroniniai tinklai yra svarbi sąvoka dirbtinio intelekto ir mašininio mokymosi srityse. Jie susideda iš tarpusavyje sujungtų mazgų, išdėstytų sluoksniais ir imituoja žmogaus smegenų veiklą. Mazgai atstovauja žmogaus smegenų neuronams.
Galite sukurti savo paprastą persiuntimo, kelių klasių klasifikavimo neuroninį tinklą. Išmokykite jį klasifikuoti ranka rašytus skaitmenis naudodami MNIST duomenų rinkinį. Tada galite naudoti kompiuterinį matymą, kad klasifikuotumėte savo ranka rašytus skaitmenis.
Kas yra kelių klasių klasifikacija?
Kelių klasių klasifikavimas yra mašininio mokymosi tipas, kuris gali suskirstyti duomenis į daugiau nei dvi kategorijas. Neuroniniai tinklai naudoja „softmax“ klasifikatorių, kad paskirstytų tikimybę pagal galimas klases.
Galite naudoti kelių klasių klasifikaciją, norėdami suskirstyti ranka rašytus vaizdus iš MNIST duomenų rinkinio į 10 kategorijų. Šios kategorijos atitiks skaičius nuo 0 iki 9.
MNIST duomenų rinkinio supratimas
MNIST duomenų rinkinys yra populiarus mašininio mokymosi ir kompiuterinio matymo algoritmų etaloninis duomenų rinkinys. Jame yra 70 000 pilkų atspalvių ranka rašytų vaizdų, kurių dydis yra 28 x 28 pikseliai. Ranka įrašyti skaitmenys yra nuo 0 iki 9.
Prieš kuriant bet kokį mašininio mokymosi modelį, svarbu suprasti, kas yra jūsų duomenų rinkinyje. Suprasdami duomenų rinkinį galėsite geriau apdoroti duomenis.
Aplinkos paruošimas
Norėdami sekti šią mokymo programą, turėtumėte būti susipažinę su Python pagrindai. Taip pat turėtumėte turėti a pagrindinių mašininio mokymosi žinių. Galiausiai jums turėtų būti patogu naudotis „Jupyter Notebook“ arba „Google Colab“.
Visą šaltinio kodą rasite a GitHub saugykla.
Sukurkite naują Jupyter Notepad arba prisijunkite prie Google Colab. Vykdykite šią komandą, kad įdiegtumėte reikiamus paketus:
!pip install numpy matplotlib tensorflow opencv-python
Jūs naudosite:
- Matplotlib duomenų vizualizavimui.
- NumPy manipuliuoti masyvais.
- TensorFlow sukurti ir išmokyti savo modelį.
- „OpenCV“, kad modelis pateiktų savo ranka rašytus skaitmenis.
Būtinų modulių importavimas
Importuokite savo aplinkoje įdiegtus paketus. Tai leis vėliau paskambinti ir naudoti jų funkcijas bei modulius savo kode.
importuoti tensorflow kaip tf
iš tensorflow importuoti keras
importuoti matplotlib.pyplot kaip plt
%matplotlib eilutė
importuoti nelygus kaip np
importuoti cv2
Antroji kodo eilutė importuoja Keras modulį iš Google TensorFlow biblioteka. Naudosite „Keras“ savo giluminiam neuroniniam tinklui treniruoti naudodami „TensorFlow“ kaip pagrindinę programą.
Duomenų rinkinio įkėlimas ir peržiūra
MNIST duomenų rinkinys yra integruotas į „Keras“. Įkelkite MNIST duomenų rinkinį ir padalykite jį į mokymo ir bandymų rinkinius. Treniruočių rinkinį naudosite modeliui apmokyti, o testų rinkinį – modelio tikslumui įvertinti klasifikuojant naujus nematytus vaizdus.
(X_traukinys, y_traukinys), (X_testas, y_testas) = keras.datasets.mnist.load_data()
Patikrinkite treniruočių ir testų rinkinių trukmę. MNIST duomenų rinkinyje yra 60 000 vaizdų mokymui ir 10 000 vaizdų testavimui.
len (X_traukinys)
len (X_testas)
Patikrinkite pirmojo vaizdo formą MNIST duomenų rinkinyje, kuris turėtų būti 28 x 28 pikseliai. Tada išspausdinkite jo pikselių reikšmes ir vizualizuokite naudodami Matplotlib.
X_train[0].figūra
X_train[0]
plt.matshow (X_train[0])
y_train[0]
Vizualizacijos išvestis yra tokia:
Vaizduojamas vaizdas rodo, kad pirmame duomenų rinkinio vaizde yra skaičius penki.
Išankstinis duomenų apdorojimas
Prieš naudodami duomenų rinkinio duomenis modeliui apmokyti ir išbandyti, turite juos iš anksto apdoroti. Išankstinis apdorojimas padidina modelio tikslumą standartizuodamas duomenis.
Pikselių reikšmių normalizavimas
Normalizuokite vaizdų pikselių reikšmes duomenų rinkinyje, padalydami kiekvieną reikšmę iš 255. Nenormalizuoto duomenų rinkinio pikselių reikšmės svyruoja nuo 0 iki 255, o nulis yra juodas, o 255 - baltas. Kiekvieną pikselio reikšmę padalijus iš 255 užtikrinama, kad kiekvienas pikselis yra intervale nuo 0 iki 1. Taip modeliui lengviau išmokti atitinkamas duomenų savybes ir modelius.
X_traukinys = X_traukinys / 255
X_test = X_testas / 255
Tada išspausdinkite pirmojo vaizdo pikselių reikšmes.
X_train[0]
Atkreipkite dėmesį, kad dabar jie yra nuo 0 iki 1.
Vaizdo matricų konvertavimas į 1D masyvą
Neuroninio tinklo įvesties sluoksnis paprastai tikisi 1D įvesties, todėl sukurkite 1D vaizdo pikselių reikšmių masyvą. Norėdami tai padaryti, naudokite funkciją reshape() su neapdorotų elementų skaičiumi, nustatytu pagal vaizdų skaičių duomenų rinkinyje.
X_train_flattened = X_train.reshape (len (X_train), 28 * 28)
X_test_flattened = X_test.reshape (len (X_test), 28 * 28)
X_traukinys_išlygintas.forma
X_train_flattened[0]
Dabar jūsų vaizdai paruošti treniruoti ir išbandyti modelį.
Giliojo neuroninio tinklo modelio kūrimas
Sukurkite nuoseklų modelį naudodami „Tensorflow“ Keras modulį, naudodami įvesties sluoksnį, du paslėptus sluoksnius ir išvesties sluoksnį. Nustatykite įvesties formą į 28 x 28, nes tai yra pradinių duomenų rinkinio vaizdų forma. Paslėptiems sluoksniams naudokite 128 mazgus. Išvesties sluoksnyje turėtų būti tik 10 neuronų, nes jūs klasifikuojate tik skaitmenis nuo 0 iki 9.
modelis = keras. Sequential ([
keras.sluoksniai. Išlyginti (input_shape=(28, 28)),keras.sluoksniai. Tankus (128, aktyvinimas='relu'),
keras.sluoksniai. Tankus (128, aktyvinimas='relu'),
keras.sluoksniai. Tankus (10, aktyvinimas='softmax')
])
Sudarykite modelį naudodami adamas optimizatorius, retai_categorical_crossentropy kaip praradimo funkcija ir metrika, skirta modelio veikimui įvertinti kaip tikslumu. Tada pritaikykite mokymo duomenis į modelį ir nustatykite epochų skaičių iki penkių.
model.compile (optimizatorius='adomas',
praradimas ='sparse_categorical_crossentropy',
metrika=["tikslumas"])
model.fit (X_train, y_train, epochs=5)
Modelio mokymas užtruks kelias minutes. Baigę modelio mokymą, įvertinkite jo veikimą bandymo rinkinyje.
model.evaluate (X_testas, y_testas)
Įvertinimo funkcija grąžins modelio praradimą ir tikslumą. Modelis sukuria 98% tikslumą.
Modelio naudojimas savo ranka rašytiems skaitmenims klasifikuoti
Norėdami klasifikuoti savo ranka rašytus skaitmenis, turite paruošti vaizdus, kad jie atitiktų MNIST duomenų rinkinio vaizdus. Jei to nepadarysite, jūsų modelis prastai veiks.
Norėdami iš anksto apdoroti vaizdus:
- Įkelkite vaizdą, kuriame yra skaitmuo, naudodami OpenCV.
- Konvertuokite jį į pilkos spalvos tonus ir pakeiskite jo dydį iki 28 x 28 pikselių.
- Apverskite ir normalizuokite pikselių reikšmes.
- Galiausiai išlyginkite vaizdą į 1D masyvą.
Perduokite iš anksto apdorotą vaizdą į modelį, kad būtų galima nuspėti, ir išspausdinkite numatytą vertę ekrane.
img = cv2.imread('skaitmenys/skaitmuo1.png', cv2.IMREAD_GRAYSCALE)
img_resize = cv2.resize (img, (28, 28))
img_flip = cv2.bitwise_not (img_resize)
img_normalized = img_flip.astype('float32') / 255.0# Išlyginkite vaizdą į 1D masyvą
input_data = img_normalized.flatten().reshape( 1,28,28)
# Atlikite prognozę naudodami modelį
prognozė = modelis.prognozuoti (įvesties_duomenys)
spausdinti (f'Prognozė: {np.argmax (numatymas)}')
Iš anksto apdoroto vaizdo, kuriame yra skaičius, perdavimas modeliui.
Modelio išvestis yra tokia:
Modelis sugebėjo teisingai klasifikuoti septynių skaičių.
Neuroniniai tinklai pokalbių robotuose
Neuroninių tinklų naudojimas per pastaruosius kelerius metus išaugo. Jie daugiausia buvo naudojami natūralios kalbos apdorojimui kalbos vertimui ir generaciniam AI.
Visai neseniai padaugėjo pokalbių robotų, galinčių bendrauti panašiai kaip žmogus. Jie naudoja neuroninio tinklo tipą, žinomą kaip transformatoriaus neuroninis tinklas. Bendraukite su kai kuriais iš jų ir patirkite neuroninių tinklų galią.