1. De verwachtingen van het model omzetten in een gegevenscontract
Begin bij het object dat je programma verwacht, voordat je een validator kiest. Voor tabelinvoer benoem je de kolommen, de typen en de eenheden. Voor een afbeelding geef je de afmetingen, kanalen en de behandeling van oriëntaties aan. Voor tekst definieer je de codering, de verplichte velden en het beleid voor lege invoer. Gegevens kunnen leesbaar zijn zonder geschikt te zijn voor de berekening.
Maak onderscheid tussen drie beslissingen: weigeren, accepteren zoals het is of transformeren volgens een gedocumenteerde regel. Een tekenreeks naar een getal omzetten, een ontbrekende waarde vervangen en een invoer afkappen veranderen de verwerkte inhoud. Deze bewerkingen mogen niet gebeuren alleen omdat een tool een standaardtype kiest.
Het voorbeeld in deze gids is didactisch en wordt niet uitgevoerd. Het gaat over objecten met een identificatie en drie numerieke waarden tussen −100 en 100. Deze grenzen zijn verzonnen om een contract te illustreren, zonder fysieke eenheid of verband met een dataset van Kernodeck. Ze moeten worden vervangen door de regels van het werkelijke project.
Scroll door de tabel om alle kolommen te lezen.| Niveau | Regel | Herkenbare fout |
|---|---|---|
| Schema | Precies id en values | Ontbrekend of onverwacht veld. |
| Type | id tekenreeks; values lijst van getallen | Getal weergegeven als tekst, boolean of ontbrekende waarde. |
| Vorm | Drie waarden per object | Vector te kort of te lang. |
| Waarde | Eindige getallen binnen [−100, 100] | NaN, oneindig of waarde buiten het didactische domein. |
| Corpus | Unieke identificaties | Twee objecten hebben dezelfde identificatie. |
2. Het inlezen verifiëren vóór de conversies
Leg het formaat en zijn dialect vast. Voor een CSV documenteer je het scheidingsteken, de codering en de aanwezigheid van de kopregel. De standaard CSV-lezer van Python geeft normaal tekenreeksen terug; hij beslist niet dat jouw kolom een geheel getal is. Een identificatie zoals 0012 kan zijn betekenis verliezen als een conversie er 12 van maakt. Bewaar identificaties dus in hun bedoelde type.
Controleer het aantal velden en de kolomnamen voordat je de bedrijfsobjecten aanmaakt. Een regel die verschoven is door een onverwacht scheidingsteken mag er niet doorheen glippen onder het voorwendsel dat sommige waarden converteerbaar blijven. Doe voor binaire bestanden of afbeeldingen ook het werkelijke inlezen: een correcte extensie garandeert geen decodeerbare inhoud.
Een gedecodeerde JSON is nog geen gevalideerd contract. De Python-module accepteert standaard bepaalde niet-eindige waarden en herhaalde namen in een object. Als jouw formaat die verbiedt, configureer dan die afwijzing bij het decoderen en pas daarna je schemaregels toe. Stel ook een passende maximale grootte in voordat je een volledig bestand in het geheugen laadt.
3. Isoleer één fout per regeltype
Bouw een kleine set waarin elke ongeldige invoer slechts één belangrijke regel schendt. Zo weet je wat de controle detecteert. Als het enige onjuiste voorbeeld tegelijk een foutieve id, een verkeerde afmeting en een oneindig getal bevat, bewijst de afwijzing ervan niet dat alle drie de regels werken.
In de tabel stellen de notaties pedagogische objecten voor die al gelezen zijn. Oneindig is een niet-eindige numerieke waarde, geen JSON-syntax om over te nemen. De verdicts zijn verwacht op basis van redenering en zijn geen uitvoer van een uitgevoerd programma. Een tweede object met a wordt getest na het geldige object a om de uniciteit te controleren.
Bewaar deze gevallen bij je contract wanneer dat evolueert. Als je besluit numerieke strings te accepteren, maak dan een expliciete conversiestap en houd een spoor van die beslissing bij. Wijzig de controles niet stilzwijgend om de eerste afwijzing uit het corpus te laten verdwijnen.
Scroll door de tabel om alle kolommen te lezen.| Identificatie en waarden | Verwacht verdict | Getoetste regel |
|---|---|---|
| a · [1, 2, 3] | Geaccepteerd | Geldige referentie. |
| b · ["4", 5, 6] | Geweigerd: type | Een string is geen getal in dit contract. |
| c · [7, 8] | Geweigerd: vorm | Twee waarden in plaats van drie. |
| d · [0, oneindig, 1] | Geweigerd: waarde | Een niet-eindige waarde kan niet in de berekening terechtkomen. |
| a · [4, 5, 6], na de eerste a | Geweigerd: duplicaat | Uniciteit over het corpus. |
4. Houd een expliciete validator en bruikbare berichten
Het volgende fragment toont de controles op één object, na het decoderen. Het stopt bij de eerste regel die faalt en verwerkt noch het volledige bestand noch alle mogelijke formaten. De container seen hoort bij het doorlopen van het corpus: hem bij elke regel opnieuw aanmaken zou de controle op duplicaten nutteloos maken.
Een nuttig bericht bevat de regel, het logische bestand en de positie van het object. Vermijd om de volledige inhoud erin over te nemen. Beperk voor het verzamelen van meerdere fouten de bewaarde details, maar houd de tellers volledig. Een rapport van meerdere gigabytes helpt ook niet om de eerste oorzaak te lokaliseren.
Op een NumPy-array kan een element-voor-element controle op eindigheid de type- en vormcontroles aanvullen. Die vervangt niet de domeingrenzen: een eindig getal kan nog steeds een negatieve lengte zijn of een waarde in de verkeerde eenheid.
import math
def valider_objet(item, seen):
if type(item) is not dict or set(item) != {"id", "values"}:
raise ValueError("SCHEMA")
identifiant = item["id"]
if type(identifiant) is not str or not identifiant.strip():
raise ValueError("IDENTIFIANT")
if identifiant in seen:
raise ValueError("DOUBLON")
values = item["values"]
if type(values) is not list or len(values) != 3:
raise ValueError("FORME")
for value in values:
if type(value) not in (int, float):
raise ValueError("TYPE")
if not (-100 <= value <= 100) or not math.isfinite(value):
raise ValueError("VALEUR")
seen.add(identifiant)
return item5. Van de steekproef naar het volledige corpus
Een korte steekproef laat toe om de reader en het contract snel bij te sturen. Kies gewone gevallen en grenzen: lege invoer, maximale grootte, ongebruikelijk teken, eerste en laatste partitie. Alleen de eerste regels selecteren kan een anomalie missen die in een later bestand of in een zeldzame categorie zit.
De volledige validatie doorloopt alle betrokken invoer en past de globale regels toe. Verwerk bij grote volumes de bestanden geleidelijk en registreer hun identiteit. Een verzameling van alle identificaties in het geheugen volstaat voor het kleine voorbeeld, maar kan te duur worden; kies dan een uniciteitsstrategie die past bij het volume, zonder de controle op te geven.
Het rapport moet zijn bereik aangeven: steekproef voor het afstellen, een volledige partitie of het volledige gedefinieerde corpus. Behoud het aantal gelezen, geaccepteerde en geweigerde items, evenals de toegepaste regels. Als bestanden daarna veranderen, valideert het oude rapport niet automatisch de nieuwe invoer.
6. Bepalen wat je met geweigerde gegevens doet
Stop het werk wanneer fouten de betekenis van de berekening ongeldig maken: een essentiële kolom ontbreekt, eenheden zijn incompatibel of de koppeling van identifiers is verloren. Als je taak het uitsluiten van losse items toestaat, definieer dat beleid dan vóór de start, bewaar de weigeringen en bereken de resultaten op het daadwerkelijk geaccepteerde bereik.
Opzij zetten is geen correctie. Als je ontbrekende waarden vervangt of invoer normaliseert, maak dan een nieuwe identificeerbare versie en valideer die opnieuw. Bewaar de transformatie en zijn parameters bij het experiment. Anders kunnen twee pogingen met dezelfde naam verschillende gegevens gebruiken.
Controleer vóór de GPU ook de batch die daadwerkelijk is opgebouwd: volgorde van dimensies, numeriek type, een eventuele masker en de overeenkomst met de doelen. Validatie van het bestand gaat vooraf aan de transformaties; het bewijst niet dat de pipeline die eigenschappen daarna behoudt. Een representatief geval laat je deze laatste grens verifiëren.
7. Een begrijpelijke starttoestemming produceren
De verwachte output is een kort rapport dat vier vragen beantwoordt: welke invoer, welke regels, welk bereik en welke beslissing. Een geldige status moet verwijzen naar een precieze corpusidentiteit. Een gedeeltelijke status moet benoemen wat nog gecontroleerd moet worden. Een afwijzing moet het mogelijk maken de betrokken objecten terug te vinden zonder de inhoud ervan onnodig te verspreiden.
Voeg een controle van de validator zelf toe: een correct geval slaagt, elk incorrect geval wordt om de juiste reden geweigerd, en de tellers kloppen met elkaar. Verifieer daarna een kleine passage in de toepassing. Deze dubbele controle voorkomt dat je de conformiteit van de gegevens verwart met de kwaliteit van het model of de beschikbaarheid van de GPU.
Conforme invoer kan nog steeds vertekend, verkeerd gelabeld of ongeschikt voor de onderzochte vraag zijn. Deze gids behandelt structurele conformiteit en expliciete regels; hij certificeert noch de representativiteit noch de gebruiksrechten. Die beslissingen vullen het dossier aan vóór een langdurige verwerking.