Frederik Tobias Norsk Skjøth

Jeg samarbejder gennem 4. semester med virksomheden Bionic System Solutions(BSS) og mine gruppemedlemmer Jakob, Emil og Dan. BSS er specialiserert i akustisk dronedetektering, remote asset monitoring og vandbehandling.

Vi vil gennem 4. semester udvikle et system der kan

1. Detektere droner ved hjælp af lyde, billeder og video feed

2. Automatisk kan sende varsler om detekterede droner

3. Hoste ML pipeline i skyen

Fag

Jeg har valgt Machine Learning og Cloud Computing som mine valgfag til 4.semester

Machine Learning

Machine Learning gør det muligt for algoritmer automatisk at lære fra data uden at være eksplicit programmeret. Ved at bruge algoritmer til at analysere store datamængder kan modellen identificere mønstre og lave forudsigelser eller beslutninger baseret på tidligere erfaringer.

Jeg vil gennem 4. semester bruge supervised learning(Classification) til at identificere billeder der indeholder droner

Cloud Computing.

Cloud Computing er en teknologi, der giver adgang til computerressourcer via internettet i stedet for lokale enheder. Dette muliggøre fleksibel og skalerbar IT-infrastruktur

Cloud computing opdeles typisk i tre modeller: Infrastructure as a Service (IaaS), Platform as a Service (PaaS) og Software as a Service (SaaS)

Jeg vil gennem 4. semester udvikle et cloud miljø gennem Azure der kan hoste mine AI modeller som et SaaS

Frederik Tobias Norsk Skjøth

Mandag

Genopfriskning af gruppemedlemmers emner samt deres rolle i projektet. Fik en klarere ide omkring hvad mine emner skulle fokusere på

Tirsdag

Blev præsenteret for semestret

Onsdag

Torsdag

Havde et møde med projektgruppen hvor vi disktuterede rammerne for projektet. Vi kom frem til enighed omkring en gruppekontrakt og oprettede diverse gruppe chatte.

Fredag

Fandt materiale til emnerne og brugte dette til at definere nogle af de første læringsmål

Mandag

. Afklare fokusområder

  • Bestemme specifikke emner inden for Cloud Computing og Machine Learning.

. Find relevant materiale

  • Søge efter bøger, artikler, kurser og dokumentation.

. Definere læringsmål

  • Formulere klare læringsmål baseret på materialet.

Tirsdag

. Afklare fokusområder

  • Bestemme specifikke emner inden for Cloud Computing og Machine Learning.

. Find relevant materiale

  • Søge efter bøger, artikler, kurser og dokumentation.

. Definere læringsmål

  • Formulere klare læringsmål baseret på materialet.

Onsdag

Torsdag

Påbegyndte 1 / 3 Standford : Machine Learning Specialization og fandt yderligere materiale til både Machine Learning og Cloud Computing

Brugte kurset til at identificere fremtidige læringsmål

Fredag

Lavede overvejelser omkring valg af materiale til cloud computing og valgte Azure som cloud provider

Lørdag

Fortsatte 1 / 3 Stanford kurset for at have en mere sikker forståelse af hvad mine mål for machine learning kunne være

Mandag

Lærte om den gode opstart af semesteret samt vedligeholdelse af motivation og fremskridt i ens process.

Fik gode foreslag til udforming af læringsplan.

Lavede ændringer i proteføljen så den afspejler de gode råd.

Tirsdag

Videre definerede læringsmål.

Lavede en plan for gennemgang af det materiale jeg har fundet

Påbegynder den første periode med fokus på læring gennem materiale og kurser i morgen

Onsdag

Jeg arbejdede med AZ-900 under kurserne "Describe cloud computing" og "Describe the benifits of using cloud services"

Her lærte jeg omkring overordnede emner som Shared responsibility model/Ansvars fordeling af forskellige cloud services mellem kunde og udbyder

Under kurserne kommer også ind på privat, offentlig og hybrid cloud modeller samt de forskellige services(IaaS, PaaS og SaaS) og en mere generel forståelse af fordelene ved cloud løsninger

Torsdag

Idag hørte vi et oplæg omkring AI, brugen af AI, AI databehandling, AI bias og hallucination. Udover dette blev vi også præsenteret for nogle gode promt teknikker

Fredag

Lavede AZ-900 undermodul "Describe cloud service types" og færdiggjorde derved den første learning path ud af 3 i AZ-900 forberedelsen

Jeg gik igang med den næste learning path i AZ-900 "Describe the core architectural components of Azure"

Denne del handler mere om infrastruktur eks. Regional pairs, availability zones

Udover dette lærte jeg også at oprette VMs gennem deres learn test environment samt at navigere i Azures resourcer

Mandag

Fik evaluering af portefølje og vil udvidde og rafinere min Læringsplan samt tilknytte kommentare til min litteraturliste.

Fortsatte med machine learning og kom mere i dybden med Unsupervised Learning algoritmer. Her ses en clustering algoritme der klassificerer DNA således DNA med fællestræk er grupperede

Her findes der også Anomaly detection og Dimensionality reduction som jeg kommer mere ind på længere hen på ugen

Lærte mere om Supervised learning og brugte Jupyter notebooks i forbindelse med Univeriable linear regression.
Her bruger man python og NumPy biblioteket pga de stærke array og linear algebra funktioner.

man bliver introduceret til alle termer, principper og syntax men jeg vil senere bruge et sepperat kursus kombineret med youtube til python

Tirsdag

Fortsatte med Linær regression.

For at finde værdier til w og b så vores forudsigelse er tæt på de realle værdier i træningssættet bruger vi en cost function. Her er squared error cost function den mest almindelige for linær regression

den viser hvor godt de valgte w og b værdier passer til ens træningset. Den måler forskellen mellem modellens forudsigelser og de sande værdier i træningssettet

Jo lavere J er jo mere præcist måler vores w og b værdier

Onsdag

Jeg arbejdede videre med Cost function og startede ud med nogle gode visualiseringer.

For at finde de bedste w og b værdier bruger man en algoritme der hedder Gradient decent.

Man kan visualisere gradient decent gennem et surface plot over mulige w og b og J(w,b) værdier.

Når man bruger square error cost function med linær regression har surface plottet altid kun ét globalt minimum da denne cost function er en voncex function

Her tager gradient decent algoritmen et skridt mod et lavere punkt indtil j ikke kan mindskes længere

I større neurale netværk ser man andre former for surface plots som eksempelvis dette

Her er der flere lokale minimum og alt efter hvilket start punkt algoritmen tager udgangspunkt i kan man ende i forskellige minimum.

Fik mit første python projekt op at køre i PyCharm og vil implimentere min første ML model næste uge på mandag

Torsdag

Har været til mine første erfa møder hvor vi delte erfaring, information og kilder. Fik gode fif til kilder og datasæt.

Fredag

Mine notater for uge 10 blev slettet af et roll back men jeg arbejdede udelukkende med cloud computing og lærte hovedsageligt om storage og satte forskellige slags storage resourcer op i azure

Mandag

Tirsdag

Jeg blev færdig med min Multiple Linear Regression Machine Learning Model idag

Modellen bruger datasæt fra kaggle link herunder

Modellen skal beregne Student Performance baseret på disse parametre givet i sættet, Hours Studied, Previous Scores, Extracurricular Activities, Sleep Hours og Sample Question Papers Practiced

Jeg skal dog her påpeje at de datasæt der er på kaggle ofte er saniteret og strukturerede så min Accuracy Rating(r2) værdi kommer til at være en del højere end den nok normalt ville være i virkeligheden

Jeg brugte Python gennem PyCharm. Jeg brugte også nogle libraries til at håndtere de forskellige afspekter af modellen

numpy til at sørge for vectorization gennem .dot metoden hvilket gør selve træningen af modellen væsentlig hurtigere gennem parallel processing capabilities af .dot functionen

bruger Cost function til at beregne cost error af de valgte værdier

Og gradient decent til at beregne de mest præcise værdier for


Jeg brugte pandas til loading og dataset processing

Jeg valgte også at implimentere visualisering af modellen gennem matplotlib som ser såden ud

Som tidligere nævnt er dette datasæt et ret rafineret og uproblematisk sæt så her ser man også en ret høj r2 værdi

Her kan man se de beregnede optimale feature værdier

Hours studiet : 7.40093109
Previous Scores : 17.63646538
Extracurricular Activities : 0.30430629
Sleep Hours : 0.81002051
Sample Question Papers Practiced : 0.54895455

Accuracy ratingen kan ses at være 98.8% hvilket er ret højt

Jeg tænker at mit næste fokuspunkt inde for ML skal være classification med henblik på billeder

alt ialt har linær regression har været ret givene

Onsdag

Jeg vil idag prøve at hoste min Multiple Linear Regression Machine Learning Model(MLRML) i et cloud miljø.

Jeg oprettede en ny recource group specifikt til dette formål kaldet ML_Test_Env hvor jeg vil teste ML funktionalitet i skyen.

Her bruger jeg blob storage til at store min trænings data

Torsdag

Jeg har været til erfa-møde og fik nogle gode tips til værktøjer og veje man kan gå inde for hvert fag

Fredag

Jeg lavede resten af mit Cloud miljø færdig til min ML og ændrede min Load_data method i python til nu at hente fra mit blob storage

Her kan man se modellens traffik på mit Blob storage

Mandag

Lavede en API i en container der skal kalde min ML
Jeg lavede den i python med flask og brugte azure web app til at hoste den

Her oprettede jeg en git organisation der skal holde repositories til source for min API så jeg kan pushe ændringer direkte fra pycharm

Her efter oprettede jeg forbindelsen mellem git og min API.
jeg kan nu pushe ændringer til git og de vil automatisk blive deployed til skyen

Tirsdag

I implimentationen fra igår kan alle GET endpoints blive kaldet

Men af en eller anden årsag bliver POST requests blokeret med en 405 returnering

Jeg troubleshootede en del. Implimenterede CORS, Authentication og ledte i settings under min Web App men jeg kunne ikke finde fejlen.

Jeg oprette en ny resource kaldet Application Insights til videre diagnosticering af problemet men jeg kan ikke finde noget detailjeret beskrivelse af 405 responsen nogen steder i Azures værktøjer

For at finde ud af om det var azure der ikke tillader mine endpoints kørte jeg applikationen på min computer

Som man kan se kan min model nu tage en request og forudsige ud fra de parametre man giver den.
Træningssættet ligger i skyen og hvis selve APIen også fungerede i skyen ville applikationen såden set være en SaaS hvilket var målet

Onsdag

Jeg arbejde videre med at løse 405 responsen på POST requests til min API. Så nogle videor men ingen virker til at have det samme problem som mig.

Jeg vil finde nogle videoer af hvordan man laver en API fra bunden da jeg vingede den lidt så jeg tænker at problemet må ligge i skabelsen af nogle af de resourcer jeg bruger.

Jeg var til mit første Process møde og fik nogle fif til forbedringer af min Porteføljie. Længere beskrivelser i litteraturlisten, Læringsplan og læringsmål skal ændres

Torsdag

Fredag

Arbejdei går og idag på et en Polynomial Regression ML

Man kan fortestille sig at der er scenarier hvor en lige streg ikke er optimal til at beskrive et datasæt.

Her kan man eksempelvis gøre man brug af polynomier

Her er der mange ting der går igen fra Min Linear Regression Model

En af de vigtigeste tilføjelser til koden er håntering af Polynomial Degrees

Den generere features op til en bestemt Degree.

Så hvis man har features x1, x2 og x3 og en Degree på 3 vil man få både linære led x1. Kvadratiske led x1^2 og kubiske led x1^3. Min model går op til 4 Degree

Her bruger jeg en ny metode der skal finde den optimale Degree for mit nye datasæt fra kaggle "Manufactoring.csv"

Denne metode træner modellen med alle Degrees og finder den Degree der generere den bedste r2 værdi

Her ses de forskellige Degrees samt de forskellige Feature værdier der giverden bedste r2 værdi for hver Degree

Jeg brugte også nogle andre visualiseringer

Et heatmap viser hvor tæt to features bevæger sig i forhold til hinanden. Her kan man spotte om der er nogle overflødige features.

I dette heatmap over min Model kan man overveje om enten Transformation Metric eller Material Fusion Metric burde fjernes da deres værdier er næsten identiske

Her kan man også se visualisering over hvordan modellen passer på dataen. Her kan der være tale om underfitting i og med den røde curve som repræsentere modellen kurver væk fra datasættet til sidst

Mandag

Siden jeg ikke kunne finde ud af hvorfor POST requests til min webapp ikke virker besluttede jeg at lave en function app med http trigger istedet

En function app med http trigger er essentielt en slags API. Man laver en function for hvert endpoint.

Jeg om strukturerede ML koden således træningssættet, trænings koden og den trænede ML model ligger i skyen meget på samme måde som den linære regressions model

Her er connection stringen dog secure og ligger gemt på azure i en environment variable under function appen

Tirsdag

Jeg har i øjeblikket kun en azure function man kan kalde fra APIet der hedder train_model

Den har jeg udarbejdet i vs code da det er en del nemmere at styre alle de biblioteker man skal bruge fra et IDE i stedet fra direkte fra azures portal

Her kan man også deploy ens functions direkte fra vs code ved at bruge azure extension.

Nu kan jeg træne modellen og gemme den i mit BLOB storage som en pickle fil gennem url

Onsdag

Havde eksamensforudsætning og så hvad de andre fra holdet har lavet gennem semestret. Fik inspiration til ændringer i portefølje

Torsdag

Havde gruppe møde hvor vi diskuterede arkitektur samt hvordan vores fag skal flætte sammen. Vi oprettede en azure dev ops forbundet til en github organisation som nu skal fungere som vores projektstyrings værktøj

Fredag

Jeg lavede et get_prediction endpoint til min serverless function API

Hele grunden til at jeg begyndte på azure functions var fordi jeg ikke kunne få web appen til at acceptere POST requests.

Endelig virker POST requests om man kan nu træne og få forudsigelser fra http.

Her forudsiger modellen en Quality rating på 100.9 hvilket er lidt for højt.
Det skyldes at den data jeg har valgt at sende ikke nødvendigvis er en afspejling af værdier der kan forekomme i virkeligheden.

Jeg har nu gennemført mit første store mål. At hoste en ML gennem azure. Nu vil jeg gå væk fra regression og over til neurale netværk med henblik på billedegenkendelse. I cloud computing tænker jeg at jeg vil lave mere sofistikerede systemer med mere validering og automatisering

Mandag

Havde produkt møde hvor vi diskuterede fremskridt for de forige uger

Gik videre med Neurale netværk

Man kan tænke på neurale netværk lidt som logistisk regression. Outputlaget modtager nogle features og passere dem gennem sigmoid function hvilket essentielt er logistisk regression

Hver neuron i modellen udføre samme udregning så man kan sige at hvert lags output er resultatet af mange logistiske regressioner i parallel

I stedet for vi manuelt skal feature engineer som vi gjorde med polynomisk regression kan disse neurale netværk essentielt selv feature engineer

Så overordnet kan man tænke rent conceptuelt på neurale netværk som at være logistisk regression der selv kan lære gode features

I forhold til billede genkendelse kan man lave en vektor ud fra de pixels der opgøre billedet

Det er så denne vektor man kan fodre sin model

Nedenfor ses den overordnede struktur på et neuralt netværk

Den tager et input i form af en vektor hvert lag udføre udregninger og outputter en ny vektor der bruges af det næste lag osv indtil man til sidst ender med en endelig forudsigelse her set som vektoren a^[4]

Tirsdag

Onsdag

Jeg vil gerne lave mit eget neurale netværk. For at få en intuition om hvad der foregår i biblioteker som Pytorch og Tensorflow vil jeg selv implimentere forward propagation og lignende.

Jeg mangler viden inde selve implimenteringen og træningen af neurale netværk så det er det jeg vil arbejde videre med idag.

Ud over det er der mange overvejelser man kunne gøre sig inde for neurale netværk som jeg ikke kommer til at tage højde for her i første iteration af modellen

I et neuralt netværk bruger man neuroner til at lave udregninger. Hver neuron gør brug af logistisk regression.

Jeg kunne mærke jeg manglede noget forståelse for logistisk regression så jeg gik tilbage i mit kursus og gik gennem materialet igen.

I logistisk regression prøver man at forudsige sandsynligheden for om et input tilhøre en bestemt klasse, typisk binært.

Denne logistiske regressionsmodel prøver at forudsige om en tumor er ondartet eller godartet. Som man kan se sætter modellen en grænse for hvor stor en tumor kan være før den klassifisere den som ondartet

Inde for logistisk regression er der særligt en funktion der buges ofte.

Her ses en sigmoid funktion.

Jo mindre z værdien er jo tættere er g på 0 og modsat jo større en z værdi jo tættere er g på 1

Outputtet fra en sigmoid function kan ses som sandsynlighed. Derfor er sigmoid god til at lave billede klassifikation.

Torsdag

Var til IT dag for at få lidt inspiration til praktiksøgning. Mange virksomheder er enten ikke lokaliseret i odense og/eller søger en praktikant med en længere praktikperiode.

Jeg fik dog interesse for et par virksomheder

Fredag

Har været til erfamøde i Machine learning og Cloud Computing.

Fik snakket og fik en fornemmelse for hvor langt jeg er med mit arbejde i forhold til de andre på studiet.

Blev intruduceret til andre algoritmer og ML strukture i forhold til Machine Learning

I cloud var der ikke så meget jeg kunne tage med hjem men det er altid rart at kunne være til hjælp for andre

Denne uge fokuserede jeg hårdt på at komme i kontakt med virksomheder i forhold til praktik. Det har taget noget tid og fokus fra studiet men jeg fik sporadisk lavet videre på min computer vision neurale netværk.

Fredag

Ferie. Lavede dog mere arbejde i forhold til virksomhedssøgning

Mandag

Tirsdag

Når man laver et neuralt netværk der skal kunne håndere billeder skal man først organisere dataen(data preprocessing).

Det data jeg har fået fra kaggle er allerede ensformet men er dog pakket i samme folder og desuden er der kun billeder der indeholder droner og ikke eksempler der ikke indeholder droner.

Her vil jeg gerne have muligheden for senere at kunne lægge billeder af forskellige landskaber uden droner ind i modellen uden at skulle ændre så meget i min kode.

Derfor deler scriptet datasættet op i både "no drone" og "drone"

Nu er datasættet klar til at blive brugt af vore neurale netværk

Onsdag

Jeg har gennem mit kursus lært om neurale netværk men i en mere generel forstand end hvad jeg har brug for for at lave image classification.

Jeg har her brug for at kunne lave et convolutional neural network. Et convolutional network er rigtig god til image classification. CNN har gode værktøjer til at håndtere grid-like data og derfor også billeder. Dette kræver en dybere forståelse af arkitekturen af modellen.

Et convolutional layer er den definerende feature af et CNN. et convolutional layer består af filtre i stedet for neuroner. Hvert filter indeholder en matrix. Tallene i matricen definere hvad det tilhørende filter detektere. Størrelsen af matricen definere størrelsen af området filtret bevæger sig over. Dot produktet af hvert område filteret bevæger sig over bliver gemt i en ny matrix. når filtret har Convolved over et helt billede er det denne matrix der er outputtet som set nedenunder

Her kan man se at filtret outputter et feature map. Dette er essentielt et nyt billede hvor man gennem filtret highlighter overordnede mønstre

Her kan man bruge dette output som input i et pooling lag som her vil simplificere yderligere.

Selve filter værdierne i et convolutional layer lære modellen selv. Her starter modellen med at detektere simple mønstre der gradvist gennem lagene bliver mere og mere komplekse som kan ses på disse feature maps

Torsdag

Jeg har valgt at min models arkitektur skal se såden ud

Jeg har valgt at bruge convolutionelle lag i sammenhæng med pooling lag som komprimere og forstærker de mønstre der er fundet

Som kan ses bliver modellens filtre større og større jo dybere ind i netværket man bevæger sig

Man kan også se at der er brugt fowardprobagation og at jeg har valgt relu og sigmoid som activation functions for modellen

Idag vil jeg omstrukturere min CNN så den bliver hosted gennem azure. Som sædvanligt starter vi med at skabe de tilhørende resourcer. Storage accout, blob storage, azure function application, samt de forskellige endpoints der skal bruges. Her vil jeg lave prepare_dataset, get_predict og train_model som udgangspunkt.

Jeg har begyndt på at struktuerere min function app i vs code.

Fredag

Jeg arbejdede idag videre med min implimentering i azure. Jeg har haft problemer med direkte deployment fra vscode til azure og har troubleshootet for at finde ud af hvad der går galt.

Som udgangspunkt fejler den silently og bliver ikke samlet op af nogle af de logs jeg har adgang til gennem azure

Mandag

Jeg har idag kunne deploy direkte fra vscode uden nogen betydelig ændring i min implimentering så jeg ved ikke helt hvad der var galt tidligere.

Jeg har arbejdet videre med udformingen af min function API

Jeg stater med prepare_dataset
Jeg har hertil lavet en blob container der skal holde det rå data og en blob der skal holde prepared data.

Azure blob storage har ikke inbygget folder funktionalitet som såden men man kan dele ens data op gennem navnekonvention. Det er det denne klasse gør

Der er også lavet lidt optimering men det skal jeg gense på et tidspunkt da den nuværende implimentation blot tjekker om folder strukturen er skabt men ikke om der er det antal billeder man ville forvente

Jeg har også valgt at afkoble forskellige funktionaliteter fra selve implimentationen af de forskellige endpoints.

Her har jeg brugt blob utils som en hjælper klasse

Den skal stå for al interaktion med programmer og mine azure blobs

Jeg havde her lidt problemer med min key vault så jeg lavede lidt error handling i forhold til troubleshooting

Tirsdag

Jeg fik idag mit prepare_dataset endpoint til at virke

Her kan man også se min __init__ implimentering

Her kan man se hvordan folder strukturen ser ud i azure. ved at søge i en blob med eksempelvis /val kan man se alle validation dataerne vi skal bruge når vi træner modellen

Onsdag

Jeg har idag forsøgt at implimentere train_model. Da jeg startede med at lave min azure implimentation skabte to forskellige resource groups for at teste om en blank resource group ville kunne tage en direkte deployment fra vscode da jeg havde haft problemer med det.

Idag sad jeg fast da jeg ikke kunne få min implimentation til at fungere med mine blobs. Jeg brugte errorhandling til at identificere at det måtte være min connection key der var noget galt med

Efter en del søgen fandt jeg ud af at jeg har skabt en storage account der hedder cnndata med en blob der hedder convolutionaldata samt en storage account der hedder convolutionaldata med en blob der hedder cnndata

Jeg havde ikke den rigtige connection string

Jeg arbejde videre på train_model og dets implimentation.

Torsdag

Jeg arbejdede videre med train_model
Jeg har igen haft problemer med at min deployment ikke går igennem til azure portal

Jeg kan se at azure for filerne og de er korrekt formuleret i deres endpoint struktur. Deres function.json er også korrekt formuleret.

Jeg har prøvet at pakke modellen manuelt gennem azure CLI og deploy den zippede fil derigennem istedet men det går heller ikke igennem

Fredag

Jeg troubleshootede videre på train_model

Jeg er kommet frem til at det er requirements.txt der får direkte deployment til at fejle. Jeg kan ikke finde ud af at få azure til at give mig nogen form for error beskrivelse omkring det men efter at have slettet indholdet for derefter at gradvist tilføje tilbage i requirements.txt har jeg fundet frem til at jeg ikke skal inkludere alle de pakker jeg hidtil havde. Nogle af dem kan azure selv finde ud af at håndtere

Jeg har herefter arbejdet videre med implimentationen

Efter at have lavet en fuld implimentation fejler endpointet.

Jeg har lavet et stor fejl. Jeg har ikke overvejet om azure functions også ville være egnet til neurale netværk. Azure functions er en rimlig light application der ikke kan køre komplekse og store operationer som et neuralt netværk kræver. Derudover køre azure functions på cpu hvilket jeg heller ikke havde overvejet. Det vil gøre træningsprocessen yderst langsom og azure functions kan fejle når der stilles for høje krav til den

Her kan man se min implimentation

Mandag

Jeg har læst lidt op på hvor jeg burde placere min trænings logik. Jeg er kommet frem til at jeg burde lave en azure container application der kan håntere den del af modellen.

Jeg udvidder min implimentation med en training_service folder der skal indeholde alt jeg skal skabe mit docker image ud fra

Her kan man se min strukturen og implimentation af container appen. Resten af logikken er ikke ændret

Som man kan se skal den bare fungere som sin egen api der skal håndtere træning af modellen

Her opretter jeg også en ACR til at håndtere mine docker images.

Nu kan jeg pakke og pushe mit docker image til dette registry for derefter at lave min ACA ud fra dette image

Nu kan jeg skabe min ACA

Tirsdag

Onsdag

Når min azure function rammer mit ACA endpoint /train failer den silently. Efter lidt debugging er jeg kommet frem til at den process min ACA står for er så stor at den ikke returnere noget inde for det tidsrum min function forventer. Derfor timer den enten ud eller fejler.

Her skal jeg afkoble min azure function fra min ACA.
Jeg har undersøgt forskellige måder at gøre dette på og er kommet frem til at jeg burde lave min azure function om således den sender en besked til en queue. Her skal en queue-trigger vidergive beskeden til min ACA

Her har jeg omstruktureret min kode en smule

Som man kan se optager min queue trainrequests.

Mit gamle train_model endpoint skal også refaktureres således at den nu sender beskeder til min queue istedet for direkte til min ACA

Her havde jeg nogle problemer hvor formateringen ikke var korrekt på de beskeder der blev sendt og fandt frem til at queue skal have base64

Formateringen var ikke korrekt på beskeden til min queue hvilket gjorde at beskeden blev sat direkte i poison. Azure queue tager kun imod base64 eller base64 kompatible formateringer

Beskeder til queue blev sat direkte i poison

Jeg fandt frem til at problemet ligger i min ACA Som default er en ACA sat til at kunne autoscale ned til 0 hvilket betyder at appen ikke kører. Dette giver status kode 500 i portal og 404 i browseren

En ACA er normalt sat til at scale op igen når den bliver ramt af et http-request.
Min implimentation bruger azure functions hvilket teknisk set er serverside traffic som jeg kunne forstå og derfor trigger den ikke denne autoscaling response.

Her har jeg lavet en queue scalar.

Denne scalar skal stå for at spinne mit image op igen når min queue for en besked

Torsdag

Jeg havde idag et møde med Troels fra Danish Aerospace Company hvor vi diskuterede rammerne for en praktikperiode. Jeg skal være med i deres almindelige hverdags arbejde men vi snakkede også om et spændende potentielt projekt i samarbejde med dem

Han gav mig weekenden til at tænke over om jeg vil takke ja til deres tilbud og så kan jeg skrive under på NDA og lignende næste uge

Fredag

Mandag

Jeg var idag til produktmøde. Vi fik snakket om hvad gruppen har lavet indtil videre i forhold til projektet samt hvad mine personlige fokuspunkter kunne være her den sidste tid.

Jeg fandt burde fokusere mere på min portefølje end jeg har gjort. Jeg blev lidt distraheret af praktiksøgning og ferien og kan godt mærke at portefølje skrivningen ikke er lige så flydende som den tidligere har været.

Mit store problem er at glemme at dokumentere en dag. Så er det svært at gå tilbage og dokumentere dels fordi det kan være svært at huske men også fordi der ikke er nogle billeder af processen

Tirsdag

Jeg vil bruge dagen på at rydde op og justere min portefølje da den er lidt et hængeparti.

Jeg skal udybe nogle af dagene i min logbog med bedere forklaringer.

Jeg skal kigge på mine kortsigtede læringsmål i min læringsplan da jeg ikke har givet dem meget fokus.

Jeg skal tilpasse mine langsigtede læringsmål så de passer overens med hvad min process er mundet ud i.

Jeg skal for det første finde de kilder jeg har brugt men ikke lagt ind i min litteraturliste og så skal jeg gå mere i dybden i forhold til hvordan jeg fandt dem og hvor gode de er

Jeg var også ude hos Danish Aerospace Company og se virksomheden inden jeg takkede ja til deres tilbud om praktikplads og skrive under på NDA. Fik en lille rundvisning og så nogle af de projekter de er igang med samt deres udstyr til ISS og kontrolrummet

Onsdag

Jeg skal idag til processvejledning og arbejde videre på mit get_prediction endpoint.

Mit get_prediction står lidt i samme situation som train_model i og med der kræves nogle ret store biblioteker som ikke understøttes af functions. Derfor skal jeg lave endu en ACA der skal håndtere get_prediction

Torsdag

Jeg kan se at nogle af de hjælper klasser jeg havde skabt

Kommer til at gå igen på tværs af mine applikationer. Efter jeg har fået mit get_prediction endpoint til at virke omdanner jeg disse hjælper klasser til en Python package som alle applikationerne kan bruge.

Jeg har ændret mit get_prediction endpoint så det nu sender en besked til en predictqueue

Jeg har også ændret min predict_logic. Såden ser min implimentation ud nu

Fredag

Jeg havde glemt at jeg kun brugte billeder af droner til at træne modellen så forudsigelsen for alle billeder var altid 1. Her hentede jeg nogle flere dataset fra kaggle med relevante billeder, fly, fugle og tomme landskaber. Her bruger jeg min create labels function til at sørge for at der altid er et tilhørende label til billerne

Her holder jeg drone og no_drone billeder i forskellige blobs. Dette sørger den også for at håndtere

Mandag

Syg

Tirsdag

Jeg vil idag kigge tilbage på mine implimenteringer og rydde lidt op. Sørge for at der er gode kommentarer og lave eventuelle optimeringer

Jeg vil hovedsageligt kigge på nogle af de implimenteringer der ikke kunne lade sig gøre med de teknikker jeg har lært om i mit kursus eks. ReLU activation function i stedet for sigmoid etc.

Derudover syntes jeg min kode virker lidt roddet engang imellem og det er nogle gange svært at få overblikket over hvad der sker. Derfor vil jeg bruge extraction til at segmentere koden ud i mindre functions.

Det gør det også lettere for mig at kommentere på kodens tænkte formål

Onsdag

Efter jeg lavede min create_labels function skulle jeg gentræne min model. Sidste gang jeg trænede den var datasættet lille nok til at dette kunne gøres i en azure function. Nu er datasætter så stort at det skal håndteres på en anden måde

Jeg har hele tiden vidst at azure container app nok ikke er det bedste valg i forhold til træningen da den ikke har gpu muligheder.

Derfor undersøgte jeg hvad man ellers kunne gøre.

Jeg kom frem til at azure batch nok ville være en god service for at træne modellen

Jeg prøvede at implimentere batch således at min azure function get_prediction kaldede min pool

Her skal man give autherization gennem role assignment

Jeg havde dog løbende problemer med at min implimentation ikke virkede gennem azure. Jeg prøvede at troubleshoote dette men jeg fandt ikke frem til en løsning. Selvom jeg med lidt tid sikkert kunne implimentere batch istedet for azure container application og at dette ville øge performance besluttede jeg ikke at invistere mere tid i den retning da jeg gerne vil fokusere på portefølje den sidste tid

Torsdag

gik væk fra batches og implimenterede endu en Azure Container Application til håndtering af forberedelse af datasættet

Her er azure function

Her er queue triggeren

Og her er azure container application implimentationen

Fast api

Logikken

Fredag

Jeg gjorde idag min endelige implimentering færdig.

Mandag

Jeg skal idag til produktmøde og rydde op i porteføljen.

Hovedsageligt skal jeg kigge på mine læringsmål og formuleringerne i min logbog fra de sidste par uger samt min litteraturliste

Jeg skal også begynde at planlægge min video og forberedelse i forhold til mine langsigtede læringsmål

Tirsdag

Portefølje

Onsdag

Portefølje og video

Frederik Tobias Norsk Skjøth

Jeg føler at det er vigtigt at fokusere på læringen bag ens arbejde.

Her har jeg dog selv været i situationer hvor jeg har følt at jeg måske ikke har vidst nok teori for enten at kunne udføre noget i praksis eller om hvor vidt forståelsen for en implimentation helt var der. Her har det dog været en kæmpe hjælp for mig at give mig selv lov til at "lege" med tingene og eksperimentere. Det giver mig motivationen til at fortsætte når teorien har været for tung

Det hænger sig også lidt op af at jeg ofte lære bedst ved at få tingene i hænderne.

For at holde min motivation gennem semestret har jeg gjort brug af flere forskellige læringsstrategier.

Min læring har båret præg af kolbs læringscirkel hele vejen igennem. Som man også kan se gennem min logbog har jeg bygget oven på de samme kompetencer for at nå det endelige mål. Startede småt men simple løsninger og gradvist byggede jeg min kendskab og kunnen op så jeg kunne håndtere mere og mere komplekse implimentationer

For at holde motivationen og koncetrationen på dags basis prøvede jeg pomodoro teknikken efter det blev forslået som en mulighed. Jeg tilpassede den så det passede mig og endte med et blødere men for mig mere effektivt hjælpemiddel. Jeg sikrede at jeg holdte pauser cirka en gang i timen. For mig var det der betød meget egentlig bare det at huske at tage pauser uden at power through i for lang tid af gangen.

Jeg syntes at dette har været det mest spændende og givende semester vi har haft. At kunne styre sin egen læring har givet mig meget motivation og friheden i planlægningen har gjort at jeg har eksperimenteret en del mere end hvad jeg ellers har gjort. Jeg føler at jeg har nået mit oprindelige mål for projektet. At skabe en pipeline for en image classification ML model der kan detektere droner gennem azure. Følesen af at have dannet sig nogle kompetencer på egen hånd giver helt klart noget selvtillid.

At skulle holde sig igang har ikke været så udfordrende som jeg tænkte det ville være. Dog var der en periode omkring ferien hvor praktik søgningen betød meget for mig og tog mit fokus fra semestret.

Jeg har hele tiden haft en plan for hvad der skulle laves for at få kompetencerne til udføre projektet. Her har mit Machine learning kursus klart givet mig en god grundlæggende forståele for faget samt været med til at danne en struktureret start på semestret. I takt med at jeg blev præsenteret for nye principper i både machine learning og cloud samt nye modeller og lign, begyndte jeg at kombinere fagene og brugte dem til at understøtte hindanden. Kurserne havde ikke nogen projekter men jeg fandt på mine egne i takt med at jeg kunne se at mine kompetencer inde for fagene var høje nok til at stå på egne ben. Først med simple modeller der krævede simple azure løsninger og så gradvist mere komplekse modeller indtil jeg til sidst implimenterede vores CNN

Det har virket rigtigt godt at kontinuerligt hoste de modeller jeg har udarbejdet i azure. Der virkede motiverende at bruge viden fra et fag til at lave en sej implimentation i det andet. Det gav mig også de kompetencer jeg skulle bruge til at lave den sidste komplekse implimentation af det Convolutionelle Neurale Netværk

De forskellige møder vi har haft undervejs har givet mig inspiration og været med til at guide min process men det har også været givende at kunne give gode råd til andre der måske står i en situation man selv har været i.

Machine Learning

Jeg vil kunne implementere en simpel lineær regressionsmodel i Python vha. NumPy og Jupyter Notebooks.

Jeg vil kunne forklare og anvende squared error cost function og hvordan den bruges til at optimere modelparametre (w og b).

Jeg vil kunne visualisere en cost function med både 2D og 3D surface plots, og forklare hvad gradient descent gør for at minimere den.

Jeg vil kunne redegøre for forskellen mellem konvekse og ikke-konvekse funktioner og deres betydning for ML-optimering.

Cloud Computing

Jeg vil kunne forklare forskellene mellem IaaS, PaaS og SaaS, og beskrive hvem der har ansvar for hvilke komponenter i hver model (shared responsibility model).

Jeg vil kunne navigere i Azure-portalen og oprette virtuelle maskiner i et testmiljø gennem Azure Learn.

Jeg vil kunne beskrive grundlæggende infrastrukturelementer i Azure såsom availability zones og region pairs.

Jeg vil kunne præsentere fordele og ulemper ved offentlige, private og hybride cloud-miljøer samt deres anvendelsesområder.

Machine Learning

Jeg vil kunne implementere en Multiple Linear Regression model i Python, herunder databehandling med pandas, beregning med numpy og visualisering med matplotlib

Jeg vil kunne forklare og anvende gradient descent-algoritmen til at optimere modelparametre.

Jeg vil kunne evaluere en regressionsmodel vha. cost function (MSE) og R² score for at vurdere nøjagtighed.

Jeg vil kunne visualisere både træningsprocessens konvergens og forskellen mellem forudsagte og faktiske værdier med plot.

Jeg vil kunne analysere og reflektere over datasetkvalitet og dets betydning for modelens præcision (f.eks. rensede vs. realistiske datasæt).

Cloud Computing

Jeg vil kunne oprette en Azure resource group og Blob Storage til håndtering af træningsdata i skyen.

Jeg vil kunne konfigurere forbindelsen mellem min ML-model i Python og Azure Blob Storage vha. BlobServiceClient

Jeg vil kunne indlæse og forbehandle data direkte fra cloud storage og bruge dette i en ML-workflow.

Jeg vil kunne monitorere og analysere brugen af mine cloud-ressourcer gennem Azure dashboardet (transaktioner/API-logs).

Jeg vil kunne evaluere fordele ved at integrere ML-modeller med cloud-miljøer ift. skalerbarhed og automatisering.

Machine Learning

Jeg vil kunne forklare forskellen mellem lineær og polynomiel regression og identificere, hvornår polynomier er nødvendige.

Jeg vil kunne implementere polynomial feature generation og vælge optimal grad (degree) baseret på model performance (R²).

Jeg vil kunne analysere og rangere vigtige features i et dataset ud fra vægte og korrelation.

Jeg vil kunne bruge datavisualisering (heatmaps, regression curves) til at identificere overflødige eller stærkt korrelerede features og evaluere modeltilpasning (underfitting/overfitting).

Cloud Computing

Jeg vil kunne implementere en REST API med Flask til at kalde en ML-model og teste endpoints lokalt.

Jeg vil kunne hoste en container-baseret ML-app via Azure Web App og forsøge fejlfinding på HTTP-metodeproblemer (f.eks. 405 fejl).

Jeg vil kunne designe og udrulle en Azure Function App med HTTP trigger, der både træner og henter forudsigelser fra en model.

Jeg vil kunne gemme og hente ML-modeller og data i Azure Blob Storage, og integrere det i serverless funktioner.

Jeg vil kunne benytte versionering, GitHub og CI/CD til at opdatere og genudrulle ML-applikationer i skyen.

Machine Learning

Jeg vil kunne forklare det konceptuelle grundlag for neurale netværk, herunder hvordan hvert lag udfører parallelle logistiske regressioner.

Jeg vil kunne redegøre for forward propagation og hvordan en inputvektor transformeres gennem lagene til en forudsigelse.

Jeg vil kunne forstå forskellen på manuelle feature engineering teknikker og automatiske feature learning i neurale netværk.

Jeg vil kunne implementere grundstrukturen af et simpelt neuralt netværk uden brug af frameworks for at opnå bedre intuition.

Jeg vil kunne forberede billeder til input i et neuralt netværk ved at omdanne pixeldata til en inputvektor (f.eks. til face recognition).

Jeg vil kunne forklare sammenhængen mellem neurale netværk og logistisk regression og hvordan de relaterer til tidligere lærte modeller som lineær og polynomiel regression.

Cloud Computing

Machine Learning

Jeg vil kunne forklare hvordan convolutional lag fungerer, og hvordan de udtrækker visuelle mønstre via filtre (kernels) fra billeddata.

Jeg vil kunne implementere en simpel CNN-arkitektur i PyTorch, inklusiv convolution, batch normalization, aktiveringsfunktioner (ReLU, Sigmoid), pooling og fully connected lag.

Jeg vil kunne beskrive forskellen på max pooling og average pooling og hvordan det hjælper med at reducere dimensionalitet og forbedre robusthed.

Jeg vil kunne forklare hvordan CNN’er gradvist lærer fra low-level features til high-level features, og kunne visualisere dette.

Jeg vil kunne klargøre og strukturere billeddata (inkl. labels) til brug i træning og validering, herunder opdeling i “drone” og “no_drone”-klasser.

Cloud Computing

Jeg vil kunne oprette nødvendige Azure-ressourcer (Storage Account, Blob Containers, Functions) til brug for cloud-hosting af ML-modeller.

Jeg vil kunne deploye en CNN-model gennem Azure Function Apps med HTTP endpoints, og forstå hvordan man strukturerer funktioner som train_model og get_prediction.

Jeg vil kunne fejlfinde deployment-processer fra VS Code til Azure og forstå almindelige fejltyper (som fx. “silent fails” uden logs).

Jeg vil kunne håndtere model-træning og gemme trænet model som en .pkl-fil i Azure Blob Storage til videre brug.

Jeg vil kunne designe en cloud pipeline til billedklassifikation fra preprocessing til prediction, styret af Azure Functions.

Machine Learning

Jeg vil kunne containerisere en Python-baseret trænings-API ved hjælp af Docker og strukturere mit projekt med relevante filer (Dockerfile, requirements.txt, servicekode).

Jeg vil kunne oprette og bruge et Azure Container Registry (ACR) til at gemme og versionere Docker-images.

Jeg vil kunne oprette og konfigurere en Azure Container App (ACA) ud fra mit Docker-image og forstå dets rolle i en træningspipeline.

Jeg vil kunne identificere og håndtere fejl ved kald til ACA-endpoints (f.eks. manglende autoscaling eller timeouts ved store workloads).

Jeg vil kunne definere og teste autoscaling-regler i ACA baseret på Azure Queue-trigger (f.eks. antal beskeder i køen).

Cloud Computing

Jeg vil kunne implementere en Azure Function med en queue-trigger, som reagerer på beskeder i en Azure Storage Queue.

Jeg vil kunne sende base64-kodede beskeder til en queue og sikre korrekt formatering for at undgå parsing-fejl.

Jeg vil kunne opdele min træningsworkflow i event-drevne komponenter (f.eks. Function → Queue → ACA).

Jeg vil kunne refaktorere eksisterende HTTP-endpoints (fx train_model) til en asynkron queue-beskedhåndtering.

Jeg vil kunne analysere og forbedre systemets robusthed ved at isolere ansvar og gøre processen mere skalerbar og mindre afhængig af synkron kommunikation.

Machine Learning

Jeg kan forklare forskellen på ReLU og Sigmoid og anvende ReLU som aktiveringsfunktion i min model for bedre performance.

Jeg kan anvende metoder til at forbedre modelens robusthed, herunder billedvalidering, korrekt split mellem trænings- og valideringsdata samt sikring af diversitet i datasættet.

Cloud Computing

Jeg kan containerisere en træningsapplikation i Python med Docker og deploye den til en Azure Container App (ACA).

Jeg kan fejlsøge og løse problemer i mine Azure-deployments, herunder manglende autorisation, fejlslået kø-forbindelse og funktioner der ikke trigger som forventet.

Frederik Tobias Norsk Skjøth

Machine Learning

Viden

  • Jeg har viden om klassiske og dybe ML-algoritmer (lineær, polynomiel regression, logistisk regression, neurale netværk, CNN).

  • Jeg har viden om ML-pipelines fra dataforberedelse til modeltræning og evaluering.

  • Jeg har viden om feature engineering, overfitting/underfitting og modelkompleksitet.

  • Jeg har viden om ML’s anvendelse i billedgenkendelse og regressionsproblemer.

Færdigheder

  • Jeg kan udvikle, træne og validere ML-modeller til både numeriske data og billeder.

  • Jeg kan implementere ML-workflows i Python ved hjælp af NumPy, pandas og PyTorch.

  • Jeg kan anvende og vurdere gradient descent, R²-score og loss-funktioner til evaluering.

  • Jeg kan anvende visualiseringer (heatmaps, kurver) til at optimere ML modeller.

Kompetencer

  • Jeg kan selvstændigt designe og implementere ML-løsninger til praktiske problemstillinger.

  • Jeg kan relatere ML-teknikker til bredere fagområder som softwareudvikling og AI.

  • Jeg kan reflektere over modelens begrænsninger, datakvalitet og bias.

Cloud Computing

Viden

  • Jeg har viden om Cloud-modeller og arkitektur (SaaS, PaaS, IaaS)

  • Jeg har viden om event-drevne arkitekturer, serverless computing (Azure Functions),

  • Jeg har viden om containerbaserede systemer (Azure Container Application, Azure batch & pool).

  • Jeg har viden om datastyring og opbevaring i skyen (Blob Storage, File share, Queues) og relateret sikkerhed og skalerbarhed.

Færdigheder

  • Jeg kan containerisere applikationer (Docker) og udrulle dem til skyen via Azure Container Registry og Container Apps.

  • Jeg kan opsætte pipelines til træning og inferens med integration af Azure Queues og Functions.

  • Jeg kan udvikle REST API’er og event-drevne funktioner, som kommunikerer med cloud-tjenester.

  • Jeg kan fejlsøge og overvåge cloud-ressourcer gennem logs og metrics, etc. (Azure Portal, Application Insights).

Kompetencer

  • Jeg kan selvstændigt designe og udrulle ML-løsninger i cloudmiljøer.

  • Jeg kan automatisere ML-workflows med event-triggers og en microservice arkitektur med decentrale komponenter.

  • Jeg kan vurdere tradeoffs mellem latency, skalerbarhed og omkostninger i cloud-arkitekturer.

Frederik Tobias Norsk Skjøth

Machine Learning

Cloud Computing

Andet

Frederik Tobias Norsk Skjøth

Scroll to Top