„TensorFlow“ rado didžiulį naudojimąsi mašininio mokymosi srityje būtent todėl, kad mašininis mokymasis apima daugybę skaičių ir yra naudojamas kaip apibendrinta problemų sprendimo technika. Nors su juo bendrausime naudodami „Python“, jis turi kitų kalbų, pvz., „Go“, „Node“, sąsajas.js ir net C #.
„Tensorflow“ yra tarsi juoda dėžutė, slepianti visas matematines subtilybes, o kūrėjas tiesiog iškviečia tinkamas funkcijas problemai išspręsti. Bet kokia problema?
Mašinų mokymasis (ML)
Tarkime, kad jūs projektuojate botą žaisti šachmatais. Dėl šachmatų sukūrimo būdo, figūrų judėjimo būdo ir tiksliai apibrėžto žaidimo tikslo yra visai įmanoma parašyti programą, kuri žaistų šį žaidimą nepaprastai gerai. Tiesą sakant, tai šachmatais pergudrautų visą žmoniją. Jis tiksliai žinotų, kokį žingsnį reikia atlikti, atsižvelgiant į visų lentos dalių būklę.
Tačiau tokia programa gali žaisti tik šachmatais. Žaidimo taisyklės yra įtrauktos į kodo logiką, ir viskas, ką programa daro, yra ta logika vykdoma griežtai ir tiksliau nei bet kuris žmogus galėtų. Tai nėra bendros paskirties algoritmas, kurį galite naudoti kurdami bet kurį žaidimo robotą.
Mokantis mašinomis, paradigma keičiasi ir algoritmai tampa vis labiau bendro naudojimo.
Idėja yra paprasta, ji prasideda apibrėžiant klasifikavimo problemą. Pavyzdžiui, norite automatizuoti vorų rūšių nustatymo procesą. Jums žinomos rūšys yra įvairios klasės (nereikia painioti su taksonominėmis klasėmis), o algoritmo tikslas yra surūšiuoti naują nežinomą vaizdą į vieną iš šių klasių.
Pirmas žmogaus žingsnis būtų nustatyti įvairių atskirų vorų ypatybes. Pateiksime duomenis apie atskirų vorų ilgį, plotį, kūno masę ir spalvą bei rūšis, kurioms jie priklauso:
Ilgis | Plotis | Mišios | Spalva | Tekstūra | Rūšis |
5 | 3 | 12 | Ruda | lygus | Tėtuko ilgos kojos |
10 | 8 | 28 | Ruda-juoda | plaukuotas | Tarantula |
Didelė tokių individualių vorinių duomenų kolekcija bus naudojama algoritmui „mokyti“, o kitas panašus duomenų rinkinys bus naudojamas algoritmui išbandyti, kad pamatytumėte, kaip gerai jis veikia prieš naują informaciją, su kuria dar niekada nebuvo susidūręs, bet kurią mes jau žinome atsakymas į.
Algoritmas bus paleistas atsitiktiniu būdu. Tai reiškia, kad kiekvienas voras, neatsižvelgiant į jo ypatybes, būtų priskirtas bet kuriai rūšiai. Jei mūsų duomenų rinkinyje yra 10 skirtingų rūšių, šiam naiviam algoritmui dėl vien tik sėkmės būtų suteikta teisinga klasifikacija maždaug 1/10 laiko.
Bet tada mašininio mokymosi aspektas pradėtų viršų. Tai pradėtų susieti tam tikrus bruožus su tam tikru rezultatu. Pavyzdžiui, plaukuoti vorai greičiausiai yra tarantulai, taip pat ir didesni vorai. Taigi, kai pasirodys naujas didelis ir plaukuotas voras, jam bus suteikta didesnė tikimybė būti tarantulu. Atkreipkite dėmesį, mes vis dar dirbame su tikimybėmis, taip yra todėl, kad mes savaime dirbame su tikimybiniu algoritmu.
Mokymosi dalis veikia keičiant tikimybes. Iš pradžių algoritmas prasideda atsitiktinai priskiriant „rūšies“ etiketes asmenims, darant atsitiktines koreliacijas, tokias kaip „plaukuotas“ ir „tėtis ilgomis kojomis“. Kai ji daro tokią koreliaciją ir atrodo, kad mokymo duomenų rinkinys su ja nesutinka, ši prielaida atmetama.
Panašiai, kai koreliacija gerai veikia per kelis pavyzdžius, ji kaskart stiprėja. Šis suklupimo tiesos metodas yra nepaprastai efektyvus dėl daugybės matematinių subtilybių, dėl kurių jūs, kaip pradedantysis, nenorėtumėte jaudintis.
„TensorFlow“ ir mokykite savo gėlių klasifikatorių
„TensorFlow“ dar labiau pristato mokymąsi mašinomis. Ankstesniame pavyzdyje jūs buvote atsakingas už savybių, išskiriančių vieną vorų rūšį nuo kitos, nustatymą. Turėjome kruopščiai išmatuoti atskirus vorus ir sukurti šimtus tokių įrašų.
Bet mes galime padaryti geriau, pateikdami algoritmui tik neapdorotus vaizdo duomenis, galime leisti algoritmui rasti modelius ir suprasti įvairius dalykus apie vaizdą, pavyzdžiui, atpažinti paveikslėlyje esančias formas, tada suprasti, kokia yra skirtingų paviršių tekstūra, spalva , Ir taip toliau. Tai yra kompiuterio regėjimo pradžios samprata, kurią galite naudoti ir kitokio tipo įvestims, pvz., Garso signalams ir balso atpažinimo algoritmo mokymui. Visa tai patenka į „gilaus mokymosi“ terminą, kai mašininis mokymasis perkeliamas į loginį kraštutinumą.
Tada šis apibendrintas sąvokų rinkinys gali būti specializuotas, kai reikia nagrinėti daugybę gėlių vaizdų ir juos suskirstyti į kategorijas.
Žemiau pateiktame pavyzdyje naudosime „Python2“.7 sąsajos su „TensorFlow“ sąsaja ir „TensorFlow“ įdiegsime naudodami „pip“ (ne „pip3“). „Python 3“ palaikymas vis dar yra šiek tiek klaidingas.
Norėdami sukurti savo vaizdų klasifikatorių, pirmiausia naudokitės „TensorFlow“ pip:
$ pip įdiegti tensorflowToliau turime klonuoti tensorflow-poetams-2 „git“ saugykla. Tai yra tikrai gera vieta pradėti dėl dviejų priežasčių:
- Tai paprasta ir paprasta naudoti
- Tai yra iš anksto apmokyta iki tam tikro laipsnio. Pavyzdžiui, gėlių klasifikatorius jau yra išmokytas suprasti, kokią tekstūrą jis žiūri ir į kokias formas, todėl skaičiavimais jis yra mažiau intensyvus.
Įsigykime saugyklą:
$ git klonas https: // github.com / googlecodelabs / tensorflow-poetams-2$ cd „tensorflow“ poetams-2
Tai bus mūsų darbo katalogas, todėl nuo šiol visos komandos turėtų būti išleistos iš jo.
Mes vis tiek turime išmokyti algoritmą konkrečiai gėlių atpažinimo problemai, tam mums reikia mokymo duomenų, todėl sužinokime:
$ curl http: // atsisiųsti.tensorflow.org / example_images / flower_photos.tgz| degutas xz -C tf_files
Katalogas… ./tensorflow-for-poet-2 / tf_files yra daugybė šių vaizdų, tinkamai paženklintų ir paruoštų naudoti. Vaizdai bus skirti dviem skirtingiems tikslams:
- ML programos mokymas
- ML programos testavimas
Galite patikrinti aplanko turinį tf_files ir čia rasite, kad mes susiauriname tik iki 5 gėlių kategorijų, ty ramunėlių, tulpių, saulėgrąžų, kiaulpienių ir rožių.
Mokyti modelį
Mokymo procesą galite pradėti pirmiausia nustatydami šias konstantas, kad pakeistumėte visų įvesties vaizdų dydį į standartinį dydį, ir naudodami lengvą mobilenet architektūrą:
$ IMAGE_SIZE = 224$ ARCHITECTURE = "mobilenet_0.50 _ $ IMAGE_SIZE "
Tada paleiskite komandą python scenarijų:
$ python -m scenarijai.perkvalifikuoti \--butelio kaklelio_dir = tf_files / buteliukai \
--how_many_training_steps = 500 \
--model_dir = tf_files / models / \
--summaries_dir = tf_files / training_summaries / "$ ARCHITECTURE" \
--output_graph = tf_files / perkvalifikuota_graph.pb \
--output_labels = tf_files / perkvalifikuotos etiketės.txt \
--architektūra = "$ ARCHITECTURE" \
--image_dir = tf_files / flower_photos
Nors čia yra daugybė parinkčių, dauguma jų nurodo jūsų įvesties duomenų katalogus ir iteracijos skaičių, taip pat išvesties failus, kuriuose būtų saugoma informacija apie naują modelį. Tai neturėtų užtrukti ilgiau nei 20 minučių, kad veiktų vidutiniškai nešiojamu kompiuteriu.
Kai scenarijus baigs mokymą ir testavimą, gausite apmokyto modelio tikslumą, kuris mūsų atveju buvo šiek tiek didesnis nei 90%.
Naudojant apmokytą modelį
Dabar esate pasirengę naudoti šį modelį atpažindami bet kokį naują gėlės vaizdą. Mes naudosime šį vaizdą:
Saulėgrąžos veidas yra vos matomas, ir tai yra didelis iššūkis mūsų modeliui:
Norėdami gauti šį vaizdą iš „Wikimedia“ bendrų vietų, naudokite „wget“:
$ wget https: // įkelti.wikimedia.org / wikipedia / commons / 2/28 / Saulėgrąžų_galva_2011_G1.JPG$ mv Saulėgrąžos_galva_2011_G1.JPG tf_files / nežinoma.JPG
Jis išsaugomas kaip nežinoma.JPG pagal tf_files pakatalogis.
Tiesos akimirką pamatysime, ką mūsų modelis sako apie šį vaizdą.Norėdami tai padaryti, mes pasitelkiame label_image scenarijus:
$ python -m scenarijai.label_image --graph = tf_files / perkvalifikuota_graph.pb --image = tf_files / nežinoma.JPG
Jūs gautumėte panašų išėjimą:
Skaičiai šalia gėlių tipo rodo tikimybę, kad mūsų nežinomas vaizdas priklauso tai kategorijai. Pavyzdžiui, tai 98.04% įsitikinę, kad saulėgrąžos vaizdas yra tik 1.37% tikimybė, kad tai bus rožė.
Išvada
Net turėdami labai vidutinius skaičiavimo išteklius, matome stulbinantį vaizdų identifikavimo tikslumą. Tai aiškiai parodo „TensorFlow“ galią ir lankstumą.
Nuo šiol galite pradėti eksperimentuoti su įvairiais kitais įvestimis arba pabandyti pradėti rašyti savo skirtingą programą naudodami „Python“ ir „TensorFlow“. Jei norite šiek tiek geriau sužinoti apie mašininio mokymosi vidinį darbą, tai galite atlikti interaktyviu būdu.