Pythonda neyral


Download 116.34 Kb.
bet3/3
Sana27.01.2023
Hajmi116.34 Kb.
#1132915
1   2   3
Bog'liq
Nejronnye.seti.na.Python KARAS (1)

Optimallashtirish muammosini qanday hal qilish kerak

Optimallashtirish nazariyasida taniqli gradient tushish usulini qo'llashingiz mumkin. Tasavvur qiling, bizda qandaydir funksiya bor va biz uning minimalini topmoqchimiz. Biz ma'lum bir nuqtadan boshlaymiz va minimal darajaga yaqinlashish uchun qaerga borishimiz kerakligini tushunishimiz kerak. Gradient deb ataladigan vektor mavjud. Va bu vektor funktsiyani oshirish yo'nalishiga yo'naltirilgan. Shuning uchun anti-gradient - bu kamayuvchi funktsiya yo'nalishiga yo'naltirilgan minus belgisi bo'lgan gradient. Ushbu algoritm antigradient tomon harakat qilishni va shu bilan mahalliyga yaqinlashishni taklif qiladi
eng kam.

Neyron tarmoqlarda ozgina modifikatsiya qo'llaniladi - stokastik gradient tushish. Oldingi gradient tushishidan farqi shundaki, biz gradientni bir vaqtning o'zida namunamizning barcha namunalari bo'yicha hisoblamaymiz, faqat bitta iteratsiyadagi bitta namunada yoki bir guruh namunalar (mini partiya) bo'yicha.

Ko'p qatlamli perseptronni tasniflash masalasiga qo'llash

Tasniflash muammosi uchun ikki qavatli perseptrondan foydalanish misolini ko'rib chiqing.

Aytaylik, bizda uch o'lchovli xususiyat fazosida aniqlangan ob'ektlar bor. Bu shuni anglatadiki, har bir ob'ekt uchta komponentdan iborat vektor bilan ifodalanadi. Keling, uchta kirish neyroniga ega bo'lgan neyron tarmog'ini quraylik, faqat kirish ob'ektimiz hajmi. Aytaylik, biz ikkilik tasniflash masalasini hal qilyapmiz, unda qaysi sinfga tegishli ekanligini aniqlash kerak (bizning ob'ektimiz pushti yoki binafsha rang). Shuning uchun, chiqishda biz ikkita chiqish neyroniga egamiz. Faraz qilaylik, biz allaqachon tarmoqni o'rgatganmiz. Endi uni qanday ishlatishni o'ylab ko'ring?

Biz ob'ektni kirish sifatida tavsiflovchi uch o'lchovli vektorimizni oziqlantiramiz, yuqorida tavsiflangan formulalar bo'yicha oldinga tarqalishni amalga oshiramiz va chiqishda biz ikkita raqamni olamiz. Bu raqamlar kirish ob'ektining u yoki bu sinfga tegishli ekanligi uchun
allaqachon javobgardir, lekin maxsus transformatsiyadan so'ng biz qolgan ikkita raqa1mvnai o2la. mBuiz raqamlar ob'ektning bir yoki ikkinchi sinfga tegishli bo'lish ehtimolini aniq tavsiflaydi. Shunday qilib, tasniflash muammosi holatida neyron tarmoqdan olingan ma'lum bir sinfga tegishli bo'lish ehtimoli taqsimoti hisoblanadi.
Machine Translated by Google

Pythonda ko'p qatlamli perseptronni amalga oshirish

Keling, Keras chuqur o'rganish tizimi yordamida ko'p qatlamli perseptron modelini qanday amalga oshirishni ko'rsatamiz. Ushbu ramka TensorFlow uchun qo'shimcha hisoblanadi. Biz Fashion MNIST ma'lumotlar to'plamida kiyimlarni tasniflash muammosini hal qilamiz. Fashion MNIST-dagi barcha ma'lumotlar (kiyim tasvirlari) 10 ta sinfga bo'lingan

0 futbolka/usti
1 ta shim (shim) 2 pullover (kazak) 3 libos (ko'ylak)
4 palto (palto)
5 sandal (sandal) 6 ko'ylak
7 krossovka (krossovka)
8 sumka
9 oyoq Bilagi zo'r etik (to'piq etik).

Kerakli kutubxonalarni import qiling. Ushbu kutubxonalarni o'rnatishingiz mumkin quyidagi havolalardan foydalaning:

ÿ numpy ko‘p o‘lchovli massivlar va matritsalar bilan ishlash kutubxonasi, ÿ scikit-learn - klassik kompyuter muammolarini hal qilish algoritmlari kutubxonasi


o'rganish,
ÿ tenzor oqimi - neyronni qurish va o'qitish muammolarini hal qilish uchun kutubxona

tarmoqlar,


ÿ keras neyron tarmoqlarni tezkor amalga oshirish uchun kutubxona TensorFlow uchun qo'shimcha.

Biroq, siz bepul xizmatdan foydalanishingiz mumkin Google Colab (https://colab.research.google.com), ishga tushirishga imkon beradi (yuklagandan keyin)
Jupyter Notebook, Python kodini bajaring va barcha kerakli kutubxonalarni o'z ichiga oladi. Ushbu xizmatdan foydalanish uchun sizda Google hisobi bo'lishi kerak.

import numpy as np from
sklearn.metrics import accuracy_score import tensorflow as tf print("We're use TF", tf.__version__) import keras
import keras.models M import keras.layers as L import keras.backend as K print ( "Biz Kerasdan foydalanmoqdamiz", keras.__version__)

Oldingi operatsiyalar natijasida biz foydalanadigan versiyalarni ko'ramiz TensorFlow va Keras

Biz TF 1.15.0 dan foydalanmoqdamiz Keras 2.2.5 dan foydalanmoqdamiz
Machine Translated by Google

TensorFlow backend-dan foydalanish.

Fashion MNIST ma'lumotlar to'plamini yuklab oling , x_train va x_val - o'quv va tekshirish to'plamlari uchun kiyim tasvirlari (28 dan 28 pikselgacha), y_train va y_val - mos keladigan rasmlarga to'g'ri javoblar

(x_train, y_train), (x_val, y_val) = tf.keras.datasets.fashion_mnist.load_data()

Keling, y_train va y_val to'g'ri javoblarini bitta-hot kodlashga aylantiramiz. Ya'ni, biz to'g'ri javobni vektor sifatida ifodalaymiz, uning o'lchami bizning muammomizdagi sinflar soniga teng. Berilgan ob'ekt i raqami bilan sinfga tegishli bo'lsin. Keyin i-o'rinda bu vektor 1 ga, qolgan qiymatlar esa 0 ga ega bo'ladi.

y_train_oh = keras.utils.to_categorical(y_train, 10) y_val_oh = keras.utils.to_categorical(y_val, 10)

Misol tariqasida, har biri 128 ta neyrondan iborat ikkita yashirin qatlamli ko'p qatlamli perseptron modelini quramiz. Yashirin qatlamlarda faollashtirish funktsiyasi sifatida biz elu funktsiyasidan foydalanamiz. Xato funktsiyasi sifatida biz o'zaro entropiyani (o'zaro entropiyani) olamiz:

to'qqiz

ÿ ( , ) = ÿÿlog( ) ÿ [ = ], =0



qayerda

1,agar - rost
[ ] = { 0 aks holda

Neyron tarmoqning chiqish qiymatlarini kirish ob'ektining ma'lum bir sinfga tegishli bo'lish ehtimoliga aylantirish uchun biz soft-max funktsiyasidan foydalanamiz (boshqacha aytganda, biz qiymatlarni normallashtiramiz):

= ÿ / ÿ 9=0 , = 0,1, ... 9.

Endi modelni yaratishga o'tamiz. Biz kirish tasvirini 28 * 28 (= 784) uzunlikdagi vektorga cho'zamiz va uni kirishga kiritamiz. Chiqishda bizning vazifamizdagi sinflar soniga ko'ra 10 ta chiqish neyronimiz bor. Keling, bularni va yuqorida tavsiflangan parametrlarni o'rnatamiz.

K.clear_session() modeli = M.Sequential()
model.add(L.Dense(output_dim=128, input_dim=784, activation='elu')) model.add(L.Dense(output_dim=128, activation=' elu')) model.add(L.Dense(output_dim=10, activation='softmax'))
Machine Translated by Google

Optimallashtiruvchi sifatida biz odatiy stokastik gradient tushishidan emas, balki uning modifikatsiyasi ADAM -
Adaptive Moment Estimation dan foydalanamiz.

model.compile(
loss='categorical_crossentropy', # minimallashtirish o'zaro bog'liqlik optimizatori='adam', metrics=['accuracy'] # to'g'ri javoblar foizini ko'rsatish

)

Biz kirish ma'lumotlarini markazlashtiramiz va normallashtiramiz, shunda qiymatlar -0,5 dan +0,5 gacha o'zgaradi.

x_train_float = x_train.astype(np.float) / 255 - 0,5 x_val_float = x_val.astype (np.float) / 255 - 0,5

Keling, mini-partiyaning o'lchamini 64 ga teng qilib, modelni o'rgatamiz va o'quv davrlari sonini 10 ga o'rnatamiz.

model.fit(

x_train_float.reshape(-1, 28*28), y_train_oh, batch_size=64, har bir qadamda gradientni hisoblash
uchun # 64 obyekt epochs =10, #10 maÿlumotlar toÿplami validation_data=(x_val_float.reshape(-1, 28*2) oÿtadi , y_val_oh)

)

Olingan modelning aniqligi taxminan 0,8857 (88,57%) ni tashkil qiladi.
Download 116.34 Kb.

Do'stlaringiz bilan baham:
1   2   3




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling