Nega bu maqola?
Download 0.7 Mb.
|
Neyron tarmoqni yaratish turli sohalar uchun juda dolzarb vazifadir
Neyron tarmoqni yaratish turli sohalar uchun juda dolzarb vazifadir: mahsulotlarni toifalarga ajratishdan tortib, videoda yuzlarni tanib olishgacha. Biroq, yuqori sifatli natijaga erishish uchun uning parametrlarini to'g'ri sozlash kerak. Buni qanday qilish kerak? Python-da yozilgan va sun'iy neyron tarmoqlar bilan o'zaro aloqani ta'minlaydigan Keras, ochiq manba kutubxonasi bunga yordam berishi mumkin. Iltimos, mushuk ostida, bu erda biz ushbu kutubxona bilan ishlashning nuanslari haqida batafsil gaplashamiz. Nega bu maqola? Bu erda biz Keras yordamida neyron tarmoqni yaratish va uning giperparametrlarini sozlash ko’rib chiqamiz. Biz quyida tavsiflangan tahlilni misol sifatida Kaggle Otto guruhining mahsulotlarni tasniflash bo'yicha tanlovining ochiq ma'lumotlar to'plamidan foydalangan holda amalga oshirdik. Undagi chiziqlar soni taxminan 62 mingtani tashkil qiladi. Har bir qator bitta mahsulotga mos keladi. Korxona mahsulotlarini 93 ta xususiyatga ko‘ra to‘qqiz toifaga bo‘lish zarur. Har bir toifa mahsulotning bir turi, masalan, moda, elektronika, va hokazo. Grafikda ko'rib turganingizdek, sinflar muvozanatli emas. O'zgaruvchilar uchun tavsiflovchi statistika: Maqolada bosqichma-bosqich modelni yaratish uchun mantiqiy bloklarni tahlil qilamiz: kirish ma'lumotlari, qatlamlar, neyronlar soni, faollashtirish funktsiyasi, o'qitish tartibi. Bu qanday amalga oshiriladi? Xo'sh, keling, boshlaylik. Birinchidan, kerakli kutubxonalarni import qilaylik: from tensorflow.keras.models import Sequential from tensorflow.keras.layers import Dense, Dropout, Activation, Flatten from tensorflow.keras.optimizers import Adam,SGD,Adagrad from tensorflow.keras.wrappers.scikit_learn import KerasClassifier from tensorflow.keras.initializers import glorot_uniform Tensorlar neyron tarmog'ining kirishiga beriladi. Bu n o'lchovli matritsa sifatida vektorlarning umumiy shakli. Agar ma'lumotlar jadvalli bo'lsa (bu holatda bo'lgani kabi), tensor ikki o'lchovli bo'ladi, bu erda ushbu matritsaning har bir ustuni jadvaldan bitta kuzatish (jadval ma'lumotlarining bir qatori). y = x.target.values x.drop('target', axis=1, inplace=True) x = np.log(1+x.values) Tarmoqning umumiy strukturasi keras Sequential() model ob'ekti yordamida ishlab chiqilgan bo'lib, unga qo'shimcha qatlamlar qo'shilgan ketma-ket modelni yaratadi. Zich qatlam eng zarur va asosiy hisoblanadi. U oldingi va keyingi qatlamdan neyronlarni ulash uchun javobgardir. Masalan, agar birinchi qatlamda 5 ta, ikkinchisida esa 3 ta neyron bo'lsa, qatlamlar orasidagi ulanishlarning umumiy soni 15 ta bo'ladi. Zich qatlam bu ulanishlar uchun mas'ul bo'lib, u sozlanishi giperparametrlarga ega: neyronlar soni, faollashtirish turi, yadro turini ishga tushirish. Dropout Layer modelni haddan tashqari o'rnatishdan xalos bo'lishga yordam beradi. Shunday qilib, ba'zi neyronlar 0 ga aylanadi va bu o'quv jarayonida hisoblashni kamaytiradi. Asosiy model quyida ko'rsatilgan: def getModel(dropout=0.00, neurons_first=500, neurons_second=250, learningRate=0.1): model = Sequential() model.add(Dense(neurons_first, activation='relu', input_dim=num_features, kernel_initializer=glorot_uniform(), name='Dense_first')) model.add(Dropout(dropout, name='Dropout_first')) model.add(Dense(neurons_second, activation='relu', kernel_initializer=glorot_uniform(), name='Dense_second')) model.add(Dropout(dropout, name='Dropout_second')) model.add(Dense(num_classes, activation='softmax', kernel_initializer=glorot_uniform(), name='Result')) model.compile(loss='sparse_categorical_crossentropy', optimizer=Adagrad(lr=learningRate), metrics=['accuracy']) return model Endi faollashtirish funksiyasi nima ekanligini ko'rib chiqamiz. Shunday qilib, tarmoqning har bir neyroni oldingi qatlamning neyronlaridan bir yoki bir nechta kirish signallarini oladi. Agar biz birinchi yashirin qatlam haqida gapiradigan bo'lsak, u holda u kirish oqimidan ma'lumotlarni oladi. Ikkinchi yashirin qatlamdan boshlab, har bir neyron oldingi qatlamdagi neyronlarning vaznli yig'indisi bilan oziqlanadi. Ikkinchi yashirin qatlamda kirish ma'lumotlari faollashtirish funktsiyasi tufayli faollashtiriladi. Faollashtirish funktsiyasi yordamida neyronlarning og'irligini moslashtirishga yordam beradigan orqa tarqalishning amalga oshirilishi mavjud bo'ladi. Model shu tarzda o'qitiladi. Muhim nuqta shundaki, faollashtirish funktsiyasining bir nechta variantlari mavjud. Joriy vazifa uchun ReLu va Softmax faollashtirish funksiyalaridan foydalanilgan. ReLu funktsiyasi quyidagicha ko'rinadi: Softmax funktsiyasi quyidagicha ko'rinadi: Yo'qotish funktsiyasi tarmoq to'g'ri yo'nalishda harakatlanayotganligini tushunishga yordam beradigan ko'rsatkichdir. Muammo ko'p sinfli tasniflash uchun hal qilinganligi sababli, siyrak kategorik krossentropiyani yo'qotish funktsiyasi ishlatilgan: Keling, avvalroq o'rnatilgan parametrlar bilan modelning sifatini ko'rib chiqaylik. Quyida yo'qotish funktsiyasi va tasniflagichimizning aniqligini ko'rsatadigan grafik mavjud. Ko'ramizki, eng yaxshi natija taxminan 13-davrda kuzatilgan, ammo model yo'qotish funktsiyasining katta o'zgarishi tufayli qayta o'rganilgan. Yana nima? Modelni o'qitishning eng muhim qismi optimallashtiruvchi hisoblanadi. Avvalroq, "backpropagation" atamasi tilga olingan edi - bu aynan optimallashtirish jarayoni. Oldin tasvirlangan struktura qatlam neyronlari orasidagi tasodifiy og'irliklar bilan ishga tushiriladi. Yuqori bashoratli kuchga ega bo'lish uchun ushbu tasodifiy og'irliklarni yangilash uchun o'rganish jarayoni kerak. Tarmoq bitta o'quv namunasini oladi va uning qiymatlarini qatlamning kirish ma'lumotlari sifatida ishlatadi, keyin bu ma'lumotlar faollashtiriladi va faollashtirilgandan so'ng yangi vaznli ma'lumotlar keyingi qatlamning kirishiga yuboriladi. Xuddi shunday jarayon keyingi qatlamlarda ham sodir bo'ladi. Oxirgi qatlamning natijasi o'quv majmuasi uchun bashorat bo'ladi. Keyinchalik, yo'qotish funktsiyasi qo'llaniladi, bu model qanchalik noto'g'ri ekanligini ko'rsatadi. Ushbu xatoni kamaytirish uchun optimallashtiruvchining boshqa funktsiyasi qo'llaniladi. Bu savolga javob berish uchun lotinlardan foydalanadi - neyronlar orasidagi og'irliklarning kichik o'zgarishi bilan yo'qotish funktsiyasi qanchalik o'zgaradi? Kirish qatlamidan bitta o'quv namunasini hisoblash o'tish deb ataladi. Odatda, o'qitish tizim cheklovlari tufayli partiyalarda sodir bo'ladi. Partiya - bu kirish ma'lumotlaridan o'quv namunalari to'plami. Tarmoq partiyadagi barcha namunalarni qayta ishlagandan so'ng o'z vaznlarini yangilaydi. Bu iteratsiya deb ataladi (ya'ni, partiyadan barcha o'quv namunalarini muvaffaqiyatli qayta ishlash, keyin tarmoqdagi og'irliklarni yangilash). Kirish ma'lumotlarida bo'lgan barcha o'quv namunalarini hisoblash davriy yangilanishlar bilan davr deb ataladi. Har bir iteratsiyada tarmoq neyronlar orasidagi og'irliklarga o'zgartirish kiritish uchun optimallashtirish funksiyasidan foydalanadi. Bosqichma-bosqich, bir necha iteratsiya va keyin bir necha davrlar davomida tarmoq o'z vaznlarini yangilaydi va to'g'ri bashorat qilishni o'rganadi. Turli xil optimallashtirish funktsiyalari mavjud. Bizning holatlarimizda Adagrad ishlatilgan. Biz hamma narsani optimallashtiramiz! Xo'sh, endi modelning sifatini yaxshilashga harakat qilaylik. Bu erda maktabni tashlab ketish darajasini oshirish foydali bo'ladi. Ya'ni, endi ko'proq neyronlar o'quv jarayonidan chiqib ketadi. increasedDropout = 0.5 model = getModel(increasedDropout) net = model.fit(X, y, epochs=15, batch_size=515, verbose=1, validation_split=0.2) Grafik shuni ko'rsatadiki, ortiqcha moslama muammosi endi yo'q, chunki yo'qotish funktsiyasi yumshoqroq bo'ldi. Davrlar sonini ko'paytirish. model = getModel(increasedDropout) net = model.fit(X, y, epochs=25, batch_size=515, verbose=1, validation_split=0.2) Sifatida yaxshilangani seziladi. Missiya bajarildi va biz buni juda yaxshi bajardik, to'g'rimi? Neyronlar sonining ko'payishi. increasedNeurons1 = 800 model = getModel(increasedDropout, neurons_first=increasedNeurons1) net = model.fit(X, y, epochs=25, batch_size=515, verbose=1, validation_split=0.2) Modelning sifati yanada yaxshilandi. Modelning prognozini ko'rsatish uchun kichik hajmdagi ma'lumotlar olindi. Natijalardan ko'rinib turibdiki, model xatosi kichik. Yuqorida aytib o'tilganidek, 2 va 6-sinflar ko'pincha uchraydi. Shunga ko'ra, model ularda eng kam xato qiladi. Quruq moddada Biz tashlab ketishni ko'paytirish orqali modelni haddan tashqari moslashishdan qutqara oldik, shundan so'ng neyronlar va davrlar sonini ko'paytirish orqali yaxshi natijalarga erishildi. Oxir-oqibat, barcha mahsulot sinflari uchun modelning umumiy bashorat aniqligi 0,81 dan bir oz ko'proq, bu uning sifatini tavsiflaydi. Shunga ko'ra, endi bu modeldan ko'p sinfli tasniflash muammosini hal qilish uchun foydalanish mumkin. Afzalligi shundaki, strukturaning universalligi, shuning uchun uni neyron tarmoqlar yordamida muammolarni hal qilishda foydalanish mumkin. Download 0.7 Mb. Do'stlaringiz bilan baham: |
Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling
ma'muriyatiga murojaat qiling