TensorFlow

Първи стъпки с TensorFlow

Първи стъпки с TensorFlow
TensorFlow е мозъчно дете на Google и в основата си е библиотека за цифрови изчисления. Написан е на C / C ++ и има много гъвкав API. Този API може да бъде свързан с интерфейс на Python, така че можете да пишете малки фрагменти от код на Python за решаване на сложни проблеми. Гъвкавият и последователен API също така позволява на разработчиците да използват един и същ преден код, за да работят на различни платформи като графични процесори на Nvidia, централни процесори с общо предназначение и дори мобилни и вградени устройства, всяко от които има много различно изпълнение в задната част.

TensorFlow намери огромно приложение в областта на машинното обучение, именно защото машинното обучение включва много смачкване на числа и се използва като обща техника за решаване на проблеми. И въпреки че ще си взаимодействаме с него с помощта на Python, той има предни краища за други езици като Go, Node.js и дори C #.

Tensorflow е като черна кутия, която крие всички математически тънкости в нея и разработчикът просто извиква правилните функции за решаване на проблем. Но какъв проблем?

Машинно обучение (ML)

Да предположим, че проектирате бот, за да играете шах. Поради начина на проектиране на шаха, начина на движение на фигурите и добре дефинираната цел на играта, е напълно възможно да се напише програма, която да играе играта изключително добре. Всъщност това би надхитрило цялата човешка раса в шаха. То ще знае точно какъв ход трябва да направи, като се има предвид състоянието на всички фигури на дъската.

Такава програма обаче може да играе само шах. Правилата на играта са включени в логиката на кода и всичко, което прави програмата, е да изпълнява тази логика строго и по-точно, отколкото всеки човек би могъл. Това не е алгоритъм с общо предназначение, който можете да използвате за проектиране на всеки бот за игра.

С машинното обучение парадигмата се променя и алгоритмите стават все по-общи с цел.

Идеята е проста, започва с дефиниране на проблем с класификацията. Например искате да автоматизирате процеса на идентифициране на видовете паяци. Видовете, които са ви известни, са различните класове (да не се бърка с таксономични класове) и целта на алгоритъма е да сортира ново неизвестно изображение в един от тези класове.

Тук първата стъпка за човека би била да се определят характеристиките на различни отделни паяци. Бихме предоставили данни за дължината, ширината, телесната маса и цвета на отделните паяци заедно с видовете, към които принадлежат:

Дължина Ширина Маса Цвят Текстура Видове
5 3 12 Кафяво гладка Татко Дълги крака
10 8 28 Кафяво-черно космат Тарантула

Наличието на голяма колекция от такива отделни данни за паяци ще бъде използвано за „обучение“ на алгоритъма, а друг подобен набор от данни ще бъде използван за тестване на алгоритъма, за да се види колко добре се справя с нова информация, която никога не е срещал досега, но която вече знаем отговор на.

Алгоритъмът ще започне по произволен начин. Тоест всеки паяк, независимо от неговите характеристики, би бил класифициран като всеки от видовете. Ако в нашия набор от данни има 10 различни вида, тогава този наивен алгоритъм ще получи правилната класификация приблизително 1/10 от случая поради чист късмет.

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

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

По същия начин, когато една корелация работи добре чрез няколко примера, тя се засилва всеки път. Този метод за препъване към истината е изключително ефективен, благодарение на много математически тънкости, за които като начинаещ не бихте искали да се притеснявате.

TensorFlow и тренирайте свой собствен класификатор на цветя

TensorFlow отвежда идеята за машинно обучение още по-далеч. В горния пример вие отговаряхте за определянето на характеристиките, които отличават един вид паяк от друг. Трябваше старателно да измерим отделни паяци и да създадем стотици такива записи.

Но можем да се справим по-добре, като предоставим само сурови данни за изображението на алгоритъма, можем да позволим на алгоритъма да намира модели и да разбира различни неща за изображението като разпознаване на формите в изображението, след това да разберем каква е текстурата на различните повърхности, цвета , така нататък и така нататък. Това е началното понятие за компютърно зрение и можете да го използвате и за други видове входове, като аудио сигнали и обучение на вашия алгоритъм за разпознаване на глас. Всичко това е под общия термин „Дълбоко обучение“, където машинното обучение е доведено до своята логична крайност.

Тогава този обобщен набор от понятия може да бъде специализиран, когато се занимава с много изображения на цветя и ги категоризира.

В примера по-долу ще използваме Python2.7 интерфейс за интерфейс с TensorFlow и ще използваме pip (а не pip3), за да инсталираме TensorFlow. Поддръжката на Python 3 все още е малко бъги.

За да направите свой собствен класификатор на изображения, първо използвайки TensorFlow, нека го инсталираме с помощта на пип:

$ pip инсталирайте tensorflow

След това трябва да клонираме tensorflow-за-поети-2 git хранилище. Това е наистина добро място да започнете поради две причини:

  1. Той е прост и лесен за използване
  2. Той идва предварително обучен до определена степен. Например класификаторът на цветя вече е обучен да разбере каква текстура гледа и какви форми гледа, така че е изчислително по-малко интензивен.

Нека вземем хранилището:

$ git clone https: // github.com / googlecodelabs / tensorflow-for-poets-2
$ cd tensorflow-for-poets-2

Това ще бъде нашата работна директория, така че отсега нататък всички команди трябва да се издават от нея.

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

$ curl http: // изтегляне.тензор поток.org / example_images / flower_photos.tgz
| tar xz -C tf_files

Директорията .. ./tensorflow-for-poets-2 / tf_files съдържа тон от тези изображения, надлежно етикетирани и готови за употреба. Изображенията ще бъдат с две различни цели:

  1. Обучение на ML програма
  2. Тестване на програмата ML

Можете да проверите съдържанието на папката tf_files и тук ще откриете, че ние се стесняваме само до 5 категории цветя, а именно маргаритки, лалета, слънчогледи, глухарче и рози.

Обучение на модела

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

$ IMAGE_SIZE = 224
$ ARCHITECTURE = "mobilenet_0.50 _ $ IMAGE_SIZE "

След това извикайте скрипта на python, като изпълните командата:

$ python -m скриптове.преквалификация \
--bottleneck_dir = tf_files / тесни места \
--how_many_training_steps = 500 \
--model_dir = tf_files / models / \
--summaries_dir = tf_files / training_summaries / "$ ARCHITECTURE" \
--output_graph = tf_files / преквалифициран_граф.pb \
--изходни етикети = tf_files / преквалифицирани_ етикети.текст \
--архитектура = "$ ARCHITECTURE" \
--image_dir = tf_files / flower_photos

Въпреки че има много опции, посочени тук, повечето от тях посочват директориите с входни данни и броя на итерациите, както и изходните файлове, в които ще се съхранява информацията за новия модел. Това не би трябвало да отнеме повече от 20 минути, за да работите на посредствен лаптоп.

След като скриптът завърши както обучението, така и тестването, той ще ви даде точна оценка на обучения модел, който в нашия случай беше малко по-висок от 90%.

Използване на обучения модел

Вече сте готови да използвате този модел за разпознаване на изображението на всяко ново изображение на цвете. Ще използваме това изображение:

Лицето на слънчогледа е едва видимо и това е голямо предизвикателство за нашия модел:

За да получите това изображение от Wikimedia commons, използвайте wget:

$ wget https: // качване.wikimedia.org / wikipedia / commons / 2/28 / Sunflower_head_2011_G1.jpg
$ mv Sunflower_head_2011_G1.jpg tf_files / неизвестен.jpg

Запазва се като неизвестен.jpg под tf_files поддиректория.

Сега, за момента на истината, ще видим какво ще каже нашият модел за този образ.За целта извикваме image_image сценарий:

$ python -m скриптове.label_image --graph = tf_files / преквалифициран_граф.pb --
image = tf_files / неизвестен.jpg

Ще получите изход, подобен на този:

Числата до вида цвете представляват вероятността нашето неизвестно изображение да принадлежи към тази категория. Например е 98.04% са сигурни, че изображението е на слънчоглед и е само 1.37% шанс това да е роза.

Заключение

Дори и с много посредствени изчислителни ресурси, виждаме зашеметяваща точност при идентифицирането на изображения. Това ясно демонстрира мощта и гъвкавостта на TensorFlow.

От тук нататък можете да започнете да експериментирате с различни други видове входове или да опитате да започнете да пишете свое собствено приложение, използвайки Python и TensorFlow. Ако искате да знаете малко по-добре вътрешната работа на машинното обучение, ето интерактивен начин да го направите.

Урок за OpenTTD
OpenTTD е една от най-популярните бизнес симулационни игри там. В тази игра трябва да създадете прекрасен транспортен бизнес. Въпреки това, ще започне...
SuperTuxKart за Linux
SuperTuxKart е страхотно заглавие, създадено да ви предостави безплатно изживяването на Mario Kart във вашата Linux система. Играта е доста предизвика...
Урок за битка за Уеснот
Битката за Уеснот е една от най-популярните стратегически игри с отворен код, които можете да играете по това време. Тази игра не само се разработва о...