GPU do Twoich projektów · płatność krypto bez KYC Jak wynająć
Polski
Otwórz konsolę
Przewodnik praktyczny / KERNODECK

Skontroluj dane wejściowe przed załadowaniem modelu.

Najpierw zwaliduj odczyt i schemat, następnie typy, wymiary i wartości danych. Później sprawdź reguły dotyczące wielu wierszy, takie jak unikalność identyfikatorów. Próbka służy do dopracowania tych kontroli; nie dowodzi, że cały korpus jest zgodny. Ładuj model po raporcie, który precyzuje, co faktycznie zostało sprawdzone.

6 min czytania · Przewodnik dla programistów

1. Przekształć oczekiwania modelu w kontrakt danych

Zacznij od obiektu, którego oczekuje twój program, zanim wybierzesz walidator. Dla danych wejściowych tabelarycznych nazwij kolumny, typy i jednostki. Dla obrazu określ wymiary, kanały i obsługę orientacji. Dla tekstu zdefiniuj kodowanie, pola obowiązkowe i politykę dotyczącą pustych danych wejściowych. Dane mogą być czytelne, a mimo to nieodpowiednie do obliczenia.

Rozdziel trzy decyzje: odrzucić, zaakceptować bez zmian lub przekształcić zgodnie z udokumentowaną regułą. Konwersja ciągu znaków na liczbę, zastąpienie brakującej wartości i obcięcie danych wejściowych zmieniają przetwarzaną treść. Te operacje nie powinny zachodzić tylko dlatego, że narzędzie wybiera domyślny typ.

Przykład w tym przewodniku jest edukacyjny i nie jest wykonywany. Dotyczy obiektów zawierających identyfikator i trzy wartości liczbowe z przedziału od −100 do 100. Te granice są wymyślone, aby zilustrować kontrakt, bez jednostki fizycznej ani związku ze zbiorem danych Kernodeck. Należy je zastąpić regułami rzeczywistego projektu.

Przewiń tabelę, aby zobaczyć wszystkie kolumny.
Kontrakt przykładu, do zdefiniowania przed inspekcją korpusu.
PoziomRegułaMożliwy do wykrycia błąd
SchematDokładnie id i valuesBrakujące lub nieoczekiwane pole.
Typid jako ciąg znaków; values jako lista liczbLiczba przedstawiona jako tekst, wartość logiczna lub brak wartości.
KształtTrzy wartości na obiektWektor zbyt krótki lub zbyt długi.
WartośćLiczby skończone w [−100, 100]NaN, nieskończoność lub wartość poza zakresem edukacyjnym.
KorpusUnikalne identyfikatoryDwa obiekty mają ten sam identyfikator.

2. Sprawdź odczyt przed konwersjami

Ustal format i jego dialekt. Dla CSV udokumentuj separator, kodowanie i obecność nagłówka. Standardowy czytnik CSV w Pythonie zwraca normalnie ciągi znaków; nie decyduje, że twoja kolumna jest liczbą całkowitą. Identyfikator taki jak 0012 może stracić znaczenie, jeśli konwersja zamieni go w 12. Zachowaj więc identyfikatory w ich zamierzonym typie.

Skontroluj liczbę pól i nazwy kolumn przed utworzeniem obiektów biznesowych. Wiersz przesunięty przez nieoczekiwany separator nie może przejść pod pretekstem, że niektóre wartości pozostają konwertowalne. Dla plików binarnych lub obrazów również wykonaj rzeczywisty odczyt: poprawna końcówka nie gwarantuje dekodowalnej zawartości.

Zdekodowany JSON to jeszcze nie zatwierdzony kontrakt. Moduł Pythona domyślnie akceptuje pewne wartości niefinitywne oraz powtórzone nazwy w obiekcie. Jeśli Twój format ich zabrania, skonfiguruj odrzucanie ich na etapie dekodowania, a następnie zastosuj reguły schematu. Ustaw też odpowiedni limit rozmiaru, zanim załadujesz cały plik do pamięci.

3. Wyizoluj jeden błąd na typ reguły

Zbuduj mały zbiór, w którym każdy niepoprawny wpis narusza tylko jedną istotną regułę. Dzięki temu będziesz wiedzieć, co wykrywa kontrola. Jeśli jedyny błędny przykład łączy zły identyfikator, niewłaściwy wymiar i nieskończoność, jego odrzucenie nie dowodzi, że działają wszystkie trzy reguły.

W tabeli oznaczenia reprezentują obiekty dydaktyczne, które zostały już odczytane. Nieskończoność to niefinitywna wartość liczbowa, a nie składnia JSON, którą należy stosować. Werdykty wynikają z rozumowania i nie są danymi wyjściowymi uruchomionego programu. Drugi obiekt z polem a testuje się po poprawnym obiekcie a, aby sprawdzić unikalność.

Zachowaj te przypadki wraz ze swoim kontraktem, gdy będzie się on zmieniał. Jeśli zdecydujesz się akceptować łańcuchy znaków reprezentujące liczby, utwórz jawny krok konwersji i pozostaw ślad tej decyzji. Nie zmieniaj po cichu kontroli, aby usunąć pierwsze odrzucenie z korpusu.

Przewiń tabelę, aby zobaczyć wszystkie kolumny.
Przypadki dydaktyczne i oczekiwana diagnoza.
Identyfikator i wartościOczekiwany werdyktĆwiczona reguła
a · [1, 2, 3]ZaakceptowanyPoprawny punkt odniesienia.
b · ["4", 5, 6]Odrzucony: typŁańcuch znaków nie jest liczbą w tym kontrakcie.
c · [7, 8]Odrzucony: formaDwie wartości zamiast trzech.
d · [0, infini, 1]Odrzucony: wartośćWartość niefinitywna nie może wejść do obliczeń.
a · [4, 5, 6], po pierwszym aOdrzucony: duplikatUnikalność w korpusie.

4. Utrzymuj jawny walidator i użyteczne komunikaty

Poniższy fragment pokazuje kontrole na obiekcie po dekodowaniu. Zatrzymuje się na pierwszej niespełnionej regule i nie obsługuje ani całego pliku, ani wszystkich jego możliwych formatów. Kontener seen należy do przebiegu po korpusie: odtwarzanie go przy każdym wierszu czyniłoby kontrolę duplikatów bezużyteczną.

Użyteczny komunikat zawiera regułę, plik logiczny i pozycję obiektu. Nie kopiuj do niego całej jego zawartości. Przy zbieraniu wielu błędów ogranicz zachowywane szczegóły, utrzymując kompletne liczniki. Raport o rozmiarze kilku gigabajtów też nie pomaga w zlokalizowaniu pierwszej przyczyny.

W tablicy NumPy kontrola skończoności element po elemencie może uzupełniać kontrole typu i kształtu. Nie zastępuje granic biznesowych: liczba skończona nadal może być ujemną długością lub wartością wyrażoną w niewłaściwej jednostce.

Fragment dydaktyczny bez uruchamiania — walidacja zdekodowanego obiektu
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 item

5. Od próbki do pełnego korpusu

Krótka próbka pozwala szybko poprawić czytnik i kontrakt. Wybierz przypadki zwykłe i graniczne: puste wejście, maksymalny rozmiar, nietypowy znak, pierwszą i ostatnią partycję. Wybór samych pierwszych wierszy może pominąć anomalię znajdującą się w późniejszym pliku lub w rzadkiej kategorii.

Pełna walidacja przechodzi przez wszystkie istotne wpisy i stosuje reguły globalne. Przy dużych wolumenach przetwarzaj pliki stopniowo i zapisuj ich tożsamość. Zbiór wszystkich identyfikatorów w pamięci sprawdza się w małym przykładzie, ale może stać się zbyt kosztowny; wybierz wtedy strategię unikalności dostosowaną do wolumenu, nie rezygnując z kontroli.

Raport musi wskazywać swój zakres: próbkę kalibracyjną, całość partycji lub całość zdefiniowanego korpusu. Zachowaj liczbę odczytanych, zaakceptowanych i odrzuconych pozycji oraz zastosowane reguły. Jeśli pliki zmienią się później, stary raport nie zatwierdza automatycznie nowego wejścia.

6. Zdecyduj, co zrobić z odrzuconymi danymi

Zatrzymaj pracę, gdy błędy podważają sens obliczenia: brakuje istotnej kolumny, jednostki są niezgodne lub utracono dopasowanie identyfikatorów. Jeśli Twoje zadanie dopuszcza wykluczenie pojedynczych elementów, zdefiniuj tę politykę przed uruchomieniem, zachowaj odrzucenia i oblicz wyniki na faktycznie zaakceptowanym zakresie.

Odsunięcie na bok nie jest korektą. Jeśli zastępujesz brakujące wartości lub normalizujesz dane wejściowe, utwórz nową identyfikowalną wersję i zwaliduj ją ponownie. Zachowaj transformację i jej parametry wraz z eksperymentem. W przeciwnym razie dwa przebiegi o tej samej nazwie mogą używać różnych danych.

Przed GPU sprawdź jeszcze faktycznie zbudowany batch: kolejność wymiarów, typ numeryczny, ewentualną maskę i zgodność z celami. Walidacja pliku poprzedza transformacje; nie dowodzi, że pipeline zachowa następnie te właściwości. Przypadek reprezentatywny pozwala zweryfikować tę ostatnią granicę.

7. Utwórz zrozumiałą autoryzację uruchomienia

Oczekiwany wynik to krótki raport, który odpowiada na cztery pytania: jakie wejście, jakie reguły, jaki zakres i jaka decyzja. Status ważny musi wskazywać precyzyjną tożsamość korpusu. Status częściowy musi nazywać to, co pozostaje do sprawdzenia. Odrzucenie musi pozwalać odnaleźć dotyczące obiekty bez niepotrzebnego rozpowszechniania ich treści.

Dodaj kontrolę samego walidatora: przypadek poprawny przechodzi, każdy niepoprawny jest odrzucany z właściwego powodu, a liczniki się zgadzają. Następnie sprawdź krótki fragment w aplikacji. Ta podwójna kontrola pozwala uniknąć mylenia zgodności danych z jakością modelu lub dostępnością GPU.

Zgodne dane wejściowe mogą nadal być obciążone, błędnie oznaczone lub nieodpowiednie do badanego zagadnienia. Ten przewodnik obejmuje zgodność strukturalną i jawne reguły; nie poświadcza ani reprezentatywności, ani praw do użytkowania. Te decyzje uzupełniają dokumentację przed długim przetwarzaniem.

Twoje pytania

Czy czytelny plik JSON jest już ważny dla mojego modelu?

Nie. Dekodowanie sprawdza reprezentację, a nie Twoje pola, wymiary, jednostki i ograniczenia biznesowe. Zastosuj jawny kontrakt po odczycie i skonfiguruj niezbędne odrzucenia formatu.

Czy mogę zwalidować tylko pierwsze wiersze?

Służą one do dopracowania czytnika, ale nie walidują reszty korpusu. Wskaż, że to próbka, a następnie przejdź przez wszystkie wymagane pozycje i sprawdź reguły globalne przed pełnym uruchomieniem.

Czy niepoprawne wiersze należy usuwać automatycznie?

Nie. Najpierw zdefiniuj politykę odrzucania zgodną z zadaniem. Zachowaj liczniki i elementy do poprawy; wykluczenie zmienia zakres i może zafałszować analizę, jeśli pozostanie niewidoczne.