Свеукупно, обрадићемо три главне теме у овој лекцији:
- Шта су Тенсори и ТенсорФлов
- Примена МЛ алгоритама са ТенсорФлов-ом
- Случајеви употребе ТенсорФлов
ТенсорФлов је одличан Гооглеов пакет Питхон који добро користи парадигму програмирања тока података за високо оптимизоване математичке прорачуне. Неке од карактеристика ТенсорФлов-а су:
- Дистрибуирана рачунарска способност која олакшава управљање подацима у великим скуповима
- Подршка за дубоко учење и неуронске мреже је добра
- Веома ефикасно управља сложеним математичким структурама попут н-димензионалних низова
Због свих ових карактеристика и опсега алгоритама машинског учења, које ТенсорФлов примењује, чини га библиотеком производних скала. Заронимо у концепте у ТенсорФлов-у како бисмо одмах након тога могли запрљати руке кодом.
Инсталирање ТенсорФлов-а
Како ћемо користити Питхон АПИ за ТенсорФлов, добро је знати да он функционише са оба Питхон 2.7 и 3.3+ верзије. Инсталирајмо ТенсорФлов библиотеку пре него што пређемо на стварне примере и концепте. Постоје два начина за инсталирање овог пакета. Први укључује употребу Питхон менаџера пакета, пип:
пип инсталл тенсорфловДруги начин се односи на Анацонду, пакет можемо инсталирати као:
цонда инсталл -ц цонда-форге тенсорфловСлободно потражите верзије ноћних верзија и верзије ГПУ-а на званичним страницама за инсталацију ТенсорФлов-а.
Користићу менаџер Анацонде за све примере у овој лекцији. Покренућу Јупитер Нотебоок за исти:
Сад кад смо спремни да са свим наредбама за увоз напишемо неки код, почнимо да зарањамо у СциПи пакет са неколико практичних примера.
Шта су тензори?
Тензори су основне структуре података које се користе у програму Тенсорфлов. Да, они су само начин за представљање података у дубоком учењу. Замислимо их овде:
Као што је описано на слици, тензори се могу назвати н-димензионалним низом што нам омогућава да податке представљамо у сложеним димензијама. Сваку димензију можемо сматрати различитом особином података у дубоком учењу. То значи да тензори могу да постану прилично сложени када је реч о сложеним скуповима података са пуно карактеристика.
Једном када знамо шта су тензори, мислим да је прилично лако извести шта се дешава у ТенсорФлов-у. Ти појмови значе како тензори или карактеристике могу тећи у скуповима података да би произвели драгоцене резултате док на њему радимо разне операције.
Разумевање ТенсорФлов-а са константама
Баш као што смо прочитали горе, ТенсорФлов нам омогућава да изводимо алгоритме машинског учења на Тенсорима како бисмо произвели драгоцене резултате. Уз ТенсорФлов, дизајнирање и обука модела дубоког учења је директно напред.
ТенсорФлов долази са зградом Рачунски графикони. Графикони израчунавања су графикони протока података у којима су математичке операције представљене као чворови, а подаци су представљени као ивице између тих чворова. Напишимо врло једноставан исечак кода како бисмо пружили конкретну визуализацију:
увоз тенсорфлов као тфк = тф.константан (5)
и = тф.константан (6)
з = к * и
испис (з)
Када покренемо овај пример, видећемо следећи излаз:
Зашто је множење погрешно? То није било оно што смо очекивали. То се догодило јер тако не можемо обављати операције са ТенсорФлов-ом. Прво, морамо започети а седница да би рачунски граф функционисао,
Са Сессионс можемо инкапсулирати контрола рада и стања тензора. То значи да сесија такође може да ускладишти резултат рачунарског графа тако да тај резултат може проследити следећој операцији по редоследу извршавања цевовода. Створимо сесију сада да бисмо добили тачан резултат:
# Почните са објектом сесијесесија = тф.Седница()
# Обезбедите израчунавање за сесију и сачувајте га
резултат = сесија.трчање (з)
# Одштампајте резултат израчунавања
испис (резултат)
# Затвори сесију
седница.Близу()
Овог пута смо добили сесију и пружили јој израчунавање потребно за покретање на чворовима. Када покренемо овај пример, видећемо следећи излаз:
Иако смо добили упозорење од ТенсорФлов-а, ипак смо добили тачан излаз из израчунавања.
Операције тензора са једним елементом
Баш као и оно што смо помножили са два константна тензора у прошлом примеру, и у ТенсорФлов-у имамо много других операција које се могу изводити на појединачним елементима:
- додати
- одузети
- умножити
- див
- мод
- абс
- негативан
- знак
- квадрат
- округли
- скрт
- прах
- екп
- Пријава
- максимум
- минимум
- цос
- грех
Операције са једним елементом значе да ће се чак и када наведете низ извршити на сваком елементу тог низа. На пример:
увоз тенсорфлов као тфувоз нумпи као нп
тензор = нп.низ ([2, 5, 8])
тензор = тф.цонверт_то_тенсор (тензор, дтипе = тф.флоат64)
са тф.Сесија () као сесија:
испис (сесија.трчање (тф.цос (тензор)))
Када покренемо овај пример, видећемо следећи излаз:
Овде смо разумели два важна појма:
- Било који НумПи низ може се лако претворити у тензор помоћу функције цонверт_то_тенсор
- Операција је изведена на сваком елементу низа НумПи
Резервисачи и променљиве
У једном од претходних одељака погледали смо како можемо да користимо константе Тенсорфлов-а за прављење рачунских графова. Али ТенсорФлов такође нам омогућава да уносимо улазе у току, тако да графикон израчунавања може бити динамичан по својој природи. То је могуће уз помоћ чувара места и променљивих.
У ствари, чувари места не садрже никакве податке и морају имати ваљане уносе током извођења и, као што се очекивало, без уноса, генерисаће грешку.
Резервисање се може назвати договором на графикону који ће сигурно пружити улаз током извођења. Ево примера чувара места:
увоз тенсорфлов као тф# Два резервисана места
к = тф. резервирано место (тф.флоат32)
и = тф. резервирано место (тф.флоат32)
# Додељивање операције множења в.р.т. а & б да чвор мул
з = к * и
# Креирајте сесију
сесија = тф.Седница()
# Пролазне вредности за плацехоллдерс
резултат = сесија.трчање (з, к: [2, 5], и: [3, 7])
принт ('Множење к и и:', резултат)
Када покренемо овај пример, видећемо следећи излаз:
Сад кад имамо знање о чуварима места, окренимо поглед према променљивим. Знамо да се излаз једначине може променити за исти скуп улаза током времена. Дакле, када обучимо нашу варијаблу модела, она временом може променити своје понашање. У овом сценарију, променљива нам омогућава да додамо ове параметре који се могу обучити у наш рачунски граф. Варијабла се може дефинисати на следећи начин:
к = тф.Променљива ([5.2], дтипе = тф.флоат32)У горњој једначини к је променљива којој је дата почетна вредност и тип података. Ако не доставимо тип података, ТенсорФлов ће закључити са његовом почетном вредношћу. Овде погледајте врсте података ТенсорФлов.
За разлику од константе, морамо да позовемо Питхон функцију да иницијализујемо све променљиве графа:
инит = тф.глобал_вариаблес_инитиализер ()седница.покрените (инит)
Обавезно покрените горњу функцију ТенсорФлов пре него што искористимо наш графикон.
Линеарна регресија са ТенсорФлов-ом
Линеарна регресија један је од најчешћих алгоритама који се користи за успостављање односа у датим континуираним подацима. Овај однос између координатних тачака, рецимо к и и, назива се а хипотеза. Када говоримо о Линеарној регресији, хипотеза је равна линија:
и = мк + цОвде је м нагиб праве, а овде вектор који представља тегова. ц је константни коефицијент (пресек и) и овде представља Склоност. Тежина и пристрасност се називају параметри модела.
Линеарне регресије омогућавају нам да проценимо вредности тежине и пристрасности тако да имамо минимум функција трошкова. Коначно, к је независна променљива у једначини, а и зависна променљива. Почнимо сада да градимо линеарни модел у ТенсорФлов-у помоћу једноставног исечка кода који ћемо објаснити:
увоз тенсорфлов као тф# Променљиве за нагиб параметра (В) са почетном вредношћу 1.1
В = тф.Променљива ([1.1], тф.флоат32)
# Променљива за пристрасност (б) са почетном вредношћу -1.1
б = тф.Променљива ([- 1.1], тф.флоат32)
# Резервисари за пружање улазних података или независне променљиве, означени са к
к = тф.резервирано место (тф.флоат32)
# Једначина праве или линеарна регресија
линеарни_модел = Ш * к + б
# Иницијализација свих променљивих
сесија = тф.Седница()
инит = тф.глобал_вариаблес_инитиализер ()
седница.покрените (инит)
# Извршити регресиони модел
испис (сесија.трчање (линеарни_модел к: [2, 5, 7, 9])))
Ево, урадили смо управо оно што смо раније објаснили, хајде да резимирамо овде:
- Почели смо увозом ТенсорФлов-а у нашу скрипту
- Направите неке променљиве које ће представљати тежину вектора и пристраност параметра
- Резервисано место ће бити потребно за представљање улаза, к
- Представљају линеарни модел
- Иницијализујте све вредности потребне за модел
Када покренемо овај пример, видећемо следећи излаз:
Једноставни исечак кода само пружа основну идеју о томе како можемо изградити регресијски модел. Али још увек морамо учинити још неколико корака да бисмо довршили модел који смо изградили:
- Морамо учинити наш модел самооспособљивим како би могао произвести излаз за било који дати улаз
- Морамо потврдити излаз који пружа модел упоређивањем са очекиваним излазом за дати к
Функција губитка и валидација модела
Да бисмо потврдили модел, треба да имамо меру колика је одступања тренутне излазне снаге од очекиване. Постоје разне функције губитака које се овде могу користити за валидацију, али погледаћемо једну од најчешћих метода, Збир грешке квадрата или ССЕ.
Једначина за ССЕ дата је као:
Е = 1/2 * (т - и) 2Овде:
- Е = средња квадратна грешка
- т = Примљени излаз
- и = очекивани излаз
- т - и = грешка
Хајде да сада напишемо исечак кода континуирано до последњег исечка да одражава вредност губитка:
и = тф.резервирано место (тф.флоат32)грешка = линеарни_модел - год
квадратне_грешке = тф.квадрат (грешка)
губитак = тф.смањити_сум (квадратне_погрешке)
испис (сесија.трчање (губитак, к: [2, 5, 7, 9], и: [2, 4, 6, 8]))
Када покренемо овај пример, видећемо следећи излаз:
Јасно је да је вредност губитка врло ниска за дати модел линеарне регресије.
Закључак
У овој лекцији смо погледали један од најпопуларнијих пакета за дубоко учење и машинско учење, ТенсорФлов. Такође смо направили модел линеарне регресије који је имао врло високу тачност.