Дата Сциенце

Водич за ПиТорцх са линеарном регресијом

Водич за ПиТорцх са линеарном регресијом
ПиТорцх је научни пакет заснован на Питхону који пружа замену НумПи ндрараис-а као тензора који искориштава максималне предности ГПУ-а. Још једна позитивна тачка око ПиТорцх оквира је брзина и флексибилност коју пружа током рачунарства. ПиТорцх је ефикасна алтернатива за рад са тензорима користећи Тенсорфлов о којем смо раније проучавали.

ПиТорцх има неколико великих предности као рачунски пакет, као што су:

ПиТорцх је углавном прихваћен од стране Дата Сциенце заједнице због његове способности да прикладно дефинише неуронске мреже. Погледајмо овај рачунски пакет на делу у овој лекцији.

Инсталирање ПиТорцх-а

Само напомену пре почетка, за ову лекцију можете користити виртуелно окружење које можемо направити следећом командом:

питхон -м виртуаленв питорцх
извор питорцх / бин / ацтивате

Једном када је виртуелно окружење активно, можете инсталирати ПиТорцх библиотеку унутар виртуелне енв тако да се могу извршити примери које следећи креирамо:

пип инсталирај питорцх

У овој лекцији ћемо користити Анаконду и Јупитер. Ако га желите инсталирати на машину, погледајте лекцију која описује „Како инсталирати Анацонда Питхон на Убунту 18.04 ЛТС “и поделите своје повратне информације ако се суочите са било којим проблемом. Да бисте инсталирали ПиТорцх са Анацондом, користите следећу наредбу у терминалу из Анацонде:

цонда инсталл -ц питорцх питорцх

Нешто слично видимо када извршимо горњу команду:

Једном када су сви потребни пакети инсталирани и готови, можемо почети са коришћењем ПиТорцх библиотеке са следећом изјавом о увозу:

увозна бакља

Кренимо са основним примерима ПиТорцх-а сада када смо инсталирали пакете са предусловима.

Први кораци са ПиТорцх-ом

Као што знамо да неуронске мреже могу бити фундаментално структуриране како су тензори и ПиТорцх изграђени око тензора, тенденција је да се значајно повећају перформансе. Започећемо са ПиТорцх-ом тако што ћемо прво испитати врсту тензора које пружа. Да бисте започели са овим, увезите потребне пакете:

увозна бакља

Даље, можемо дефинисати неиницијализовани тензор дефинисане величине:

к = бакља.празно (4, 4)
принт ("Тип низа: ".формат (к.врста)) # врста
принт ("Облик низа: ".формат (к.облик)) # облик
испис (к)

Нешто слично видимо када извршимо горњу скрипту:

Управо смо направили неиницијализовани тензор дефинисане величине у горњој скрипти. Да поновимо нашу лекцију Тенсорфлов-а, тензори се могу назвати н-димензионалним низом што нам омогућава да податке представљамо у сложеним димензијама.

Покренимо још један пример где иницијализујемо Торцхед тензор са случајним вредностима:

рандом_тенсор = бакља.ранд (5, 4)
испис (рандом_тенсор)

Када покренемо горњи код, видећемо одштампани случајни тензорски објекат:

Имајте на уму да излаз за горњи насумични тензор може бити другачији за вас јер је он случајан !

Конверзија између НумПи и ПиТорцх

НумПи и ПиТорцх су у потпуности међусобно компатибилни. Због тога је лако трансформисати НумПи низове у тензоре и обрнуто. Поред лакоће коју пружа АПИ, вероватно је лакше визуализовати тензоре у облику НумПи низова уместо Тензора, или то једноставно назвати мојом љубави према НумПи!

На пример, увешћемо НумПи у нашу скрипту и дефинисати једноставан случајни низ:

увоз нумпи као нп
низ = нп.случајни.ранд (4, 3)
трансформирани_тензор = бакља.фром_нумпи (низ)
испис (" \ н".формат (трансформирани_тензор))

Када покренемо горњи код, видећемо одштампани трансформисани објект тензора:

Покушајмо сада да претворимо овај тензор у НумПи низ:

нумпи_арр = трансформисани_тензор.нумпи ()
испис (" \ н".формат (тип (нумпи_арр), нумпи_арр))

Када покренемо горњи код, видећемо штампани трансформисани низ НумПи:

Ако пажљиво погледамо, чак се и прецизност конверзије одржава док се низ претвара у тензор, а затим враћа у НумПи низ.

Операције тензора

Пре него што започнемо дискусију о неуронским мрежама, требали бисмо знати операције које се могу изводити на тензорима током тренинга неуронских мрежа. Такође ћемо у великој мери користити НумПи модул.

Резање тензора

Већ смо гледали како да направимо нови Тенсор, направимо га сада и кришка то:

вектор = бакља.тензор ([1, 2, 3, 4, 5, 6])
испис (вектор [1: 4])

Изнад исечка кода пружиће нам следећи излаз:

тензор ([2, 3, 4])

Можемо занемарити последњи индекс:

испис (вектор [1:])

Вратићемо и оно што се очекује са Питхон листом:

тензор ([2, 3, 4, 5, 6])

Израда плутајућег тензора

Направимо сада плутајући тензор:

флоат_вецтор = бакља.ФлоатТенсор ([1, 2, 3, 4, 5, 6])
принт (флоат_вецтор)

Изнад исечка кода пружиће нам следећи излаз:

тензор ([1., 2., 3., 4., 5., 6.])

Тип овог тензора биће:

принт (флоат_вецтор.дтипе)

Враћа:

бакља.флоат32

Аритметичке операције на тензорима

Можемо додати два тензора као и било који математички елемент, попут:

тензор_1 = бакља.тензор ([2, 3, 4])
тензор_2 = бакља.тензор ([3, 4, 5])
тензор_1 + тензор_2

Горњи исечак кода ће нам дати:

Ми Можемо умножити тензор са скаларом:

тензор_1 * 5

Ово ће нам дати:

Можемо да изведемо а тачкасти производ између два тензора такође:

д_продуцт = бакља.тачка (тензор_1, тензор_2)
д_продуцт

Изнад исечка кода пружиће нам следећи излаз:

У следећем одељку ћемо размотрити вишу димензију тензора и матрица.

Множење матрице

У овом одељку видећемо како метрику можемо дефинисати као тензоре и помножити их, баш као што смо то радили у средњошколској математици.

Дефинисаћемо матрицу за почетак:

матрица = бакља.тензор ([1, 3, 5, 6, 8, 0]).поглед (2, 3)

У горњем исечку кода дефинисали смо матрицу са функцијом тензора, а затим назначили са функција прегледа да то треба направити као дводимензионални тензор са 2 реда и 3 колоне. Можемо пружити више аргумената поглед функција за одређивање више димензија. Само имајте на уму да:

број редова помножен са бројем колона = број предмета

Када визуализујемо горњи дводимензионални тензор, видећемо следећу матрицу:

Дефинисаћемо још једну идентичну матрицу другачијег облика:

матрик_б = бакља.тензор ([1, 3, 5, 6, 8, 0]).поглед (3, 2)

Сада коначно можемо извршити множење:

бакља.матмул (матрица, матрица_б)

Изнад исечка кода пружиће нам следећи излаз:

Линеарна регресија са ПиТорцх-ом

Линеарна регресија је алгоритам машинског учења заснован на надзираним техникама учења за вршење регресионе анализе на независној и зависној променљивој. Већ збуњен? Дефинишемо линеарну регресију једноставним речима.

Линеарна регресија је техника којом се утврђује веза између две променљиве и предвиђа колика промена у независној променљивој узрокује колике промене у зависној променљивој. На пример, алгоритам линеарне регресије може се применити да би се утврдило колико се цена повећава за кућу када се њена површина повећа за одређену вредност. Или, колико коњских снага има аутомобил на основу његове тежине мотора. Други пример може звучати чудно, али увек можете покушати чудне ствари и ко зна да можете успоставити везу између ових параметара помоћу Линеарне регресије!

Техника линеарне регресије обично користи једначину праве да представи однос између зависне променљиве (и) и независне променљиве (к):

и = м * к + ц

У горњој једначини:

Сада када имамо једначину која представља однос нашег случаја употребе, покушаћемо да поставимо неке узорке података заједно са визуелизацијом парцеле. Ево примера података о ценама кућа и њиховим величинама:

низ_цена_куца = [3, 4, 5, 6, 7, 8, 9]
хоусе_прице_нп = нп.низ (кућа_цене_ низ, дтипе = нп.флоат32)
хоусе_прице_нп = хоусе_прице_нп.преобликовати (-1,1)
хоусе_прице_тенсор = Променљива (бакља.фром_нумпи (кућа_цена_нп))
величина_ куће = [7.5, 7, 6.5, 6.0, 5.5, 5.0, 4.5]
хоусе_сизе_нп = нп.низ (величина_ куће, дтипе = нп.флоат32)
хоусе_сизе_нп = хоусе_сизе_нп.преобликовати (-1, 1)
хоусе_сизе_тенсор = Променљива (бакља.фром_нумпи (хоусе_сизе_нп))
# омогућава визуализацију наших података
импорт матплотлиб.пиплот као плт
плт.расејање (кућа_цене_ низ, кућа_величина_нп)
плт.клабел ("Цена куће $")
плт.илабел ("Величине кућа")
плт.наслов ("Цена куће $ ВС величина куће")
плт

Имајте на уму да смо користили Матплотлиб који је одлична библиотека за визуализацију. Прочитајте више о томе у Матплотлиб водичу. Видећемо следећу графику када покренемо горњи исечак кода:

Када направимо линију кроз тачке, она можда неће бити савршена, али је ипак довољна за однос који варијабле имају. Сада када смо прикупили и визуализирали наше податке, желимо да предвидимо која ће бити величина куће ако је продата за 650.000 америчких долара.

Циљ примене линеарне регресије је пронаћи линију која одговара нашим подацима са минималном грешком. Овде су кораци које ћемо извршити за примену алгоритма линеарне регресије према нашим подацима:

  1. Направите класу за Линеарну регресију
  2. Дефинишите модел из ове класе линеарне регресије
  3. Израчунајте МСЕ (средња квадратна грешка)
  4. Извршите оптимизацију да бисте смањили грешку (СГД и.е. стохастички градијентни спуст)
  5. Извршите повратно размножавање
  6. На крају, направите предвиђање

Почнимо са применом горњих корака са тачним увозом:

увозна бакља
од бакље.аутоград увоз променљива
увозна бакља.нн као нн

Даље, можемо дефинисати нашу класу линеарне регресије која наслеђује од ПиТорцх модула неуронске мреже:

класа ЛинеарРегрессион (нн.Модул):
деф __инит __ (самостално, величина_вода, величина_излаза):
# супер функција наслеђује од нн.Модул тако да можемо приступити свему са нн.Модул
супер (Линеарна регресија, само).__у томе__()
# Линеарна функција
себе.линеарно = нн.Линеарно (инпут_дим, оутпут_дим)
деф напред (селф, к):
вратити се.линеарно (к)

Сада када смо спремни за класу, дефинишемо наш модел са улазном и излазном величином 1:

инпут_дим = 1
оутпут_дим = 1
модел = Линеарна регресија (инпут_дим, оутпут_дим)

МСЕ можемо дефинисати као:

мсе = нн.МСЕЛосс ()

Спремни смо да дефинишемо оптимизацију која се може извршити на предвиђању модела за најбоље перформансе:

# Оптимизација (пронађите параметре који минимизирају грешке)
стопа_учења = 0.02
оптимизер = бакља.опт.СГД (модел.параметри (), лр = брзина_учења)

Напокон можемо да направимо графикон за функцију губитка на нашем моделу:

списак губитака = []
број_ итерације = 1001
за итерацију у опсегу (итератион_нумбер):
# извршити оптимизацију са нултим градијентом
оптимизер.зеро_град ()
резултати = модел (кућа_цена_тензор)
губитак = мсе (резултати, величина_куће_тензор)
# израчунајте дериват кораком уназад
губитак.уназад()
# Ажурирање параметара
оптимизер.Корак()
# губитак у продавници
списак губитака.придодати (губитак.подаци)
# губитак штампе
иф (итерација% 50 == 0):
принт ('епоха , губитак '.формат (итерација, губитак.подаци))
плт.графикон (опсег (број итерације), списак губитака)
плт.клабел ("Број понављања")
плт.илабел ("Губитак")
плт

Извршили смо оптимизацију више пута за функцију губитка и покушали смо да визуализујемо колики се губитак повећао или смањио. Ево графикона који је резултат:

Видимо да како је број понављања већи, губитак тежи нули. То значи да смо спремни да направимо своје предвиђање и зацртамо га:

# предвидите нашу цену аутомобила
предвиђено = модел (кућа_цена_тензор).подаци.нумпи ()
плт.расејање (кућа_цене_ низ, величина_ куће, ознака = "оригинални подаци", боја = "црвена")
плт.расејање (кућна_цена_ низ, предвиђено, ознака = "предвиђени подаци", боја = "плава")
плт.Легенда ()
плт.клабел ("Цена куће $")
плт.илабел ("Величина куће")
плт.наслов („Оригинал у односу на предвиђене вредности“)
плт.Прикажи()

Ево заплета који ће нам помоћи да направимо предвиђање:

Закључак

У овој лекцији смо погледали одличан рачунски пакет који нам омогућава брже и ефикасније предвиђање и још много тога. ПиТорцх је популаран због начина на који нам омогућава управљање неуронским мрежама на основни начин помоћу Тензора.

Битка за Веснотх 1.13.6 Развој објављен
Битка за Веснотх 1.13.6 објављено прошлог месеца, шесто је развојно издање у издању 1.13.к сериес и доноси низ побољшања, посебно корисничког интерфеј...
Како инсталирати Леагуе Оф Легендс на Убунту 14.04
Ако сте љубитељ Леагуе оф Легендс, ово је прилика да тестирате Леагуе оф Легендс. Имајте на уму да је ЛОЛ подржан на ПлаиОнЛинук ако сте корисник лину...
Инсталирајте најновију ОпенРА Стратеги Гаме на Убунту Линук
ОпенРА је Либре / Фрее Реал Тиме стратешки механизам који ствара ране Вествоод игре попут класичне Цомманд & Цонкуер: Ред Алерт. Дистрибуирани модови ...