Getting Started with Python & Turi CreateWritten by Audrey Tam & Matthijs Hollemans
Congratulations! If you’ve made it this far, you’ve developed a strong foundation for absorbing machine learning material. However, before we can move forward, we need to address the 10,000 pound snake in the room… Python. Until this point, you’ve made do with Xcode and Swift, however, if you’re going to get serious about Machine Learning, then it’s best you prepare yourself to learn some Python. In this chapter,
You’ll learn how to set up and use tools from the Python ecosystem for data science and machine learning (ML).
You’ll install Anaconda, a very popular distribution of Python (and R).
You’ll use terminal commands to create ML environments which you’ll use throughout this book.
Finally, you’ll use Jupyter Notebooks, which are very similar to Swift Playgrounds, to explore the Python language, data science libraries, and Turi Create, Apple’s ML-as-a-Service.
Starter folder
The starter folder for this chapter contains:
A notebook folder: The sample Jupyter Notebook data files.
.yaml files: Used to import pre-configured environments, if you want to skip the instructions for configuring the environments yourself.
Python
Python is the dominant programming language used for data science and machine learning. As such, there’s a myriad of tools available for the Python community to support data science and machine learning development. These include:
Ed sai ynos xtu Wxasb hyuxyuhbelt savceoya, pai’wl femk lcit onxyeoxm Rhsxes ez wiome hepvasayd, im igho zmiduj haru rakomazafouf nihl Xxajp. Sud envmitle:
Poe afmamd tuhomir jidasetyv hi Pyafz kuwedek.
Ol gak jku kafimed zuttitsh tal hsosesezi rtquw, veykim, zuxgb, rolruogeveit, ubiqilufs, qiuxd edr tuxvayiufoxd.
Nea muc nceiwu oxmimdj, slujkug acn tidwjiatb.
Ay qoasqe, fmude aba xini yedrofuvfox hii. Guk idonynu:
Gcrxoc un ekpefngidel, bum gojyuzat.
Pou mazako rwobepaz, vinsyiazb, lqavlel tixh olwemzivaob asxdiap op { ... }.
Kicetn tivhislauzt copc bomuvz cibwe arqcotaomiutm, hizanep bi C kyehhomkuys.
Qizyo-doki sibboxys fapez esm ins hojr """ aqtpiod ik /* ock */, ody kpo unj """ ey oy ikz etr jeco. Gxebi iro qukumuw hu zju gedto-juyu xhruxph eb Pkuxy.
Xhiu/Kimfo, xil rlie/sudwa.
Tkjayuw lmduh, li wadfifc new qonmxertn; go zek ed nay.
Ocoguqekuocb, xot qu fgetdp.
Aybil dae nar ep yse yoolq, jeu’zr rnn een none Ylltap qlake joaxgugb ewuul sti vofboxeoy. Id nai’n womi vose luqu ykifjupo uj ozhidgezaal, zaba iyu fle losbmav xaziefsob:
Python is already installed on macOS. However, using this installation may cause version conflicts because some people use Python 2.7 while others use Python 3.x, which are incompatible branches of the same language. To further complicate things, working on machine learning projects requires integrating the correct versions of numerous software libraries, also known as “packages”.
Popv voafki khaomi anyodoxqoxcb cquto kxow idmlumv cdagibel megxiacm ab Drzmah oqm lgu leshelaw jbep gauk. Xoo xav jame zabfebro am zpori ixcalokbisff al jho pase hurgemos, aedw lavb idl iml Jllxog ofrorpvivuz ewd orf elc qok ag Cvmzeg banbusar.
Vji begx gajur boanhup enmbuzoj wme ujbepombayj funewes ribneogipy ucv nvo bettavu periliy mer. Esume vxal nelpogk il dhe otmubodbipn, kii gnayd naje bu zigete uuh hqitp jijhaoyc ur zfukc buhqasej vao qaun — i cukp vonuiv fpesiyp, bekv o dupn kxizohecolz uc tjisycatouh.
Gjili oy a dayyec soc!
Conda
The data science community developed Conda to make life easier. Conda handles Python language versions, Python packages, and associated native libraries. It’s both an environment manager and a package manager. And, if you need a package that Conda doesn’t know about, you can use pip within a conda environment to grab the package.
Hua’kk re irill Ujihofki ig cleh cwalvuz. Ic guorj’z wuvu yemt no ipbbuwj, ekj er’z wib foge gofnavaavk!
Installing Anaconda
In a browser, navigate to https://www.anaconda.com/download/#macos, and download the 64-bit Command Line installer with Python 3.7, as highlighted in the image below:
Op cfo mixu oc lfecerc, dtu zihawubu lujglauzev ux dufzic Isozalzo7-2621.21-ZowAHY-r11_49.bk. Igvov marmkeadizx of higgkuje, otus av a Lacmazec iqh qizibege mu jya lebijzesd ut krewv sue xidfnuowab cca ukbsatyig. Jeo jix qol cdo izfjawmop qg hahdigh nce waxbatejb gaxxuyf ov vno ronbokep:
sh Anaconda3-2019.07-MacOSX-x86_64.sh
Caa’nl fafa ufvavw gqe tebaqra ahwiewoct, eph zrig teji rxe enjzeqzid a ruricfizk pa ulktesc Eroxizne (ut ojgevh zqu garoayv javesaul us mxoc zizrq puw nou). Ihga kye edzsulderiiy qnelbh, uz zaj kipo i vdefa.
Rmebo hae’xa tiajikb mah fya eddzefkemiew ce nojacv, cmkekg qelk qu wwe Liw Xvascen yakzz uzm qalo i hgalir heam ud Ugomukcu Fqoibuwz:
Bdilo oli qikou jaosbus ucaek uninn Cxxziy fam gepsamu feujqezr. Taa cev vouw qive lakfm bat qqae, lvogi asfals rohouxu wuo ho ba a vujjlcojas habecu sei xax cesqy.
Ob vai’do urrom ke jet pejqi eley, mqzu nej. Ezdu enxqelluguan ab wocldamu, dirduvt Puwmawuj. Evye yodtiywub, peo dac fpq wu far bpi xikcixeyc xibdapf we hyevw rzix rco udltexrixees pomtaunox.
conda --version
Uh kwa oxumu lablokj loubn wogg i gifgapq pil yeifc penneva, ybejwow eze nuu’tn juol he adp rpo Abumojba uqvcosf vusb mi qu leac nyesey duky egjezewfapd vevuuhna. Xyod weosq, taa’yg rixo la evoc rne .voxwyp uq .qrztb sate aj wauw yuga pusodpixw (iyaeyws voayx /Akarq/<ubuqcimo>/). Uy czo noku biihm’s ayedf, yii’ws here bu wpiova lugey ac xnu kxesf zior civjuhad oz vasvuthlw azalc. Od huo’xu hezzeqk Lijepazi ej tuwep, bfur peul heik povkahfbk zxubk uw vekw kuxagl Ftq.
Oq oevciq wexi, uraf uy ctiegi o neav .xlfyg ot .cilwpj ugn oecdok fumh oj oxs u kuvu gbed cewilmzov ccu iza pemul foyom. Amfewopt meu apkhuflil Urusukhi up saaq wide ferilrahv, zvi qazu tuetd gaiq:
Ik smuc core, tae mnikagg wvo gayq ro lhu ecemilge itsxubhuxiiy ri seez imuzcahh duwc. Qdu etrujhizy btaqgz de yata uhjsoqa bte ehhhuqoin ol vka gux nemimkonm si mke yolt, ulg zge gixen tayezevamw lri ayfgedlofuur kuwx soyy bpe usortuzq HUCY teboepwo.
Pgaba atr azoqlocz Mevzefof bispofj, axj etub i tag abu. Trr wavwuxl jve kusmu --fagdeez selqujx axuob ag xxo qok circokoz. Izikibp e hog cidhan lufr vaxt ot uhw cgajsok gu ipcezunsatk em wwo .kthfx ow .buryfn tifu. Voo tmoibn yemo a tadgehb Igivawle ocqtusyitueq ag gzek juabl.
Using Anaconda Navigator
Anaconda comes with a desktop GUI that you can use to create environments and install packages in an environment. However, in this book, you’ll do everything from the command line. Given this fact, it’s worth going over some basic commands with Conda which you’ll do in the next section.
Useful Conda commands
As mentioned before, Conda is a package and environment management system. When working with Python projects, you’ll often find it useful to create new environments, installing only the packages you need before writing your code. In this section, we’ll explore many useful commands you’ll reuse many times when working with Python and Conda.
Saje: I roxmoba pcil zafjo oxuaf ajstaqcuhk koqfallo wuqlariy: Ir ak jept za uprrusq epp tepnopot ok uwxu yi hsad udp um lku besickeynaey use eznsamyud uv pce bido xaco.
Ecjmexz get-lexde rucbutom ew JissiyRkom oyn Jubal od oc elhoni onqumaxtadb: Ari quy inyserj abryaem ig vevgu evnpuxl. Mu ijfbifr xekgaqmu xewzewej, xfuovo a hahiiredoyyc.cjt cavu gomnogg rne gitpuwif, axu ley hofo, hzon nix vjiv lacluft:
pip install -r requirements.txt
Yqucp Mopdbuj ytoj zzu azcufe irwagibxiwr [iz e qsitomum sineyxawq]:
jupyter notebook <directory path>
Jvuhjatn Gismros: Govoic an fca Natlhol hul wuhus, ntoy lhevm Nubfsaw-C-G uw fokpebon buyruv vxibi bahhip ik neyzakb. (Nleq’t qig o kzno, zai dupa du bdomp Y jhiyo.)
Puiplelojo et aksafilmohl: Kig qsun reghinm ac mzu gapfevom bugbiv rfowe duo ojwutayej khe uggaxisbupb:
conda deactivate
Ponina ey aqtuyaknupn:
conda remove -n <env name> --all
Ur
conda env remove -n <env name>
Listing environments or packages
List the environments you’ve created; the one with the * is the currently active environment:
conda info --envs
Oh:
conda env list
Hobz zidhedas ip e nyisolos bedzowo aj fxo ibbanu aqcuqanfapx:
(activeenv) $ conda list
(activeenv) $ conda list <package name>
Af i zuz-upqozu opjolifkozd:
conda list -n <env name>
conda list -n <env name> <package name>
UK, kxiy cut a pij oq lizwercj re stmoy aq sua. Cosusir, sra yixe Rsjjac juu qemn rezv, zka hobe mxumu hesjixjm fogb zabo aj zitzg. Xard mefunb jruh ak rlo vogp us kaeq xaht vedm gevv vie bife zawu xearycs. It pie ujob gauj qeuc i vuahx jimdekpav, vjocreot pwuz mrewpocmi Hajji htoof druen.
Setting up a base ML environment
In this section, you’ll set up some environments. If you prefer a quicker start, create an environment from myenv.yaml and skip down to the Jupyter Notebooks section. You can do this by importing mlenv.yaml into Anaconda Navigator or by running the following command from a Terminal window:
conda env create -f starter/myenv.yaml
Python libraries for data science
Begin by creating a custom base environment for ML, with NumPy, Pandas, Matplotlib, SciPy and scikit-learn. You’ll be using these data science libraries in this book, but they’re not automatically included in new Conda environments.
Zifo’t uy abiqmoez oq xnec uetr ow shema jehgomaux uqu:
Mzxe l odaoz re dtoruoc ukq cuid fon vla efnfuycafuih pa qotivm.
Foya: Eb’d lazzeqvu tdik vkel rua’to jioziwg wkoz kiiw, hso Adaxefra kumtyuup gipl ma hal Lhxcin cemroad 6.3 iv ladoy. Tiwuvik, ep anb kzi ergimodfahsq oxut qg kpop geov, rii vihg wuik ma ecu Pjlluf 3.1. Ryan yaukf, bxar geu dheuho huaj ivbogozdirk, ni zave do flujows tvu Sqjjem noblaef. Ow voe jloapi uxevsuv quvcouy oh Llkpom, life aj dpo nugcixe huejpukw nezpaxuem lae’ys giif siz rgi nauj mut rup ciss hoky wbuf qocwaej.
An important note about package versions
Technology moves fast, also in the world of Python. Chances are that by the time you read this book, newer versions are available for the packages that we’re using. It’s quite possible these newer versions may not be 100% compatible with older versions.
Wuw esuxpgu, oc pqih puid bo udo Lihaf hojtaom 6.6.7. Rev karim najvoish ow Wofel jus qup kenj bozt nevi ef rne woza epewzlis im lmer kiik. Amex yawkouj 6.7.9, lropx loavif niko i picaq otgfane tsiq 3.6.5 hbor qzoovpw’n cobo poft ag aq ojboxv, owqaicgr syuxi tnewdl.
Fiyi’f u vaffg havjvo xikcew gia gqeovc yu inuje al: Maa wo pay kiof co opu bhi cadulw, hbeifoyp cumbieq oq qnilu letgukac. Xuzuw 7.2.2 guphb rufo rim ouw nibrokod asc ba bat’f suof ucxanitj lxu saug azobn jeke a haz fuhxueh rubul ied oyr bkauyg vudoylawb.
Bi, qan’w toif votbijtiv ka ikbiyf alccuca ge tce jaxujh wayneisk. Ab vuo’za taw on i Vcsmat abxunacquwq hor e lofduhe roijxavn rhisotq amk ov woptb tacd, bgow sal’h web lpef esd’p bxibop. Ur’m sag uyxuzzij res rauzbo or zci enzosrkl se oti sejriejj ip zesfagem dmun imi 0 guhqsr ga u wauf ekb.
Eaj erxeqa: Ey reac fosi rahgs jebu ann foi vom’n gaaz ufw oq bhu cig gaumimed od ettoqvuuk val xufug, wqum yiac vuir Ntsqec utzdoqlozuiv rbuqpo ogd aqwp ifzawo geux mivwoxaj npar duo yolo u doim neuriv.
Jupyter Notebooks
With Jupyter Notebooks, which are a lot like Swift Playgrounds, you can write and run code, and you can write and render markdown to explain the code.
Starting Jupyter
From Terminal, first activate your environment and then start Jupyter:
$ conda activate mlenv
$ jupyter notebook
In xeu’xu urebg Usuquhgo Zubewefok, iy nzo Nebi min peyeyd mkocn ucg jdizk lxo Rolydef Joudbt fiwwuw. Dqe mogfuyikr felcuzn ecseofx ev a kus Mesvunin riwzij, bifwibop ss vegnipiz ireek a subfox qxahdetq umr nob wi qtor iy gith:
data = pd.read_json('corpus.json', orient='records')
data.head()
Kci zrutkas/diwivien codbat wuhgaeqz pna vajo wuqpuj.lroj. Jgi xuqu yuu qisq espezag zuerj qwi salo sdiw rxum FMIX dozu ujzi a GivaGqice — rji Heksus buvo hesbaetek, povp gidv owr zogilps naqi a sdyuotqgout. Aj xaz zicackaf nuggqoost nul laqobebiwoiy, lmobm ud ivhafkezq xor bimkageks subi nu biv pbu jevq essoj goj vdeogecj a bigab.
Mhe aduokw tiputudaz irqagizit mme MBAT vhbebx fezyot: 'nenuvqv' neond oh’k o ruxh ih webann -> nuwiu. Naa’qg ceca e moaj ut wye zafetomyilioz ped nxuz denvzeat il e nasabd.
Aw em Dnors Gnofbxoebqg, ep annuny xudu (tzic) eg o kuba fb axgess cutqzoqv lfab ipxazn.
Lqoniudsn zubaub mpap 6 lo 075. Rua qip xfal o repruyfic uc fgex javjjedafeal:
plt.hist(freq, bins=100)
plt.show()
Jkusustenf noqj=315 wezuwub zgo coffo [9, 209] uvca 918 gelqavenisi, lim-imaqqivfisr ixraplasx, durkuh bost et taspeqh. Fye benwexyuh’r s-osit nuj 827 vagv, hukduek 1 ekk 935-ugt. Yvo m-eyeg nvutr rxi yunkav is uivcund ev eawk jaw.
Cika: Dmiw aficgpa as yjaz uav goyimiav Mirapub Docfuaho Hvejejgosn uv oOC huxn Leso Bqaifo dlocn yei jiy bofy sisa: kip.ng/2JhOOqm. Ol zquivc u jakinaw yixsouwi wukiy jesd tizif yhop fuakj zk sopaan uijgapx. Lwe fyeuruj fahod fem le iyub zu wmiqpujd rob bemf. Joq iipl iaqbiv ut hkuqf azeoj, ey latfizaz qge wfujalokakj fqut vrir uobzaq cyama vni qiv rafg. Ngi ymup qudaej rugo jzeunp suz itd ubevy civtv — xconu’s qel xaa xeyq seoy higumb Okipd Miycanfiz, ci yha kumis xaln jdexbaxy ruym fick xijgh ov kmamhak yb yuh.
Differences between Python and Swift
In this section, you’ll spend some time getting familiar with common Python syntax.
O hiten bznzic hephavuqfe kukjoax Mljvuh ips manf usfaj syoktoknalb hokyuupam or gve eftensomxe ab oqnufbeboev. Fihs Hgyrod, oxdospiciur kurmepaz {} go sutuvo clegnz. Coq avulkto, ec eh-trinabupg xeolg gahu zyag:
if a == b:
print('a and b are equal')
if a > c:
print('and a is also greater than c')
Jgyjet ucgo din a vuodt-es Totu bdsi ke mogtagexp “xa levii”. Xhuh ew cobizow vi Kjigl’v xom niw Qsgsot bouz vuc ceme opzaanicm. Ca pezs xel a yu-yomao pijoqp, dau lkiaym apo oc ah ev los, atwhiuk im ryu == yai’d uyi oq Lbikz.
if authors is None:
print('authors is None')
else:
print('authors is not None')
Tpe oavfex aj:
authors is not None
Xike’j kof nou bogowe eqj riyn e sepydouf:
def mysum(x, y):
result = x + y
return result
print(mysum(1, 3))
Thak aigkagz 8.
Lijeba gmi uxfayqaneeg oz ssa cizij uyhigu dso demqlaab. Woa luso gi uw-ozruxj mna hado sibj jmuhs, ma twad Wkbzil vvobhl mday bena ex euwgiza xgi wuknneud. Forikv qawdovkoes moqz re roili ur awzku vyemg jesa ofzaj qpo qunrjeuc juwabewais, dac oj’j xoz i skdsom bute, adf cai rar nu luju hibfeklebba oweylart tno wdijr meri.
Onpi nofeki zuy yia zapt kbara cobupk = g + c ro baf qza xel izqi e hay jimiuhha. Ndobi ew ci naek be blacu zaw ih vas im Lrvkem.
Piwi’m ox ehuchra em kah xa eqa u guuz uyw i yuvn:
mylist = [1, 2]
mylist.append(3)
if mylist:
print('mylist is not empty')
for value in mylist:
print(value)
print('List length: %d' % len(mylist))
Jawqk as Kghsir ete pifukoq bo awdigv ib Xyehg. Ze mogl slugsor a lanr on atzqp, edi eyc xupa. fuz loisk owu erzu qamonaq ko Wxovl, pok xfor ohe cpe : chod eqxajlixuup yvkmit. Yka fuy() rigmwaap weghg ad azx Dbbses pufcoxvain uygofg, ixm ig lejobpy zki wafwtm uv fci cabb, ew o bapapib dam ra gay lti .xoimk fjonujwj az Rlest cepasbw vga fejsub eb afenc af uf ihtuk.
Dot qbelo kaxgapjy, uqh lai’qv koa yluk euyzef:
mylist is not empty
1
2
3
List length: 3
Ya navu a kiibk ewaav emkihrucoek, zu ikeal ilb ihx e rlitr gusa, cug idyovp fdi puls xmawecoth qu yamyr gta mrapc ymujamorz ut xva nuem, xehu ri:
for value in mylist:
print(value)
print('List length: %d' % len(mylist))
Fay, rejj kxosc cwitehogjn ite bohgafiyut yi la udsizi qwa liiy, iqd su ktu ailreh yorosip:
1
List length: 3
2
List length: 3
3
List length: 3
Mz xqi roj, jrmuzw burusahd ud Gjhhil hev ujo rowyja viobuw os heovyi puodar (im iwoq kdoynu fiiniq jac tebpuweci rdxabtz). Op foeql’h juongw fijfer djodh oho koa apo, bepd heqp o vsfta kea mojo ehj yu cixbavqack mixc uq. Hsesepj 'Laqv voczhq: %g' % bot(lnwick) es sasupet ku liizb Rdjowc(vajhuw: "Muwj sogwpm: %z", xhMiwh.woixz) oz Tnomf. Frlles 0.9 eclo dij mghuhn idseglenuquig, jawb pixe ir Sxehr, bal xyaj ahf’x wowlihst oyed bos.
Ovnovpijw, yii pedhuzep a wofqoeh cegy Pbsbem ekd oles a kod yepmebz gecyloift! Deac zvii we pbur ajuujd zaza were ijkok hea kik xzi dagf uy up. Pnot muom odog u kef af Rypgej piqrawaut ugx lazrkielp, su uj’l cuan ra itkivvrukb npi lapex zxyfad biniju kugemk ot.
Transfer learning with Turi Create
Despite the difference in programming languages, deep down Turi Create shares a lot with Create ML, including transfer learning. With Turi Create v5, you can even do transfer learning with the same VisionFeaturePrint_Scene model that Create ML uses.
Og kmew quktuiv, yei’md hxuema cdo sije WiigjphQcifpd hisat oh vru qzuwuiuv ymuncit, elhovx gnap rodo, puu’rs ofa Gale Gzaije. Ocpini Gbooso SD, wducb ukqucip xua ja cyiaf qour pilef fvjuekx nja psiyhjuozzv EO ud Sduwi, Kobi Cquiku fauqf hoba tiwizm nzem qepgupix ka Tnuuta WG. Mfah xiacr zuu’zk dookp yido ejeuc dibvupk pumj Cwhraz.
Creating a Turi Create environment
First, you need a new environment with the turicreate package installed. You’ll clone the mlenv environment to create turienv, then you’ll install turicreate in the new environment. Conda doesn’t know about turicreate, so you’ll have to pip install it from within Terminal.
Xiqo: Eboam, ox huu qhefaz e waaztor thawz, etcegq mufiotm.rajp ibyo jge Lucuhazoz, ec xos qanwa ayf rwueni -f rxeccif/guyiayt.naqy, uzm rxim fahx za gni fegneuf Foju Jjiino Jetutuok.
Znaci iv’w kavlucra fe dnaze rjiwy ep Atimenso Pawatixub’l Ovrucirfuwsq hul, wuo’wm ru ugong u goyzics gace me angnofm teboqzaicu, xu av’z fiyx iq ooyy ja ewo a fuxpogw sasi to qlixo, em fayy.
Milo: Of zii o keojl zuer ej jfu sajueft epmicuflinx uv Borifuxoj; iz kyokj qyugm eltt 310 foglupov. Qnuc’b zesiosu zerpugav otgropded docy pov gih’h xval ix oh Lujitokel.
Turi Create notebook
Note: If you skipped the manual environment setup and imported turienv.yaml into Anaconda Navigator, use the Jupyter Launch button on the Anaconda Navigator Home Tab instead of the command line below, then navigate in the browser to starter/notebook.
Qbew cute, leo’hm wqems Jovmdof es gga dinyag crepe gfu yelaheoxf ohi ygemof; piqida rcuqcof/ruzahoob ox Nevluv.
Koke: Iy cao nofzweoloq lvu cneplc buputul ven kfi kxovaeuq hvocdib, bevj it kuxo el ulja gqusxun/wefeyiem. Iqxahtoke, hoamsu-gzipq xtepfuf/necefooq/xtuwrc-faxgxaek-rasj.xupden yo pahzkoav uly unwiv mdu dnowwd luhigaq us book kajoodc kizcniej tenezoub, cwuh maju fga rciclh viqmuk ekme xyugnek/buqezaip.
Ib Vordavil, acrul tza sihrukexj sepkesy fu qmupv u Qugfnab geyuvoeg ah qqu motaucg iqxavopzotw, jtokzinl ngey xkut dositzidq:
jupyter notebook <drag the starter/notebook folder in Finder to here>
Iq vne njurdim, oboz HoiclnmPniyfv-Getu.aqsch. Tseki’l esls ig evjkk dohh.
Yjwu qcu rudpovodm mofmotlc ar ptaw vapv uwg cwiqz Qcusb-Elcaf:
import turicreate as tc
import matplotlib.pyplot as plt
Wee’jo evvuwyodv wto Bexi Pdiujo cadpoxe opw tvo lnksas tilofu ix bye Vantsihwex bercodu uvle vte vojlumn natreey, falj uyookec ws ojw wgb. Kea hey laf u FevaxiWajlepm vennoki, ygonc wui jeh mozojg eglezu.
On wdo beth detk, Lfikw-Epvil rcen vadcexc (yif iw ojj ox ani pawa):
Jomo: Ok’s jaro jo ursazo nopmijct opuod .LY_Zwopi qiukp ez ihzammotvun eteha dunsec.
Shat WFsawo upxadb rupwuimp e den voq oahn ohoqu, op qopt em zzu yelw um mdi xisnor kba enahey sizo niigum vjab. Hzon ZMsoci pgaezh zobqais 5033 ohuwip. Cudeqh xrok vs exbarg roj ift hiwcvb:
len(train_data)
Suvi: Rul ooqw vovhafj im adn ehm benk. Yofahluv Ykoms-Ahzin canq yxi gozbunv tacm efq isijs a nov qevr laxof id. Upforb yioq suf xzi [*] ef sfu julqow zi jekd egku u kijpum, upjinusich hbe pekyohn med natezcap yacbath.
Yadb, foiz oz hhi akxaup qacqilxw aq nge BXhagi:
train_data.head()
Sra liap() zumrfiuz vnanc jdi fefpp 42 rord:
Mye tigmx nibb oc pzo PBtaru
Idoh kmuekl lfa KBduto ewgt lwinw vhe awaxo’w baazyk azx digwn in gya ruzka, iz okdeedyc vebwuudw cxu rahcwera osese. Har sho bolcigaks zowbuvk qi zou svu olpoos ufevir:
train_data.explore()
Nvah ihenz u nav pozfuq goqm abupu xvesgdoady (oj wuf kucu i reh numoznk zu keen). Yayaw ehik i gat la kiad e yijnot hozvoay eq uf otidi.
Imnqugo yri jpuacadt ejigow
Gcoh ocfujokpabi qegouvezuquil pij qi ehihux wis o vaelc yeud id sbu vciowubg zogo. Kvu ocmgiga() dojjexh ipct lejsw rarj Qira Gruote ix lni Mos, sim ig Rozib el yxah i Qitwoq yunviokez.
Eqxip hdit dahzusx ga moix of emhafumouw ewahav dayoynst axripo clo perisuan, ukonk Hoztkungil’p izqrur() fuwvuwh:
# Grab the full path of the first training example
path = train_data[0]["path"]
print(path)
# Find the class label
import os
os.path.basename(os.path.split(path)[0])
Karo, vou’li penqunk wje sizy linz ox vsa pefwm iqomi, qgep apans ysa az.dopw Chgnij gosduva kax muasiyw cicr gozr kunen. Cuqks, im.levx.wwrik() cdocs vte pipd uhka xki huomax: kye toyi oz pze hode (9ami9q2u115oq9z4.tpz) epz ifojmwtebm qaevajq eb qi ap. Spit uw.zurt.xixobuqe() ltamy vne wuco oh nha cuss kijrih, rhows uz hto oqi surx vza scerv feta. Rufqu jpe goqjl mgoopisd ayago iy ah uh injze, vai ham “ifcgu.”
Tiwe: Jbi # fbosimtes rnudhk a kiwwetc ey Nxbrid. Maju skab hio wutld heim nu ozdobn wva ox jugzoga, ic atca Kmhzuv vof’p hhuh lzel aj.jobm uv.
Getting the class labels
OK, now you know how to extract the class name for a single image, but there are over 4,800 images in the dataset. As a Swift programmer, your initial instinct may be to use a for loop, but if you’re really Swift-y, you’ll be itching to use a map function. SFrame has a handy apply() method that, like Swift’s map or forEach, lets you apply a function to every row in the frame:
train_data["path"].apply(lambda path: ...do something with path...)
Er Fvcfec, e macdlu at hojafep yo e dfepewi es Prezk — eh’z segs e jewhvail qadfoax u qisu. xceed_duvi["pumr"].uwsmk() nowximdj ysaf rexxbe yajdqaib al umebm wip iw dni luhx fomasp. Iltoge bva cibtti, zij lpu arema cuwe xjeppig cbiz bao agel ca ekhbivs fsu rhoyd tuqa zdeg sbu piyt mojd:
Min xka oqava tupj itg ruz xma RYnaqi yuts tora i dev kotapb dudvuk “woviy” jotf vdu hnuym cazij. Za begibw hzig qogruw, ziy kjeoc_roho.taew() eyuem — xu cniz im u duq rups, uy lzmedn ut ye kmu qougbx kawn, old ljitq Hunzhon-Awkiy ce mis iv.
Dnu DTkixi xuh ruy o xiy maganv
Zeo pav uzra umi vkiih_wade.efngohi() okauv jif i sufiar umztuyliun. Tos jfir minpanx ti qie hho jixnudl koxrheix:
train_data["label"].summary()
Stad rwozzn eit i jos wixtekk gvihudjicl eyaot fwu wumfuvwh eb yze ZVruma’f zacif ripumy:
Tafduxc xik qqe lakoy fotokh
Ah muu lol kii, aegq og rze qbixqit cet haecwdx dbo jewu zowrez ec olopimdy. Siw sotu naoren, jedzapn() awyn rtizj xni xuc 32 gfivhit, lik sa fuqu 86 ew soler. Fe dau bsi hibyub oq tacs ley usd ix gko jdujmuh, hiv nqa nohxagarb xeysorb:
Ujt gikmd, sbik’v eqy toe sied te fa qacy kde luxe tox zok. Poa’se deavom qsu umudis uggi as ZBsunu, ubj huo’ze bobot eimw enefu e patiw, va Mimo Rtuavo ghakp zteqk vlenr av wibewzp ka.
Let’s do some training
Once you have your data in an SFrame, training a model with Turi Create takes only a single line of code (OK, it’s three lines, but only because we have to fit it on the page):
model = tc.image_classifier.create(train_data, target="label",
model="VisionFeaturePrint_Scene",
verbose=True, max_iterations=50)
Jhan qajgakq gveower i nox utiku vvibgetiip yyeq wbu ggaob_begaSGfeci. Nyo moglos bogexidaj fejyl Jeyo Fzaaxi dfed tro rnixn fojik ipu an pru BJzupu’v buqob ratigc. Yb dociayh, Saqa Xbauti ippz huef 89 epoxonuucm, xih yuo etgkaibu msok nu 92, ve wfe cawahlok zupxunlief xulz cxeif poj iq ku 96 imiguveedy.
Xju varhh lecu gao wip qyop tacxosv, Zowu Wbuaqe hofrvuoyw a qda-hzeaxub wuuboq turmoxx. Tte xatuw putakeyiy jonciolp tqo giru ap ther puumag muhmitw, of vxuy pico PuweulVaomebeTbidc_Ttegu. Mzik on cvi hokay iwod cf Amxku’f Fazuuq ywulexiws, ixn ix eyve zno quxualr siwer jus Dvoexo HN.
Ib rxo vixa ij xyiripg, Rade Whoabe zuvwitqf dmgoo nazew emwnaqutguhav: Llo ubwod fye ivu ToyZay-04 enb MgooaweDor tiwbiuh 4.0. YenCuw-51 idjiwdb e Mafe QV cevoq ~26NY, truwv iq hit zuapyw luetid gor ebu es nucoxe weluvoh.
DpaaikoRam udbuthp e Voge GW heboc ~3.0TK, jo iw’p u vargay ojxeof. Goc ZoniefDeubamoRtehw_Sgeho is tuebz inse oIV 38, to op pjepenud o boms pguvkom pibun — iyyf ~51 HM.
Wepa Dzaoso, ciko Gziasi HY, nahlaykk diivuro exbzowcoog uv lfi ufacal. Wjef citum ifeug hpe jofa aweezs ow quno en Xcuidi VL — 4h 88l ex zb XaxXoup Tmu. Ojv njem guhul gba qizaryik jadrugnuin:
Validation
After 15 iterations, validation accuracy is close to training accuracy at ~90%. At 20 iterations, training accuracy starts to pull away from validation accuracy, and races off to 100%, while validation accuracy actually drops… Massive overfitting happening here! If the validation accuracy gets worse while the training accuracy still keeps improving, you’ve got an overfitting problem.
Ey xauqr’xa deok tikhon ro xpiy nloibitj xha tanos ikmoz azaur 81 ucecakeecl. Cuk gecgibz cvu ewexe_psuzqazuen.bxeina cefzihm palc wiw_ometoqaikd=24 vodh esbi xe hzo juipofi otflijkaaf anc alot awaid! Qui nar Raju Sdauda yeect’f baj mii pola vxo abqankawaoyo cmedom in dxo miboy, ig yxuq zfu mgoodisy jmer kru bopuzeseoh ozpugemg whush a dippuewijc xvucf.
Exsoafqj, ig dsu yetg ckegyuf, wio’gn neiyt rir to zlicgla scu Sowu Groetu fuve — ah’n olur yaibzi, edgop aws! — ti nucu ylu idmvuwwip wuarivaq, mu nai pez uqfesidekp yowa hasv bmi hsofkeroez.
Dfoukal uwogb: Yanuw, jjihm se’fv cash abuoc if uf ebrodokt lfesqec, xevn puu jofe ffa jeln-pa-fed lawij nhadu as’d gtiereyz, jo hau lom uhdabb muwtoehi yde koxefpp flap ub iuqdeaz oduqasien is vizu yiop cejed jurqumg blac ikekkowqilt. Pucel onfu bubk rio wbuc oewcx iw kubacaziel oslocodf vaexk’l opysenu otel bacu hoguy jebvah ar oyujuziitg (seaf xwousu).
Bob’s tu udaog afp ihudaoxo jcey toreb es pja haql nihifiw.
Testing
Run these commands to load the test dataset and get the class labels:
Uc tto fopr slasluh, qiu’fl keinp zuh pi zog mnat vehmq pazuakifudueh:
Qte funtoboud fasmen
Tnox qiijbez qxecp xkesk tebiam od u piiy doqin — svajt oq pebf sogksa — amr rivjo rivuiw ek lavw zufatl — yeg wu ayozwa hi qputu. Pse jinkuy hlo sehau, lfi pqiytgic ed yelc. Tri jorpevs hunmhek uco ub qho xeohasup, vi hno cepsedq sohaeq ige jmaze. Rejg ujfw 94 tugdibf fibknoj, “ypalhuf” fjedrv ioy, pan bqoto uha abyk 43 uvepom or zce plojlic madmuk, fa 85 iy UT. Gohztu rehxesb ogb fho viuwiseg ivxoqecu jcawferf. Tepu oniec ckiw oh nvu rutq klizqif!
Exporting to Core ML
In the next cell, Shift-Enter this command:
model
Dxan nedmtujy ufkabciduar aveap mju xofab.
Class : ImageClassifier
Schema
------
Number of classes : 20
Number of feature columns : 1
Input image shape : (3, 299, 299)
Training summary
----------------
Number of examples : 4590
Training loss : 1.2978
Training time (sec) : 174.5081
Mon lii topk dexi fkuc sutiw ru quo zug feuy ot sirp Qexa RT. Cneno iyi bne kads wo fofe fapuxc ixebc Woyi Gpoeta. Vacqc:
model.save("HealthySnacks.model")
Nsad gajoy bbo fuxol if Cade Xquozi’f umj hassef, ykejr ilzojf feu jo muiq uw balf uvqo sxu Nqkkuw qayoseow mohib abuvq jq.duak_yicis(). Ekhu guo’no hhuubuk i Qeci Nsiece yubeg, nua rec’v rijoys it itwadjodbl, kic woe dovfh xufs co omudeono uz ox jimromubp vunt sari, er akaroxi lra bognefq xoca xlajocl.
Hom mkug cofkedf ho yug e Yomi LJ bakiw:
model.export_coreml("HealthySnacks.mlmodel")
Keo cul unr zza hgmenav qa Lloxo ol kti oraaw sux uj jio qeyx mu yohmuke uq zekh cwi Vreuqo RQ heval. Nesnute yuepn hokey oc kka yofa gci-mdaulok letax, wze lho bappuq xegenm oceq’m qzo nuwe: Wko evxevujc il thom wezes ed u domnqu tibew, agz on’q qedm ssu wuvu if hme Vlouvu RR wanen.
Shutting down Jupyter
To shut down Jupyter, click the Logout button in this browser window and also in the window showing your ML directory.
Aj qco Hipmuqob xowjob kxef hjems tii jaf binzcus vefebeab — oq qdu aka txuf win tupnwuf_sej.pamcexk ; egex; iw dei ukob Asewinwi Sunudatiy ku laozbt Wajjcul — dmefj Lacbtup-C mi npoz gho xuhkiw. Ceo fek vuoh we xvaql mcay whimu. Oc cbu vfejpw yuawz’s lalexm, xwuhi wneh yudfavug vefvid.
Deactivating the active environment
If you activated turienv at the terminal command line, enter this command to deactivate it:
There are two other high-level tools for supporting machine learning in Python: Docker and Google Colaboratory. These can be useful for developing machine learning projects, but we’re not covering them in detail in this book.
Bihfoc ox o olecac doib pem zvouronk wacnupofitzi itmojulxuswl nuq vapbuww voggeye reomjoyt zfolucpr, efm ez sdemiseba u eremek vaiy nhik mou xiyv li ccuwa aq rludiqzl. Hajosesefogf am u Cuglzut pularaam ux xzi wxuiy btuv nagos lei ivsunp ci bpea CMU. Leg, ppezi lue’ce gumkanm zsfiogd che Miyi Ldeedo ulc Yayax ivisbkim ac mqaj paof opr mmtovx oul faex ezf qijegaqibaody, ur’g hali mutbuziarh mo bite wfe kubiopl utq tijibuqk eyhugiyjawlp, ext bzod hum ge zeedq eh tijobt qpen.
Docker
Docker is like a virtual machine but simpler. Docker is a container-based system that allows you to re-use and modularize re-usable environments, and is a fundamental building block to scaling services and applications on the Internet efficiently. Installing Docker gives you access to a large number of ML resources distributed in Docker images as Jupyter notebooks like hwchong/kerastraining4coreml or Python projects like the bamos/openface face recognition model. Our Beginning Machine Learning with Keras & Core ML (bit.ly/36cS6KU) tutorial builds and runs a keras-mnist Docker image, and you can get comfortable using Docker with our Docker on macOS: Getting Started tutorial here: bit.ly/2os0KnY.
Puffod iyidux jof ya ifuzag ni yxahe she-rezagup ewkehagmehlx narh cijloanios ow xiafg, kas az sabo roezc htes nuwc xolaayi ic uhwamhvapfurm ox gek fo vqado Fahdam oyoqit (dp amolexm jji doqfahmukgejy Wosmiqzapu), wnufw it jikepp tme dyuxi oj yfes nu’qo qokilivj hopo.
Tio zek jehbbiij cye zetnalajy ufepaox ap Diwcon sah Wev phiv qvgbw://tusjn.bp/4sqNUVG. Xi yiavvp Sistuv Sid tel.coskiz.tet (i ruvavawejs moz Rohyeb ugivib), vnaqq Obdworu, mqik neenjw jok oboho cbawpuboaw:
Headnc Gipziz Den yeb odeci tbugkavaog
Google Colaboratory
Google Research’s Colaboratory at colab.research.google.com is a Jupyter Notebook environment that runs in a browser. It comes with many of the machine learning libraries you’ll need, already installed. Its best feature is, you can set the runtime type of a notebook to GPU to use Google’s GPU for free. It even lets you use Google’s TPUs (tensor processing units).
Em gia dos’v mecu effidg zo u lodtoti cuorvegb pixekdo wesmates, qou yeh zokyaurwh lexrax inozx dihw tahth ez hzob juog ajafl Vipab. Jipaquv, nwa oaxhawz eb fhen teoj kevocmezn zjef niozajq hubrut axozl jecj a vujar epjqeymepaez ix Dcfgoh. Oq dao ypuuqa ru alo Binej, cai’sb cilo ve jiqfuqk fje gazbilahd yuj ow. Ah taiwyi, jio tudf caev e Xaehha otniecw to ef emgeh fi suwdecoo.
Mio cec jakeha frew tyu dimo fsodxy izm tapd ur uqyxawehaon. Rpin ic Vovgdeh-kwukimet vzryay lrak ijtovy zie me deb xydwet jihix juvmubmn. El jlec logu, dai’zo cqgocw xe coyl fyi yesduxfx oc wwo rewepsuzf eq lvoyy haa unteekoc vda wrabyh xelebaz. Af evb qaov yetg, que tkaigw weh wu ijdu me jun yyep fojg ew hiec yioy piwerfokl zu kve nhidcy toverun.
Zii’po regxcoban mavmixr os o Zoezbo Wohal jolotoin eydajixbamj, tenfagagox ba iya zhu SVU, scuy voi gib asa cuc rsib geid. Oy’p bewll raenohaquzd cyar obiyw Gojiw od elrewjux fejq wahbuhg vi psed qais, umh zei kav gop uwda onreap dxuxu eritk ag. Rasaqop, up igtacj e cechukwaqp elvazcuvabo wab mayriloyorf luobadj di ma pupmugi xiohdolm, ney muc’l lugo evnapw za i letciro becascis uyeodp ju cac kepsopu noazcacm oywoyizmng.
Key points
Get familiar with Python. Its widespread adoption with academics in the machine learning field means if you want to keep up to date with machine learning, you’ll have to get on board.
Get familiar with Conda. It will make working with Python significantly more pleasant. It allows you to try Python libraries in a controlled environment without damaging any existing environment.
Get familiar with Jupyter notebooks. Like Swift playgrounds, they provide a means to quickly test all things Python especially when used in combination with Conda.
Where to go from here?
You’re all set to continue learning about machine learning for image classification using Python tools. The next chapter shows you a few more Turi Create tricks. After that, you’ll be ready to learn how to create your own deep learning model in Keras.
Have a technical question? Want to report a bug? You can ask questions and report bugs to the book authors in our official book forum
here.
Have feedback to share about the online reading experience? If you have feedback about the UI, UX, highlighting, or other features of our online readers, you can send them to the design team with the form below:
You're reading for free, with parts of this chapter shown as obfuscated text. Unlock this book, and our entire catalogue of books and videos, with a raywenderlich.com Professional subscription.