SpiderMan Vs Deadpool: Играчка за обучение на Mac с 200 изображения за няколко минути

Тук се опитвам да вълнувам начинаещи като мен, като разбивам няколко мита за задълбоченото учене, които действат като бариери пред играта. Fastai Framework го прави лесно.

Кодът е тук: https://github.com/RaviVijay/toylearning/blob/master/Spiderman_vs_Deadpool.ipynb

Основната заслуга е на Джеръми Хауърд и Рейчъл Томас, които имат невероятна философия на преподаване и създадоха богоугодна общност. Тази публикация е вдъхновена от забавлението на Нихил Б с малки блогове от масиви от данни. Моделът е създаден с помощта на рамка fastai, създадена от Джеръми Хауърд, а скриптите за промяна на данните са от общността. Проблем с обучението на играчките: Моят.

Митове

Няколко мита, които бях възпрепятствал да започна да играя наистина с дълбоко обучение:

  1. Прочетете книгата за дълбоко обучение, преди да изградите нещо
  2. Трудно е да изтегляте, организирате и зареждате дори прости набори от данни
  3. Имате нужда от изключително бързи графични процесори или да похарчите цяло състояние в облака, за да направите нещо
  4. Трябва да овладеете рамки и трябва да кодирате много, за да ги накарате да работят
  5. Не можете да научите нищо стойностно, като направите задълбочено обучение на малки набори от данни.

Ще използваме трансферно обучение (обсъдено по-нататък) на малки набори от данни и вие ще видите тези митове разбити един по един по пътя.

Изложение на проблема

Исках малък фънки проблем, който мога да спомена на колегите си на обяд. Като класификация на хотдог или примери на Нихил. Класификацията на супергероите звучеше вълнуващо. За тази публикация, за да е по-проста, класифицирам между 2 от тях: Спайдърмен и Дедпул.

Първоначална интуиция за нашия проблем: Спайдърмен и Дедпул изглеждат сходни и това може да обърка нашата NN. Можем да научим това поведение, като наблюдаваме грешките си.

Спайдърмен срещу Deadpool

Масив от данни

Като цяло най-сухата част от работата, след като имате сладка идея, е събирането на данните. Видях по-долу съдържание в публикацията на Нихил и скочих:

„За да направя това, използвах прекрасен малък сценарий от Хардикваса. Това е програма Python за търсене на ключови думи / ключови фрази в Google Images и по желание изтегляне на всички изображения. “

и веднага започнах да работя по този проблем с обучението в играчките

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

променете реда 21 на google-images-download.py до

search_keyword = [“deadpool”, “spiderman”]

променете реда 24 на google-images-download.py до

ключови думи = ['']

3 минути Boom! Нашият малък набор от 100 изображения на Deadpool и 100 изображения на паяк се изтегля, организира се по категории и е готов за качване в нашия скрипт на python.

Myth Broken: 3. Трудно е да изтегляте, организирате и зареждате дори прости набори от данни

Да вземем следващия код на бележника ipython.

Стъпка 0: Инсталирайте рамката на fastai:

pip инсталирайте fastai

Внос:

внос на фастаи

DataPrep за невронна мрежа:

Вече имаме готови данни, организирани по категории. Но задълбоченото обучение изисква данните да бъдат разделени в 3 групи:

  1. Данни за обучение: Подобно на проблемите с домашните работи, които решаваме, за да разберем концепция. Продължаваш да решаваш много от тях, за да го научиш.
  2. Данни за валидиране: Подобно на заключителните изпити, които вземаме, за да преценим разбирането си. Ако не успеем тук, започнете да изучавате проблемите на домашните с различен подход.
  3. Данни от теста: Проблеми, които ще видите, след като се присъедините към работата. Учихте за това. Ако видите нещо необичайно и не сте готови, вашите методи за обучение и валидиране не бяха достатъчно добри. Върнете се на училище.

За нашия проблем с обучението на играчки, можем да живеем с изучаването на учебни и валидиращи набори и не се нуждаем от тестов набор. Ако някой от вас предизвика моя модел с ново изображение на паяк / Deadpool, това ще бъде тестът.

Fastai Framework ви позволява да съхранявате всички данни за обучение и валидиране в една и съща директория и да предоставя csv файл, споменаващ категориите. По-долу персонализиран код прави движението на данни и създаването на csv, изисквано от рамката на fastai:

След като csv е готов, по-долу рамковият код на fastai ще ги консумира и ще извърши всички преобразувания и увеличения на входните данни.

Обобщението на данните е подобно на обратите, които преподавателите дават на домашните задачи, за да ви помогнат да мислите за концепциите от различни ъгли. В противен случай вие ще следвате строго учебника и ще завършите обучението.

Трансформациите на данни дават данните на невронната мрежа във формат, който тя разбира. Това е като преобразуване на jpg в png в програма, която отнема само png.

Трансферно обучение

Трансферното обучение е техника за използване на предварително проучена архитектура на невронната мрежа, която научи много по много по-голям проблем и го помолете бързо да научим по-малък проблем и да ни даде надеждно решение. Това е като гуру за програмиране на C ++ мрежа, който през уикенда се учи на python за автоматизиране на прости неща. Той се е справил с много по-трудни проблеми и има общи техники в своето коте. Когато му бъде даден нов проблем с играчките, той може да го изследва бързо и след това да го реши надеждно.

Код за трансферно обучение:

Сега, когато данните са готови, нека ги предаваме в невронна мрежа. 2 неща се подават към невронна мрежа и ние го молим да отгатне след 2 минути.

  1. Данни допълнени + трансформирани
  2. Претърсен Учител
1. Захранване на NN-арка. и данни. 2. Отидете да научите

След 3 минути бум:

Последната колона казва колко точен е резултатът: Както в колко изображения във валидиран набор научи моделът отгатна точно. В 2 реда код и след 2 минути прегледаната арка възниква нов проблем и отгатва кое изображение е паяк и коя е мъртва точка правилно 2/3 пъти. Дори не е научила достатъчно за това, за да промени интуицията си.

Myth Broken: Трябва да овладеете рамки и трябва да кодирате много, за да ги накарате да работят

настройване

Тук даваме на проучената невронна мрежа повече време и гъвкавост. Може леко да промени теглото (интуицията), за да се справи по-точно с този проблем.

Настройте го допълнително88% Точност

Това отне ~ 10 минути на заредения ми процесор. В GPU щеше да отнеме 1 минута или повече. Но ~ 10 минути, в рамките на моята граница на мултиплексиране.

Всичко това беше направено на Mac, който няма графичен процесор. Не трябваше да наемам и AWS. Ако искате да се забавлявате с „Toy learning“, можете да го направите на Mac, но ако вашият лаптоп има прилични графични процесори на Nvidia, още по-добре!

Myth Broken: 4. Имате нужда от изключително бързи графични процесори или да похарчите цяло състояние в облака, за да постигнете нещо

Но: Това каза, тъй като проблемите стават по-сложни, графичните процесори са абсолютно необходими за изчисляване. За да научите концепции и да получите първоначално разбиране на данните, не са необходими графични процесори. След като опипвате данните, стартирайте модели с примерни данни, можете да наемете графични процесори и да ги използвате единствено за изчисления, вместо да губите часове за изучаване на данни върху тях.

Анализ на данни

За този „Проблем с играчките“ знам структурите на данните, следователно тук съм обяснил това. За по-напреднали проблеми тази стъпка ще дойде и преди да научите нервната мрежа или след като я помолите да направи първото предположение. Това е критичната стъпка в целия процес.

След като обучението приключи и сте доволни от точността на валидиране, ние изпълняваме окончателни прогнози с увеличаване на данните, приложени върху данните за валидиране:

Нека разгледаме някои прогнози. Вероятностите> 0,5 са прогнозирани като спайдърмен и <0,5 е мъртва точка.

Правилно предсказано като паякПравилно се прогнозира като Deadpool

Но гледайки на грешките ни дава разбиране за това как работи и къде се чупи.

Неправилно класифициран

Да вървим един по един.

  1. Първото изображение е явно паяк, но го предрича като мъртва точка. Може би, ако го настроим допълнително или го подадем повече данни, може да стане по-добре
  2. Ясно е, че нашата невронна мрежа е неграмотна от човешките стандарти. Там ясно пише: „Deadpool“. Шега настрана, можем да разберем, че е много неясно да реши дали и в двата случая, тъй като изглежда и двете
  3. Това изображение има както спайдърмен, така и Deadpool, но беше категоризирано като deadpool в нашата база данни. NN казва: „Не е моят проблем“ и трябва да се съгласим
  4. Какво по дяволите е това ? Отново е много объркващо като 3.

Ясно успяхме да прочетем интуициите на NN дори с малък проблем с играчките. Трябва също така да можем да тестваме ефикасността на оптимизатори като SGD, ADAM и т.н. по този проблем.

Myth Broken: 5. Не можете да научите нищо полезно, като направите задълбочено обучение на малки набори от данни.

И не ни беше нужно да разбираме всички концепции зад NN за генериране на супер хероси.

Разрушен мит: 1. Прочетете книгата за дълбоко обучение, преди да изградите нещо