SpiderMan Vs Deadpool: Bir necha daqiqada 200 ta rasmdan iborat Mac-da o'yinchoqlarni o'rganish

Bu erda men o'ynashga to'sqinlik qiladigan chuqur o'rganish haqidagi afsonalarni buzib, men kabi yangi boshlanuvchilarni hayajonlantirishga harakat qilaman. Fastai Framework buni osonlashtiradi.

Kod bu erda: https://github.com/RaviVijay/toylearning/blob/master/Spiderman_vs_Deadpool.ipynb

Asosiy kredit ajoyib ta'lim falsafasiga ega va xudojo'y jamoani yaratgan Jeremi Xovard va Reychel Tomaga beriladi. Ushbu post Nikhil B's Fun-dan kichik ma'lumotlar to'plamlari blogpostlari bilan ilhomlangan. Ushbu model Jeremi Howard tomonidan yaratilgan fastai-ramkalari va ma'lumotlarni o'zgartirish uchun skriptlar yordamida yaratilgan. O'yinchoqlarni o'rganish muammosi: Meniki.

Miflar

Meni chuqur o'rganish bilan o'ynashga xalaqit bergan ozgina afsonalar:

  1. Hech narsa qurmasdan oldin chuqur o'rganish kitobini o'qing
  2. Oddiy ma'lumotlar to'plamlarini yuklab olish, tartibga solish va yuklash juda qiyin
  3. Hech qanday ishni bajarish uchun sizga juda tezkor GPUlar kerak yoki bulutga katta pul sarflashingiz kerak
  4. Siz ramkalarni o'zlashtirishingiz kerak va ularni ishlashi uchun ko'p kodlarni kiritishingiz kerak
  5. Kichik ma'lumotlar to'plamini chuqur o'rganish orqali siz biron bir foydali narsani bilib olmaysiz.

Biz kichik ma'lumotlarni yig'ishda (keyinchalik muhokama qilingan) o'tkazishni o'rganamiz va siz bu afsonalarni birma-bir buzib tashlaganini ko'rasiz.

Muammo haqida bayonot

Men tushlikda hamkasblarimga aytib bera oladigan kichkina muammoni xohladim. Hotdog tasnifi yoki Nikhil misollari kabi. Super qahramon tasnifi juda qiziqarli bo'ldi. Ushbu post uchun, sodda qilib aytganda, men ulardan ikkitasini ajrataman: Spiderman va Deadpool.

Bizning muammo haqida boshlang'ich sezgi: O'rgimchak va Deadpool o'xshash ko'rinadi va bu bizning NNni chalkashtirishi mumkin. Uning xatti-harakatlarini, uning xatolarini kuzatib o'rganishimiz mumkin.

Spiderman va Deadpool

Ma'lumotlar to'plami

Agar siz yoqimli fikrga ega bo'lsangiz, odatda ishning eng qurg'oq qismi ma'lumotlarni yig'ishdir. Men Nikxilning postidagi pastdagi tarkibni ko'rdim va sakrab tushdim:

"Buning uchun men Hardikvasa tomonidan ellikta kichkina stsenariydan foydalandim. Bu Google Images-da kalit so'zlarni / kalit so'z birikmalarini qidirish va ixtiyoriy ravishda barcha rasmlarni yuklab olish uchun Python dasturi. "

va darhol ushbu o'yinchoqlarni o'rganish muammosi ustida ishlashni boshladi

git kloni https://github.com/hardikvasa/google-images-download

google-images-download.py-ning 21-qatorini o'zgartiring

search_keyword = ["o'lik", "o'rgimchak"]

google-images-download.py-ning 24-qatorini o'zgartiring

kalit so'zlar = ['']

3 daqiqa. Boom! 100 ta o'lik va o'rgimchaklarning 100 ta rasmlari haqidagi bizning kichik ma'lumotlar to'plamimiz yuklab olinadi, toifalar bo'yicha tartibga solingan va bizning pifon skriptimizga yuklashga tayyor.

Afsonaviy afsonalar: 3. Oddiy ma'lumotlar to'plamlarini yuklab olish, tartibga solish va yuklash juda qiyin

Keyingi ipython daftarchasining kodini olaylik.

Step0: fastai-ramkasini o'rnating:

tez o'rnatish

Import:

fastai importi

Neyron tarmog'i uchun DataPrep:

Bizda allaqachon toifalar bo'yicha ma'lumotlar to'plangan. Ammo chuqur o'rganish ma'lumotlarning uchta to'plamga bo'lishini talab qiladi:

  1. O'quv ma'lumotlari: Biz uy vazifasi muammolari singari kontseptsiyani tushunishga harakat qilamiz. Siz o'rganish uchun ularning ko'pini hal qilasiz.
  2. Tasdiqlash ma'lumotlari: yakuniy imtihonlar singari, biz ham tushunchamizni baholash uchun olamiz. Agar biz bu erda muvaffaqiyatsizlikka uchratsak, uy vazifalarini boshqa usul bilan o'rganishni boshlang.
  3. Sinov ma'lumotlari: Ishga qo'shilishingiz bilan bog'liq muammolar. Siz buning uchun o'qidingiz. Agar ko'kdan biron narsani ko'rsangiz va u tayyor bo'lmasa, sizning mashg'ulotingiz va tekshirish usullaringiz etarlicha yaxshi emas edi. Maktabga qaytib boring.

Bizning "O'yinchoq o'rganish" muammosi uchun biz o'qish va tasdiqlash to'plamlarini o'rganish bilan yashaymiz va testlar to'plamiga ehtiyoj sezmaymiz. Agar sizlardan birortangiz o'rgimchak / o'lik sportchining yangi qiyofasi bilan mening modelimga e'tiroz bildirsa, bu sinov to'plami.

Fastai Framework sizga barcha o'qitish va tasdiqlash ma'lumotlarini bitta katalogda saqlashga imkon beradi va csv-faylni toifalari haqida ma'lumot beradi. Maxsus kod quyida fastai platformasi tomonidan talab qilinadigan ma'lumotlarning harakati va csv-ning yaratilishi:

Csv tayyor bo'lgandan so'ng, fastai-ning quyida joylashgan kodi ularni ishlatadi va barcha ma'lumotlarni o'zgartiradi va kiritiladi.

Ma'lumotlar kengayishi, professorlar uy vazifalariga oid masalalarni turli tomonlardan tushunchalar haqida o'ylashga yordam beradigan burilishlarga o'xshaydi. Aks holda siz darslikni qat'iyan kuzatib borasiz va yoddan o'rganishni yakunlaysiz.

Ma'lumotni o'zgartirish - bu ma'lumotni neyron tarmoqqa tushunadigan formatda berishdir. Bu jpg-ni png-ga o'tadigan dasturga aylantirish kabi.

Transfer Learning

Transferni o'rganish bu juda katta muammolar ustida ko'p narsalarni o'rgangan va kichik muammoni tezda o'rganib chiqishni va bizga ishonchli echimni topishini so'ragan neyron tarmoq arxitekturasidan foydalanish usuli. Bu C ++ tarmoq dasturlash guruxiga o'xshaydi, u hafta oxiri pythonni oddiy narsalarni avtomatlashtirishni o'rganadi. U juda qiyin muammolarni hal qildi va mushukchasida umumiy texnikaga ega. Agar yangi o'yinchoq muammosi berilsa, u uni tezda o'rganishi va keyin uni ishonchli hal qilishi mumkin.

Transfer o'rganish kodi:

Endi ma'lumotlar tayyor, uni neyron tarmoqqa uzataylik. 2 ta narsa neyron tarmoqqa ulanadi va biz 2 daqiqadan so'ng taxmin qilishni so'raymiz.

  1. Ma'lumotlar ko'paytirildi + o'zgartirildi
  2. O'qigan o'quvchi
1. NN-archni boqing. va ma'lumotlar. 2. O'qishga boring

3 daqiqadan so'ng. Boom:

So'nggi ustun natija qanchalik aniqligini aytadi: Vertikal to'plamdagi qancha rasm kabi, o'rganilgan model aniq taxmin qildi. Kodning 2 qatorida va 2 daqiqadan so'ng, suyaklangan ark yangi muammoni keltirib chiqaradi va qaysi rasm o'rgimchak va qaysi qotib qolgan 2/3 marta to'g'ri ekanligini taxmin qiladi. Hatto bu haqda sezgilarni o'zgartirish uchun bu haqda hali ma'lumotga ega emas.

Afsonaviy mish-mish: Siz ramkalarni o'zlashtirishingiz kerak va ularni ishlashi uchun juda ko'p kodni kiritishingiz kerak

Tyuning

Bu erda biz oldindan aniqlangan neyron tarmoqqa ko'proq vaqt va moslashuvchanlikni beramiz. Ushbu muammoni aniqroq hal qilish uchun u og'irliklarni (sezgi) biroz o'zgartirishi mumkin.

Keyinchalik sozlang88% aniq

Mening yuklangan protsessorimda ~ 10 daqiqa. GPUda 1 daqiqa yoki undan ko'p vaqt ketishi kerak edi. Ammo ~ 10 minut bu mening multiplexing chegaramda.

Bularning barchasi GPU-ga ega bo'lmagan Mac-da amalga oshirildi. Men ham AWS ijaraga olishim shart emas edi. Agar siz "O'yinchoqlarni o'rganish" bilan dam olishni xohlasangiz, buni Mac-da qilishingiz mumkin, ammo agar sizning tizza kompyuteringizda munosib Nvidia GPU bo'lsa, undan ham yaxshiroq!

Afsonaviy buzilish: 4. Siz biron bir ishni amalga oshirish uchun sizga juda tezkor GPUlar kerak yoki bulutga katta pul sarflashingiz kerak

Ammo: Bu shuni anglatadiki, muammolar yanada murakkablashgani sari GPU hisoblash uchun juda zarur. Kontseptsiyalarni o'rganish va ma'lumotlarni dastlabki tushunish uchun GPU talab qilinmaydi. Ma'lumotni o'rganib chiqqandan so'ng, namunaviy ma'lumotlar bilan ishlaydigan modellarni ishga tushirgandan so'ng, siz GPU-larni ijaraga olishingiz va ma'lumotni o'rganishga ko'p vaqt sarflashning o'rniga ularni hisoblash uchun ishlatishingiz mumkin.

Ma'lumotlar tahlili

Ushbu "O'yinchoq muammosi" uchun men ma'lumotlarning tuzilishini bilaman, shuning uchun men buni bu erda tushuntirdim. Keyinchalik rivojlangan muammolar uchun ushbu qadam oldinroq keladi va siz asabiy tarmoqni o'rganasiz yoki undan birinchi taxmin qilishni so'rasangiz. Bu butun jarayonning muhim bosqichidir.

Trening tugagandan so'ng va siz tekshirishning to'g'riligidan qoniqsangiz, biz ma'lumotlar bazasida ma'lumotlar bazasini ko'paytirish bilan yakuniy prognozlarni amalga oshiramiz:

Keling, ba'zi bashoratlarni ko'rib chiqaylik. Ehtimollar> 0.5 o'rgimchak deb taxmin qilinadi va <0,5 - bu o'likdir.

O'rgimchak sifatida to'g'ri bashorat qilinganDeadpool sifatida to'g'ri bashorat qilingan

Ammo xatolarga qarash bizga qanday ishlashini va qaerda buzilishini tushunishimizga yordam beradi.

Noto'g'ri tasniflangan

Birma-bir ketaylik.

  1. Birinchi surat aniq o'rgimchakdir, ammo u o'lik sifatida taxmin qiladi. Ehtimol, agar biz uni yanada takomillashtirsak yoki ko'proq ma'lumot bersak, u yaxshilanishi mumkin
  2. Bizning neyron tarmog'imiz insoniy me'yorlar bilan savodsiz ekanligi aniq. U erda aniq yozilgan: "Deadpool". Hazillarni chetga surib, biz ikkalasini ham hal qilish juda noaniq ekanligini tushunishimiz mumkin, chunki bu ikkalasi ham o'xshaydi
  3. Ushbu rasmda o'rgimchak ham, o'lik ham bor, ammo u bizning ma'lumotlar bazamizda o'lik sifatida tasniflangan. NN deydi: "Mening muammoim emas" va biz kelishishimiz kerak
  4. WTF bu? Bu yana 3 kabi juda chalkash.

Kichkina o'yinchoq muammosi bo'lsa ham, biz NNning sezgilarini o'qiy oldik. Ushbu muammoni hal qilishda SGD, ADAM va boshqalar kabi optimizatorlarning samaradorligini sinab ko'rishimiz kerak.

Afsonaviy mish-mishlar: 5. Kichkina ma'lumotlar to'plamini chuqur o'rganib, biron bir foydali narsani bilib olmaysiz.

Va super heros bilan tanishish uchun biz NNning barcha tushunchalarini tushunishga hojat yo'q edi.

Afsonaviy mish-mishlar: 1. Hech narsa qurmasdan oldin chuqur o'rganish kitobini o'qing