Спречите прекомерно прилагођавање и повећајте тачност вашег модела машинског учења применом ТенсорФлов метода повећања података.

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

Овде ћете научити како да користите ТенсорФлов модул за повећање података да бисте диверзификовали свој скуп података. Ово ће спречити прекомерно прилагођавање генерисањем нових тачака података које се мало разликују од оригиналних података.

Пример скупа података који ћете користити

Користићете скуп података о мачкама и псима Каггле. Овај скуп података садржи приближно 3.000 слика мачака и паса. Ове слике су подељене у скупове за обуку, тестирање и валидацију.

Ознака 1.0 представља пса, док ознака 0.0 представља мачку.

Потпуни изворни код који имплементира технике повећања података и онај који није доступан у а ГитХуб спремиште.

instagram viewer

Инсталирање и увоз ТенсорФлов-а

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

Отвори Гоогле Цолаб. Промените тип времена извршавања у ГПУ. Затим извршите следећу магичну команду на првој ћелији кода да бисте инсталирали ТенсорФлов у своје окружење.

!пип инсталл тенсорфлов

Увезите ТенсорФлов и његове релевантне модуле и класе.

увоз тенсорфлов као тф
из тенсорфлов.керас.препроцессинг.имаге увоз ИмагеДатаГенератор
из тенсорфлов.керас.моделс увоз Редни
из тенсорфлов.керас.лаиерс увоз Цонв2Д, МакПоолинг2Д, Флаттен, Густо, Испадање

Тхе тенсорфлов.керас.препроцессинг.имаге ће вам омогућити да извршите повећање података на вашем скупу података.

Креирање инстанци класе ИмагеДатаГенератор

Креирајте инстанцу ИмагеДатаГенератор класе за податке о возу. Овај објекат ћете користити за претходну обраду података обуке. Он ће генерисати серије проширених података слике у реалном времену током обуке модела.

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

# дефинишемо генератор података слике за обуку
траин_датаген = ИмагеДатаГенератор (ресцале=1./255,
хоризонтал_флип=Истина,
видтх_схифт_ранге=0.2,
висина_схифт_ранге=0.2,
опсег_светлости=[0.2,1.0],
зоом_ранге=0.2)

Направите још једну инстанцу ИмагеДатаГенератор класа за податке теста. Требаће вам ресцале параметар. Он ће нормализовати вредности пиксела тестних слика тако да одговарају формату који се користи током тренинга.

# дефинишемо генератор података слике за тестирање
тест_датаген = ИмагеДатаГенератор (ресцале=1./255)

Направите коначну инстанцу ИмагеДатаГенератор класа за валидационе податке. Промена величине података за валидацију на исти начин као и података теста.

# дефинишемо генератор података слике за валидацију
валидатион_датаген = ИмагеДатаГенератор (ресцале=1./255)

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

Учитавање ваших података

Створити ДирецториИтератор објекат из директоријума обуке. То ће генерисати серије проширених слика. Затим одредите директоријум који чува податке о обуци. Промените величину слика на фиксну величину од 64к64 пиксела. Одредите број слика које ће свака серија користити. На крају, наведите врсту етикете која ће бити бинарни (тј. мачка или пас).

# дефинисање директоријума за обуку
траин_дата = траин_датаген.флов_фром_дирецтори (дирецтори=р'/цонтент/дриве/МиДриве/цатс_анд_догс_филтеред/траин',
таргет_сизе=(64, 64),
батцх_сизе=32,
цласс_моде='бинарни')

Направите другу ДирецториИтератор објекат из директоријума за тестирање. Поставите параметре на исте вредности као оне за податке о обуци.

# дефинисање директоријума за тестирање
тест_дата = тест_датаген.флов_фром_дирецтори (дирецтори='/цонтент/дриве/МиДриве/цатс_анд_догс_филтеред/тест',
таргет_сизе=(64, 64),
батцх_сизе=32,
цласс_моде='бинарни')

Направите финале ДирецториИтератор објекат из директоријума за проверу ваљаности. Параметри остају исти као и подаци за обуку и тестирање.

# дефинисање директоријума за проверу ваљаности
валидатион_дата = валидатион_датаген.флов_фром_дирецтори (дирецтори='/цонтент/дриве/МиДриве/цатс_анд_догс_филтеред/валидатион',
таргет_сизе=(64, 64),
батцх_сизе=32,
цласс_моде='бинарни')

Итератори директоријума не повећавају скупове података за валидацију и тестирање.

Дефинисање вашег модела

Дефинишите архитектуру ваше неуронске мреже. Користи Конволуциона неуронска мрежа (ЦНН). ЦНН су дизајнирани да препознају обрасце и карактеристике на сликама.

модел = Секуентиал()

# конволуцијски слој са 32 филтера величине 3к3
модел.адд (Цонв2Д(32, (3, 3), активација='релу', инпут_схапе=(64, 64, 3)))

# максимални слој за обједињавање са величином базена 2к2
модел.адд (МакПоолинг2Д(поол_сизе=(2, 2)))

# конволуцијски слој са 64 филтера величине 3к3
модел.адд (Цонв2Д(64, (3, 3), активација='релу'))

# максимални слој за обједињавање са величином базена 2к2
модел.адд (МакПоолинг2Д(поол_сизе=(2, 2)))

# поравнајте излаз из конволуционих и обједињених слојева
модел.адд (Флаттен())

# потпуно повезан слој са 128 јединица и РеЛУ активацијом
модел.адд (Густо(128, активација='релу'))

# насумично испусти 50% јединица да спречи преоптерећење
модел.адд (Отпусти(0.5))

# излазни слој са сигмоидном активацијом (бинарна класификација)
модел.адд (Густо(1, активација='сигмоидни'))

Компилирајте модел користећи бинарни систем унакрсна ентропија функција губитка. Проблеми бинарне класификације обично користе Ит. За оптимизатор користите Адам оптимизатор. То је адаптивни алгоритам за оптимизацију брзине учења. На крају, процените модел у смислу тачности.

модел.цомпиле (губитак='бинари_цроссентропи', оптимизер='адам', метрицс=['тачност'])

Одштампајте резиме архитектуре модела на конзоли.

модел.суммари()

Следећи снимак екрана приказује визуелизацију архитектуре модела.

Ово вам даје преглед како изгледа дизајн вашег модела.

Обучите свој модел

Обучите модел користећи фит() методом. Подесите број корака по епохи да буде број узорака за обуку подељен са батцх_сизе. Такође, подесите податке за валидацију и број корака валидације.

# Обучите модел на подацима о обуци
историја = модел.фит (подаци_воза,
степс_пер_епоцх=траин_дата.н // траин_дата.батцх_сизе,
епохе=50,
валидатион_дата=валидатион_дата,
валидатион_степс=валидатион_дата.н // валидатион_дата.батцх_сизе)

Тхе ИмагеДатаГенератор класа примењује повећање података на податке о обуци у реалном времену. Ово чини процес обуке модела споријим.

Процена вашег модела

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

тест_лосс, тест_ацц = модел.евалуате (тест_дата,
степс=тест_дата.н // тест_дата.батцх_сизе)
штампа (ф'Губитак теста: {тест_лосс}')
штампа (ф'Тачност теста: {тест_ацц}')

Следећи снимак екрана приказује перформансе модела.

Модел ради прилично добро на никада виђеним подацима.

Када покренете код који не примењује технике повећања података, тачност обуке модела је 1. Што значи да се превише уклапа. Такође лоше ради на подацима које никада раније није видео. То је зато што учи о посебностима скупа података.

Када повећање података није од помоћи?

  • Када је скуп података већ разноврстан и велики: Повећање података повећава величину и разноликост скупа података. Ако је скуп података већ велики и разноврстан, повећање података неће бити корисно.
  • Када је скуп података премали: Повећање података не може да креира нове карактеристике које нису присутне у оригиналном скупу података. Због тога не може да надокнади мали скуп података којем недостаје већина функција које модел захтева да научи.
  • Када је врста увећања података неприкладна: На пример, ротирање слика можда неће бити од помоћи тамо где је оријентација објеката важна.

За шта је ТенсорФлов способан

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