$$\rightleftharpoonup{xx}$$
$$\longleftharp{xx}$$,
$$\longrightharp{xx}$$,
Ethische verklaring
Deze studie was volledig gebaseerd op publieke, geanonimiseerde ECG-gegevens die van PhysioNet waren gedownload. Alle datasets die in deze studie zijn gebruikt, zijn oorspronkelijk verzameld met toestemming van de proefpersonen en met ethische goedkeuring van de respectievelijke gegevenseigenaren. Dit onderzoek vereiste geen gegevensverzameling, experimenteel werk met menselijke of dierlijke proefpersonen, of persoonlijke identiteitsinformatie van de patiënt. Daarom werd er geen aanvullende ethische beoordeling aangevraagd.
Methodologie
Figuur 2 illustreert de workflow van de voorgestelde architectuur.
Gegevensverzameling
ECG-gegevens worden verzameld uit de PhysioNet Database, een populaire verzameling fysiologische signalen. Meerdere datasets worden uit de database gehaald. Deze datasets worden samengevoegd tot één hoofddataset die verschillende ECG-signaalklassen bevat.
Gebruikte datasets
Deze studie gebruikte verschillende openbaar beschikbare ECG-datasets om een deep learning-model voor aritmieclassificatie te ontwikkelen en te evalueren. De selectie van deze datasets werd zorgvuldig uitgevoerd, rekening houdend met hun diversiteit qua patiëntdemografie en de verscheidenheid aan artritmetypen, om ervoor te zorgen dat het voorgestelde model goed presteert in verschillende scenario's9. Voor deze studie werden alleen Lead-I-gegevens uit de MIT-BIH Aritmie Database, de MIT-BIH Supraventriculaire Aritmie Database, de St. Petersburg INCART 12-lead Arrhythmia Database en de Sudden Cardiac Death Holter Database samengevoegd. Deze datasets staan bekend om hun hoogwaardige, geannoteerde ECG-opnames die een breed spectrum aan aritmieklassen omvatten.
De bovenstaande gecombineerde datasets bevatten patiëntdemografie, opnameapparatuur, bemonsteringsfrequenties en instellingen. De hierboven genoemde variabiliteit in het model verbetert de generalisatie door het bloot te stellen aan een breed scala aan ECG-morfologieën, ruis en ritmes.
Beschrijving van datasets
MIT-BIH aritmie-database
De MIT-BIH Aritmie Dataset bevat 48 ECG-opnames van een half uur, genummerd 100-234. Elke plaat bevat tweekanaals ECG-signalen gedigitaliseerd met 360 samples per seconde. Gegevens worden opgeslagen in .dat-, .hea- en .atr-formaten.
MIT-BIH supraventriculaire aritmie-database
Dit is een specifieke subset van de MIT-BIH-databases. De MIT-BIH Supraventriculaire Aritmatie Database bevat 78 volledige ECG-opnames, variërend van 30 minuten tot enkele uren, genummerd 801-811. Elke plaat bevat tweekanaals ECG-signalen, omgezet naar digitale vorm met 128 samples per seconde.
De Sint-Petersburg INCART 12-lead aritmie-database
Deze database bevat 75 geannoteerde opnames van 32 Holter-monitoren. Elke opname duurt 30 minuten en bevat 12 standaardleads, elk gesampled op 257 Hz. De signaalsterkte varieert tussen 250 en 1100 analoog-naar-digitaal-omzetters per millivolt.
Onvoorziene hartdood Holter-database
Deze dataset is een van de vele open-access Holter-opnames die feitelijke gevallen van ventrikeltachycardie (VT) en ventrikelfibrilleren (VF) vastleggen. Beide kunnen leiden tot onverwachte hartdood. Elke plaat duurt 24 uur en wordt gesampled op 250 Hz.
Datavoorverwerking
In deze studie werden vier openbare ECG-databases met verschillende steekproeffrequenties gebruikt: MIT-BIH Aritmie (360 Hz), MIT-BIH Supraventriculaire Aritmie (128 Hz), St. Petersburg INCART 12-lead (257 Hz) en Sudden Cardiac Death Holter (250 Hz). Om te garanderen dat alle gegevens consistent waren en tijdens modeltraining konden worden gecombineerd, werden alle ECG-signalen opnieuw bemonsterd tot een gemeenschappelijke frequentie van 360 Hz, wat overeenkomt met de MIT-BIH Arrhythmia Database en vaak wordt gebruikt als standaard in ECG-onderzoek. Resampling werd uitgevoerd via bandbeperkte interpolatie; aanvankelijk werden de ECG-signalen laagdoorlaatgefilterd om aliasing te voorkomen, en vervolgens werd een sinc-gebaseerde reconstructiekern gebruikt voor interpolatie, gevolgd door definitieve resampling bij 360 Hz. Na het opnieuw bemonsteren werd elk signaal verdeeld in vensters van 180 samples, ongeveer gelijk aan 0,5 s aan data, zodat alle datasets dezelfde tijdresolutie hadden. Deze standaardisatie maakte het mogelijk om signalen uit verschillende databases te combineren voor training en testen, waardoor het model consistente patronen in de loop van de tijd leerde.
Preprocessing omvatte verschillende belangrijke stappen om de kwaliteit van de invoerdata te waarborgen:
Datasegmentatie:
Na het herbemonsteren werd elk ECG-signaal verdeeld in vensters van vaste lengte van 180 samples. Dit komt overeen met ongeveer 0,5 s signaalduur bij een bemonsteringsfrequentie van 360 Hz. Dit onderzoek gebruikte een vast, niet-overlappend schuifvenster voor segmentatie. Elk venster verzamelde een continue reeks ECG-monsters. De studie koos voor een venster van 180 steekproeven omdat een interval van 0,5 s voldoende is om een volledige hartcyclus of de belangrijkste onderdelen ervan vast te leggen: de P-golf, QRS-complex en T-golf, voor typische hartslagen bij volwassenen. Aan elk segment werd een klasselabel toegekend op basis van de annotatie in het midden van het segment. Op deze manier kwam het segmentlabel overeen met de hoofdvorm van hartslag binnen dat venster. De sliding window-methode paste deze segmentatiefunctie toe:

waarbij si het ECG-monster is op tijdstip i.
Normalisatie:
Ik normaliseerde de gesegmenteerde ECG-gegevens met Min-Max schaal om ervoor te zorgen dat alle kenmerken waarden hadden tussen 0 en 110.

Deze stap helpt de convergentie van het model tijdens de training te versnellen.
Klassebalans met SMOTE
Normale (N) slagen waren veel groter dan abnormale hartslagklassen in de ECG-dataset, die een significante klasse-onbalans liet zien. Na segmentatie, normalisatie en train-test splitsing werd de trainingsdataset onderworpen aan de Synthetic Minority Over-sampling Technique (SMOTE) om dit probleem aan te pakken.
Er werd een 180-dimensionale featureruimte gebruikt om elk ECG-segment weer te geven, bestaande uit 180 genormaliseerde monsters. SMOTE gebruikte de Euclidische afstand om de k dichtstbijzijnde buren van elke minderheidsklasse (k = 5) binnen zijn eigen klasse te bepalen. SMOTE werd alleen toegepast op de trainingsgegevens, die werden opgesplitst in 70% trainings- en 30% testsets met behulp van gestratificeerde steekproeven. Op deze manier werden er geen kunstmatige monsters aan de testset toegevoegd, waardoor de testresultaten niet werden beïnvloed door het overbemonsteringsproces. De testgegevens bleven ongewijzigd, behielden de oorspronkelijke klassenverdeling en werden alleen gebruikt om het model eerlijk te evalueren. Als gevolg hiervan tonen de hoge prestatieresultaten uit deze studie het werkelijke vermogen van het model aan om te generaliseren, niet door overfitting of opgeblazen scores door het toevoegen van extra steekproeven.
Trein-test splitsing:
Na preprocessing en class-filtering werd de dataset verdeeld in trainings- en testsubsets met een verdeling van 70%–30% via gestratificeerde willekeurige steekproeven. Deze stratificatie is gebaseerd op de klasselabels om ervoor te zorgen dat de relatieve verhoudingen van elke hartslagklasse behouden blijven in de trainings- en testsets.
De splitsing werd uitgevoerd met een willekeurig seed voor reproduceerbaarheid. Elk ECG-segment verscheen exclusief in de trainings- of testset. Om bias en datadeviatie te voorkomen, werd elke preprocessingstap die de datadistributie kon beïnvloeden (namelijk class balancing via SMOTE) pas na splitsing uitgevoerd en uitsluitend op de trainingsdata.
In dit opzicht vermindert het splitsingsproces door het behouden van klasseverhoudingen, het gebruik van willekeurige stratificatie en het strikt scheiden van steekproeven in trainings- en testsets, de kans op bias in de steekproeven, waardoor prestatiemetrics de generalisatie van het model weerspiegelen in plaats van data-specifieke residuen.
Datasetsplitsing en klassenverdeling
De uiteindelijke dataset werd opgesplitst in trainings- en testsets, waarbij 70% voor training en 30% voor testen was. Na het toepassen van SMOTE werd de klassenonbalans verminderd, waardoor elk type aritmie goed vertegenwoordigd was in zowel de trainings- als testsets. In totaal werden 3.966.620 ECG-segmenten gebruikt voor training, terwijl 112.575 ECG-segmenten werden gebruikt voor tests. De grote hoeveelheid data, gecombineerd met de verscheidenheid aan artritmetypen, maakte het mogelijk een model te creëren dat effectief verschillende artritmetypen identificeert in echte ECG-signalen. Deze studie gebruikt deep learning-modellen om ECG-aritmieën te classificeren. De vijf hartslagtypes, namelijk Normaal (N), Linkerbundeltakblok (L), Rechter Bundeltakblok (R), Atriumvoortijdige Beat (A) en Voortijdige Ventriculaire Contractie (V), werden gekozen in overeenstemming met de gestandaardiseerde beatannotaties in de MIT-BIH Arrhythmia Database en AAMI-richtlijnen voor ECG-beatannotatie. Alle vijf hier genoemde beat-annotaties omvatten significante hartaandoeningen die binnen de brede categorie aritmieën vallen en onderscheidende golfvormkenmerken vertonen in de ECG-signalen rond de P-, QRS- en T-golven.
Bovendien behoren deze klassen tot de meest voorkomende en consequent gelabeld in openbare ECG-databases, waardoor het makkelijker is hun effectiviteit te testen in vergelijking met andere ECG-gebaseerde hartritmeclassificatiemethoden. De datasets werden opgesplitst met een cross-patient methode. Deze opstelling zorgde ervoor dat ECG-segmenten van één patiënt niet tegelijkertijd in zowel de trainings- als testsets zouden verschijnen. Zodra die splitsing plaatsvond, werd SMOTE alleen toegepast op de trainingsset. De testset bleef vrij van synthetische monsters en herhaalde temporele vensters. Dit alles helpt om overlap op segmentniveau te voorkomen en ondersteunt echte generalisatie bij patiënten die niet eerder zijn gezien.
Klassenverdeling voor en na SMOTE:
De oorspronkelijke dataset had een aanzienlijke onevenwichtigheid tussen klassen, met een groot aantal Normal (N) beats en minder samples voor de abnormale klassen. Voordat SMOTE werd gebruikt, hadden de trainingsgegevens ongeveer 133.320 normale (N), 8.075 linker bundel tak blok (L), 10.431 rechter bundel vertakkingsblok (R), 4.489 atrium voortijdige beat (A) en 60.682 voortijdige ventrikelcontractie (V) segmenten. Om het onevenwicht aan te pakken, werd SMOTE alleen toegepast op de trainingsset, waarbij het aantal steekproeven in de minderheidsklassen werd verhoogd om overeen te komen met de meerderheidsklasse. Na de uitbreiding had elke klas 793.324 segmenten, wat resulteerde in een totaal van 3.966.620 ECG-segmenten voor training. De testset, die uit 112.575 segmenten bestond, behield zijn oorspronkelijke klasseverdeling en werd niet overbemonsterd. Deze aanpak zorgde voor een eerlijke en onbevooroordeelde beoordeling van de prestaties van het model.
Opleiding en inferentie
keek naar de rekenefficiëntie door de trainings- en inferentieprestaties te controleren op een NVIDIA RTX 3050 GPU met 6 GB geheugen. Het trainingsproces duurde ongeveer 3,2 uur voor 60 epochs. De inferentielatentie bedroeg gemiddeld 0,45 ms per segment van 180 samples, wat realtime gebruik mogelijk maakt. Het geheugengebruik op de GPU bereikte een piek van 4,2 GB, en het model heeft slechts 1,8 miljoen parameters, waardoor het licht aanvoelt naast de meeste transformator-ECG-opstellingen.
Het trainings- en inferentieproces bestaat uit de volgende stappen:
Trainingsopzet: Trainingsparameters, zoals leersnelheid, batchgrootte en tijdperken, worden gedefinieerd.
Modeltraining: Het CNN-Transformer-model is getraind op de trainingsdata.
Validatie: Na training worden de validatienauwkeurigheid en -verlies van het model gecontroleerd. Als de prestaties goed zijn, wordt het model gered. Als de prestaties slecht zijn, herhaalt de pijplijn zich met andere trainingsparameters, teruggaand naar de parameterinstellingsstap.
Modelarchitectuur
De hele CNN-Transformer-opstelling bestaat uit vier hoofdonderdelen: convolutionele feature-extractie, een projectielaag, de transformatorencoder en tenslotte de classificatiekop. Het convolutionele blok begint met een eendimensionale convolutionele laag met 32 filters, een kerngrootte van 3, een stap van 1 en opvulling van 1, gevolgd door een ReLU. Het vermindert de inhoud met max-pooling, kernelgrootte 2, om de temporele resolutie van het signaal te verkorten. Na die eerste convolutielaag volgt er nog een met 64 filters, dezelfde kernelgrootte 3, stride 1, padding 1, opnieuw ReLU, en nog een max-pooling met grootte 2. De output van dit alles wordt afgevlakt, door een lineaire projectielaag geleid die kenmerken afbeeldt naar een 128-dimensionale embeddingruimte, die vervolgens wordt gevoed in de transformator18,19.
Het transformatorblok heeft twee encoderlagen, elk met multi-head self-attention en 4 koppen om langeafstandsafhankelijkheden in het ECG-signaal vast te leggen. In elke laag is er een positiegewijze feedforward-netwerk met een verborgen grootte van 256 en een dropout bij 0,5 om overfitting te helpen. Laagnormalisatie vindt plaats na elke sublaag, wat de training stabiliseert.
Voor de classificatiekop is het een volledig verbonden laag die daalt van 128 naar 64, gevolgd door ReLU en weer dropout 0,5. Dan heeft de outputlaag vijf neuronen voor de aritmieklassen, met Softmax om waarschijnlijkheden te bepalen.
1D Convolutioneel Neuraal Netwerk (CNN) blokken:
Het CNN-blok bestaat uit twee 1D-convolutionele lagen, elk gevolgd door een ReLU-activatie en een maximale poollaag. Deze lagen helpen ruimtelijke relaties binnen het ingangs-ECG-signaal te identificeren. Om de feature-extractie te verbeteren, worden na elke transformatiestap in de CNN-lagen extra ReLU-activatiefuncties toegepast.
Eerste convolutionele laag: Deze laag gebruikt 32 filters, elk van grootte 3, op het ingangssignaal. Het proces kan als volgt worden geschreven:

waarbij yi de uitgang is, wj de gewichten van het filter vertegenwoordigt, xi+j het invoersegment, b de bias-term en σ de activatiefunctie (ReLU). De resulterende feature map gaat door een ReLU-activatielaag om niet-lineariteit toe te voegen:

Poollaag: Na elke convolutionele operatie wordt een max-poolingstap toegepast om de ruimtelijke afmetingen te halveren. Dit proces wordt gedefinieerd als:

Dit helpt om de belangrijkste kenmerken te behouden en tegelijkertijd de rekenkracht te verminderen.
Tweede convolutionele laag: Deze laag gebruikt 64 filters van grootte 3 x 3 om de featurekaarten van de vorige laag te verwerken, waardoor het model complexere patronen kan detecteren. Na de convolutie wordt een ReLU-activatiefunctie toegepast om niet-lineariteit in het model te introduceren.

Deze stap zorgt ervoor dat het model gedetailleerde patronen uit het ECG-signaal vastlegt.
Extra activatielagen: ReLU-activatie wordt toegepast na elke stap na het convolutieproces om het netwerk te helpen complexe patronen beter vast te leggen, zodat het model zich richt op positieve activaties.
Afvlakproces: Na de tweede max-pooling-operatie worden de feature maps afgevlakt tot één vector voor invoer naar het transformatorblok.
Transformatorblokken:
Het transformatorblok bestaat uit twee lagen van multi-head zelfaandacht, die het model helpen de relaties tussen verschillende delen van het ECG-signaal in de loop van de tijd te begrijpen. Multi-Head Self-Attention werkt door naar elk paar elementen in een reeks te kijken. Voor een reeks met query Q, sleutel K en waarde V wordt de aandacht berekend als:

Hier is dk de dimensionaliteit van de sleutelvectoren, wat schaalinvariantie waarborgt.
Feedforward-lagen: Elke zelf-aandacht uitgang gaat via een volledig verbonden feedforward-netwerk met ReLU-activatie, gevolgd door laagnormalisatie. Deze stap verfijnt de geëxtraheerde temporele kenmerken:

waarbij W1 en b1 de gewichten en biases zijn van de feedforward-laag.
Batch-first representatie: De transformator werkt op sequenties in een batch-first layout, waarbij compatibiliteit met het invoerformaat van het CNN-blok wordt gegarandeerd.
Volledig verbonden (dichte) lagen:
Na verwerking door het transformatorblok wordt de uitgangsreeks afgevlakt en vervolgens door twee volledig verbonden lagen gestuurd om de classificatie uit te voeren. De eerste volledig verbonden laag transformeert de invoervector in een 128-dimensionale featureruimte, waarbij deze wordt hervormd.

waarbij W de gewichtsmatrix is, x de invoervector en b de biasvector. Er wordt een ReLU-activatielaag toegepast:

Er volgt een dropoutlaag met een snelheid van 0,5 om overfitting te voorkomen.
Tweede volledig verbonden laag: De laatste laag brengt de 128-dimensionale kenmerken toe aan het aantal hartslagklassen (bijv. 5 klassen voor aritmiedetectie). De output gaat via een log-SoftMax-functie om de logkansen te berekenen: exp(xi)
Hybride CNN-Transformer model
Het gepresenteerde model is een hybride deep learning-model dat de sterke punten van CNN's en transformers combineert om zowel ruimtelijke als temporele representaties te gebruiken. Zo'n architectuur is speciaal aangepast voor het verwerken van complexe, langsequentiegegevens zoals fysiologische signalen.

De vergelijking stelt de invoerrepresentatie voor, waarbij N = aantal monsters, T = aantal tijdstappen, d = kenmerkedimensie per tijdstap.

Deze vergelijking duidt de positionele inbeddingen aan, waarbij pos = positie in volgorde; i = inbeddingsdimensie-index.
CNN-module – Lokale feature-extractie
CNN's leren efficiënt lokale afhankelijkheden en morfologische patronen zoals pieken, hellingen of pieken in sequentiële gegevens. De convolutionele laag gebruikt
kernels met ruimtelijke omvang
over een invoertensor
. Elk uitgangskanaal m wordt bepaald door:

= aantal ingangskanalen; K = grootte van de kernel; W = filtergewichten; b = vooringenomenheid
ReLU-functie
In dit geval
vertegenwoordigt het leerbare gewicht en
is de bias voor kanaal mA, niet-lineaire activatie, zoals de Rectified Linear Unit (ReLU), wordt toegepast:

Pooling en featurecompressie
Poolinglagen verminderen de ruimtelijke of temporele dimensie van featuremaps, waardoor belangrijke features behouden blijven en de berekening wordt verminderd. Bij maximale pooling met venstergrootte
en stride s is de poolde functie op locatie
:

Uitvoerlengte na pooling

Waar
de invoerlengte is; de stap definieert een stapgrootte voor het schuiven van het poolingvenster. Deze formule berekent de outputlengte van een feature map na een poolingoperatie (bijvoorbeeld maximale pooling). Het berekent hoeveel de featuremap is verkleind op basis van inputlengte, poolgrootte en pas. Transformeert multidimensionale feature-afbeeldingen in een vector voor volledig verbonden lagen.
Transformatorencoder – het vastleggen van afhankelijkheden op lange afstand
Transformers gebruiken zelfaandacht om langeafstands-temporele afhankelijkheden te leren in sequenties17.
Schaalbare dot-product aandacht

Q, K, V zijn query-, key- en waardematrices die worden berekend via geleerde projecties;
is de sleuteldimensie die wordt gebruikt om het dotproduct te schalen.
Meervoudige aandacht

Elke kop berekent de aandacht onafhankelijk; Uitvoeren worden samengevoegd en lineair getransformeerd.
zijn geleerde projectiematrices voor elk hoofd.
is het uiteindelijke projectiegewicht na concatenatie18,19.
Definitieve voorspelling en verlies
Volledig verbonden lagen mappen kenmerken toe aan logits, die vervolgens worden omgezet in voorspellingen met activatiefuncties. Na enkele convolutionele en poolinglagen
wordt afgevlakt tot een vector
. Een volledig verbonden laag berekent de logits: Een volledig verbonden laag berekent vervolgens de klasse-logits:

Sigmoid/Softmax-activatie:

De activatiefunctie koppelt de ruwe output 'z' van het model aan waarschijnlijkheden. Sigmoid wordt toegepast op binaire classificatie, en Softmax op multi-klasse problemen voor de verdeling van kansen over klassen. z is de lineaire uitgang (bijv. laatste laag: z = Wx + b). Output ŷ ligt tussen (0, 1), wat een kansvan 20 betekent.
Trainingsproces
De training werd uitgevoerd op een systeem met de volgende hardwarespecificaties:
Processor: AMD Ryzen 7 7840HS
CPU-RAM: 16 GB
GPU RAM: 6 GB NVIDIA GeForce RTX 3050
De modellen werden getraind met de Adam-optimizer, die de leersnelheid tijdens de training aanpast op basis van het eerste en tweede moment van de gradiënt. De updateregel voor Adam wordt gegeven door:

In deze opstelling vertegenwoordigen mt en vt de eerste- en tweede-moment schattingen, α de leersnelheid, en ε een kleine constante is die wordt gebruikt om deling door nul te voorkomen. De modellen werden getraind voor 60 tijdperken, met vroegtijdige stops om overfitting te voorkomen. Er werd een batchgrootte van 1024 gebruikt, en de trainingsdata werd in de modellen geladen met behulp van PyTorch's DataLoader. Dropout en batchnormalisatie werden geïntegreerd om het model te regulariseren en de convergentie te versnellen. Dropout is een regularisatiemethode waarbij een percentage p van de neuronen tijdens de training willekeurig wordt uitgeschakeld, wat helpt overfitting te verminderen. Wiskundig gezien laat zi de activatie van dei-de neuron aanduiden. Tijdens de trainingsfase wordt de gewijzigde activatie z' berekend als:

waarbij p het uitvalpercentage is (bijv. p = 0,5 voor een uitval van 50%). Tijdens inferentie wordt geen dropout toegepast en wordt het volledige netwerk gebruikt.
Convergentie in neurale netwerken is een probleem dat bestaande classificatiesystemen in de gezondheidszorg aanzienlijk beïnvloedt, vooral wanneer diagnoses inconsistent zijn door onvoldoende convergentie. Recent onderzoek naar pre-defined time optimalisatiebenaderingen en convergentie op een vast tijdstip heeft aangetoond dat het nog steeds mogelijk is om modellen te trainen die binnen een vast aantal iteraties voor alle begintoestanden convergeren. Toekomstige modellen op basis hiervan kunnen vooraf gedefinieerde tijdoptimalisatie bevatten.
Batchnormalisatie:
Batchnormalisatie stabiliseert en versnelt de training door de input naar elke laag te normaliseren. Gegeven een mini-batch van activaties x = {x1, x2, . . ., xN}, is de batchgenormaliseerde output xi .wordt berekend als:


waarbij μB en σB2 het gemiddelde en de variantie van de batch zijn, ε een kleine constante is voor numerieke stabiliteit, en γ en β leerbare parameters zijn die schalen en verschuiven van de genormaliseerde waarden. Batchnormalisatie helpt interne covariaatverschuiving te verminderen en maakt het mogelijk om hogere leersnelheden te gebruiken. Deze technieken, gecombineerd met de Adam-optimizer, zorgen voor robuuste training door overfitting te beperken en convergentiesnelheidte verbeteren 21,22.
Figuur 3 toont validatieverlies- en validatienauwkeurigheid over epochs tijdens de training van een machine learning-model. De validatienauwkeurigheid (blauwe lijn, rechter Y-as) begint relatief laag (ongeveer 97,5%) en neemt snel toe binnen de eerste 10 epochs. Het blijft verbeteren en bereikt niveaus van ongeveer 99,7% tot 99,8% na ongeveer 20 tijdperken. Dit geeft aan dat het model kennis goed leert en toepast op de validatieset. Het validatieverlies (rode lijn, linker Y-as) begint hoog, daalt dan scherp tot bijna nul binnen de eerste paar epochs (rond 2 tot 3). Daarna blijft het de rest van de trainingbijna vlak op nul.