I arbejdet med dyb læring og neurale netværk er en af de grundlæggende processer at træne og teste et modelnetværk, der kan anvende inputdata til at generere præcise forudsigelser. Et konkret eksempel på denne proces kan ses i et projekt, hvor man anvender dybe neurale netværk til at forudsige jordskælvsenerginiveauer baseret på data om jordskælvsplacering og dybde. Dette indebærer at skabe et struktureret træningssæt, vælge den rette funktion til træning af netværket og evaluere de opnåede resultater.
Når man begynder at opbygge et neuralt netværk til et projekt som jordskælvsforudsigelse, starter man ofte med at definere træningsdataene. Her bruges en matrix, hvor hver inputvariabel er arrangeret som en sekvens af kolonner. I dette tilfælde består træningssættet af 4 variabler: LATI (breddegrad), LONG (længdegrad), DEPTH (dybde) og HOUR (tidspunkt). Disse variabler er samlet i en matrix, der indeholder 3000 dataindsamlinger, og de tildeles en lokal variabel kaldet trainData. Målvariablen, MAG (jordskælvsstyrke), bliver derefter tildelt en separat matrix targetData, som har dimensionen 1x3000.
Når træningsdataene er forberedt, vælges en passende træningsfunktion. En populær funktion er trainlm(), som ofte bruges til at optimere vægtene i det neurale netværk baseret på fejlfunktionen. Andre træningsfunktioner som trainbr() eller trainscg() kan også anvendes, afhængigt af den ønskede modeltype og præference. I dette tilfælde er netværket bygget som et "shallow" neuralt netværk, hvor antallet af noder eller neuroner i hvert lag er defineret som 10. Når netværkets struktur er oprettet, kan det trænes ved hjælp af train() funktionen, som tager både trænings- og måldata som input.
Når netværket er trænet, kan vi begynde at teste det ved at generere forudsigelser baseret på de tidligere lærte mønstre. Dette gøres ved at bruge den trænet model til at beregne de forudsigte værdier, og derefter sammenligne dem med de faktiske målte værdier. Fejlene mellem de faktiske og forudsigte værdier beregnes ved hjælp af funktionen gsubtract(), og præstationen af modellen evalueres ved at bruge perform() funktionen, som returnerer en performance score, typisk baseret på Root Mean Squared Error (RMSE).
For at visualisere netværkets struktur og resultater, kan funktionerne view() og forskellige plottingfunktioner bruges. For eksempel giver plotperform() et grafisk billede af netværkets træningsperformance, mens plottrainstate() og ploterrhist() viser træningstilstanden og fejlhistogrammerne. Yderligere kan plotregression() hjælpe med at analysere forholdet mellem de faktiske og forudsigte data.
Når man arbejder med dybe neurale netværk, er det vigtigt at forstå, at ikke alle lag nødvendigvis er nødvendige i enhver applikation. Typisk består et dybt neuralt netværk af en række lag, der hver især udfører specifikke funktioner. De grundlæggende lag i de fleste dybe netværk inkluderer:
-
Inputlag: Bruges til at samle inputdata og sende dem til netværket.
-
Fuldt forbundne lag: Forbinder alle skjulte lag og muliggør kommunikation mellem lagene.
-
Sekvenslag: Anvendes til at behandle sekventielle data.
-
Aktiveringslag: Udfører ikke-lineære transformationer mellem outputtet fra et lag og inputtet til det næste.
-
Udløbs- eller outputlag: Omformer de sidste lagoutputs til gyldige outputværdier.
Udover disse grundlæggende lag, kan der være behov for mere specialiserede lag afhængigt af den specifikke opgave. For eksempel kræver billedklassifikation et konvolutionslag, mens det kan være nødvendigt at bruge et kombineret lag for at integrere flere relaterede lag. Desuden kan et normaliseringslag være nyttigt til at håndtere forskelle i inputdataenes skala.
Når et dybt neuralt netværk bygges, kan det være nødvendigt at skræddersy lagene til den specifikke opgave. Hvis de lag, der kræves, ikke er tilgængelige i standard Deep Learning Toolbox, kan man selv definere et brugerdefineret lag. MATLAB giver mulighed for at oprette sådanne brugerdefinerede lag og kontrollere, om de er GPU-kompatible og fungerer korrekt.
For et mere avanceret eksempel, kan man benytte funktionerne trainnet() og trainingOptions() til at træne et dybere netværk, der arbejder med sekvensdata, såsom LSTM (Long Short-Term Memory) lag, som er nyttige til at arbejde med tidsseriedata. I et sådant netværk kan inputlaget acceptere 3000 datapunkter, og de nødvendige LSTM-lag kan bruges til at forstå og bearbejde de tidsmæssige afhængigheder i dataene.
Når man arbejder med dybe læringsalgoritmer, er det essentielt at forstå den overordnede struktur af netværket og de specifikke lag, der anvendes til at optimere og tilpasse modellen til den konkrete opgave. Ved at vælge de rette lag og træningsmetoder kan man skabe en model, der effektivt forudsiger jordskælvsenerginiveauer og dermed bidrager til en bedre forståelse af naturfænomener gennem maskinlæring.
Hvordan Evaluere en Trænet Model til Billedeklassifikation af Frugter?
Når man arbejder med dyb læring og billedeklassifikation, er det essentielt at kunne evaluere den model, der er blevet trænet. Denne proces indebærer at bruge testdata, sammenligne de forudsigelser, der er blevet lavet, med de faktiske resultater og vurdere præstationen af modellen. I dette afsnit kigger vi nærmere på koden og metoderne, der anvendes til at evaluere en model, som er trænet til at klassificere frugt baseret på billeder.
Først og fremmest er det nødvendigt at erklære og initialisere nogle lokale variabler, som vil blive brugt i selve evalueringsprocessen. Dette omfatter blandt andet loopnummeret n, antallet af klasser M, antallet af testbilleder N, samt den totale mængde af testbilleder T. Derudover er det vigtigt at holde styr på de sande og falske resultater, hvilket gøres gennem variablerne numTrue og numFalse.
I den første del af koden defineres en størrelse (sz) for et tabelobjekt, hvor dimensionen angives som [20 2], hvilket betyder, at der oprettes et array med dimensionerne 20 × 2. Her vil de to argumenter, cType og cNames, blive fyldt ind senere, som en del af evalueringen. De fire tabeller, der oprettes, bruges til at holde styr på de faktiske frugtklasser og de forudsigte resultater. En cellearray, csResult{}, oprettes til at indeholde disse tabeller.
Efter dette er det nødvendigt at skifte til den mappe, hvor den trænede model er gemt, hvilket gøres med kommandoen cd. Denne model indlæses derefter i projektet ved hjælp af kommandoen load, og den bliver midlertidigt gemt i en lokal variabel, imgNet. Denne model bliver nu klar til at blive anvendt til klassificering af testbilleder.
Testdataene, som skal bruges til evalueringen, hentes ved at ændre biblioteket til den mappe, der indeholder testbillederne. Her benyttes funktionen dir til at få en liste over alle mapper, som indeholder de testede frugtbilleder. Mappestrukturen under testdataene er delt op i flere undermapper, som hver repræsenterer en frugttype, såsom "Tomato 3", "Tomato 4" og så videre. I denne del af koden er det vigtigt at bemærke, hvordan undermapperne behandles og hvordan billederne fra hver undermappe hentes.
I den næste del af koden bruges en dobbelt for()-loop til at læse billederne og klassificere dem ved hjælp af den trænede model. For hver billede i en undermappe bruges funktionen imread() til at hente billedet og gemme det i en array kaldet cImage{}. Efter at et billede er blevet indlæst, bruges funktionen classify() til at klassificere billedet med den trænede model. Den klassifikation, som modellen returnerer, bliver sammenlignet med den faktiske klasse, som billedet tilhører. Resultaterne bliver gemt i en cellearray result[], der bruges til at holde styr på både den faktiske frugtklasse og den forudsigte klasse.
Når hele loopet er færdigt, vil den sidste del af koden evaluere præstationen. Hvis den forudsigte klasse svarer til den faktiske klasse, øges tælleren numTrue. Hvis de ikke stemmer overens, øges tælleren numFalse. I slutningen af evalueringsprocessen vises resultatet ved hjælp af kommandoen disp(), og et sammendrag af, hvor mange billeder der blev korrekt klassificeret (matched) og hvor mange der ikke blev korrekt klassificeret (unmatched), bliver præsenteret.
Evalueringen af den trænede model giver en vigtig indsigt i, hvor godt modellen fungerer med testdata. Resultatet af denne evaluering kan bruges til at justere og forbedre den model, der er blevet trænet. Hvis modellen opnår en høj nøjagtighed, som i eksemplet, hvor der opnås 100% korrekt klassificering, kan vi være sikre på, at modellen har lært de relevante funktioner i billeddataene.
Det er dog vigtigt at forstå, at selv om modellen præsterer godt på testdata, kan der stadig være udfordringer, når modellen konfronteres med nye, usete data. Derudover kan faktorer som billedkvalitet, baggrundsstøj og frugtens variation også påvirke klassificeringen. Derfor er det nødvendigt at tage højde for disse faktorer og fortsætte med at forbedre og justere modellen for at opnå bedre resultater i fremtidige anvendelser.
Hvordan man anvender regressionsalgoritmer til aktieprædiktion i MATLAB
I udviklingen af aktieprædiktionsmodeller gennem regressionsalgoritmer er det essentielt at forstå og korrekt implementere en række teknikker, som sikrer pålidelige og præcise forudsigelser. En af de første opgaver i sådanne projekter er at normalisere de indgående data for at sikre, at modellen behandler informationerne på en ensartet måde. Denne proces forhindrer potentielle kompileringfejl og forbedrer modellens ydeevne.
For at komme i gang skal man først anvende en normalisering på den afhængige variabel, i dette tilfælde aktiekursen (Close), og gemme det normaliserede resultat i en lokal variabel, Y. Denne normalisering er vigtig, da den standardiserer dataene og reducerer risikoen for, at store værdier dominerer modellens beregninger.
Herefter benyttes funktionen fitrensemble() til at træne den første model, mdl_1. For at vurdere præstationen af denne model er det nødvendigt at oprette en testmatrix, Xnew, baseret på testdata, som kan findes i et dataset som Google_Stock_Price_Test.csv. Denne matrix bruges derefter til at forudsige aktiekurserne ved hjælp af funktionen predict(), og de forudsete værdier gemmes i variablen Y1.
Dernæst skal de faktiske aktiekurser fra testdatasættet normaliseres, og disse værdier gemmes i en lokal variabel, Yact, som kan anvendes til at sammenligne de forudsigelser, som modellen har lavet. Når man har de nødvendige data, kan den næste model trænes ved at anvende funktionen fitnlm(), som skaber en ikke-lineær regressionsmodel. Her genereres en tabel (tbl), der indeholder både de normaliserede input og responsvariabler.
En central del af denne modeltræning involverer opbygningen af en model med ni koefficienter og fire inputvektorer. Disse inputvektorer er defineret af kolonneindholdet fra datasættet. Initialiseringen af disse koefficienter spiller en væsentlig rolle i modellens succes. En nyttig strategi er at vælge initialværdier, der kan estimeres fra et lignende projekt, som er bygget i MATLAB’s Curve Fitting App.
Når modellen er trænet, evalueres den på en ny datasæt ved hjælp af funktionen feval(), som returnerer en forudsigelse, som gemmes i variablen Y2. For at gøre evalueringen mere effektiv kan man benytte TreeBagger-funktionen, som anvender beslutningstræer til at forbedre prædiktionsnøjagtigheden. Ved at opsætte en formel som Close ~ Open + High + Low + Volume trænes modellen, og beslutningstræerne integreres med de ønskede parametre, herunder et passende antal træer og den regressionsmetode, der benyttes.
Når modellen er færdigtrænet, evalueres den igen ved hjælp af de testdata, der er blevet forberedt. De forudsigelser, der genereres, gemmes i variablen Y3. Det næste skridt i projektet er at visualisere og sammenligne præstationen af de tre modeller, der er blevet trænet. MATLAB tilbyder en funktion til at generere flere figurer samtidigt, så det er muligt at plotte forudsigelserne for hver model samt de faktiske aktiekurser.
En vigtig del af visualiseringen er at fjerne eventuelle DC-offsets, der kan påvirke sammenligningen af de tre modeller. Dette gøres ved hjælp af funktionen detrend(), som justerer de forudsigte værdier for at gøre sammenligningen lettere at tolke. Det er også vigtigt at beregne fejlene mellem de forudsigte værdier og de faktiske aktiekurser. Disse fejl kan vises i et histogram og analyseres for at give en indikation af, hvilken model der præsterer bedst.
I den afsluttende analyse sammenlignes de tre modeller ud fra deres Root Mean Squared Error (RMSE), og det afsløres, at modellen, der anvender TreeBagger, giver den bedste forudsigelse af aktiekurserne, efterfulgt af modellen baseret på fitrensemble(). Den sidste model, der benytter fitnlm(), er mindre præcis i sin forudsigelse.
Vigtigst af alt er at forstå, at mens de absolutte værdier af aktiekurserne ikke nødvendigvis er præcise i forudsigelserne, er det den overordnede tendens, som modellerne forsøger at fange. At forudsige aktiekursens udvikling og identificere de rette tidspunkter for investering er en langt mere kompleks opgave, hvor forudsigelsens nøjagtighed ikke kun afhænger af den valgte model, men også af den måde, hvorpå dataene bliver behandlet, normaliseret og evalueret.

Deutsch
Francais
Nederlands
Svenska
Norsk
Dansk
Suomi
Espanol
Italiano
Portugues
Magyar
Polski
Cestina
Русский