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 хранилище. Това е наистина добро място да започнете поради две причини:
- Той е прост и лесен за използване
- Той идва предварително обучен до определена степен. Например класификаторът на цветя вече е обучен да разбере каква текстура гледа и какви форми гледа, така че е изчислително по-малко интензивен.
Нека вземем хранилището:
$ 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 съдържа тон от тези изображения, надлежно етикетирани и готови за употреба. Изображенията ще бъдат с две различни цели:
- Обучение на ML програма
- Тестване на програмата 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. Ако искате да знаете малко по-добре вътрешната работа на машинното обучение, ето интерактивен начин да го направите.