Gängige Methoden und Techniken zum Trainieren von Lebenslaufmodellen

Ich habe kürzlich an einem Lebenslauf-Wettbewerb teilgenommen und gesehen, dass einige Teilnehmer die Tipps weitergegeben haben, die sie häufig beim Training von Bilderkennungsmodellen verwenden. Deshalb habe ich sie aufgezeichnet und organisiert, um zukünftiges Lernen zu erleichtern. Ich habe vieles geklärt, sie sind vielleicht nicht jedes Mal nützlich, aber denken Sie bitte daran, vielleicht werden sie in Zukunft bei einer bestimmten Aufgabe eine Rolle spielen!

Hauptsächlich aus den folgenden neun Aspekten:

  1. Bildverbesserung

  1. besseres Modell

  1. Lernrate und Planer

  1. Optimierer

  1. Regularisierung bedeutet

  1. Etikettenglättung

  1. Wissensdestillation

  1. Pseudo-Label

  1. Fehleranalyse

1. Bildverbesserung

Nachfolgend sind viele Verbesserungsmethoden aufgeführt, von denen einige noch nicht einmal gesehen wurden, aber nicht jede Verbesserungsmethode ist von Vorteil. Sie müssen die geeignete Verbesserungsmethode entsprechend der Aufgabe und dem Experiment auswählen.

Farbverstärkung

Farbverzerrung:

Diese Verbesserung passt den Farbton, die Sättigung und die Helligkeit des Bildes nach dem Zufallsprinzip an, indem jeder Kanal mit einem zufällig gewählten Faktor multipliziert wird. Die Koeffizienten werden aus dem Bereich [0:6;1:4] gewählt, um sicherzustellen, dass das resultierende Bild nicht zu stark verzerrt ist.

def color_skew(image):
    h, s, v = cv2.split(image)
    h = h * np.random.uniform(low=0, high=6)
    s = s * np.random.uniform(low=1, high=4)
    v = v * np.random.uniform(low=0, high=6)
    return cv2.merge((h, s, v))

RGB-Norm:

Diese Erweiterung normalisiert die RGB-Kanäle eines Bildes, indem der Mittelwert jedes Kanals von seinem Wert subtrahiert und durch die Standardabweichung des Kanals dividiert wird. Dies trägt zur Normalisierung der Werte im Bild bei und kann die Leistung des Modells verbessern.

def rgb_norm(image):
    r, g, b = cv2.split(image)
    r = (r - np.mean(r)) / np.std(r)
    g = (g - np.mean(g)) / np.std(g)
    b = (b - np.mean(b)) / np.std(b)
    return cv2.merge((r, g, b))

Schwarz und weiß:

Diese Verbesserung wandelt das Bild in Schwarzweiß um, indem es in einen Graustufenfarbraum konvertiert wird.

defblack_and_white(image):
    return cv2.cvtColor(image, cv2.COLOR_RGB2GRAY)

Ben Graham: Graustufen + Gaußsche Unschärfe:

Diese Verbesserung wandelt das Bild in Graustufen um und wendet eine Gaußsche Unschärfe an, um jegliches Rauschen oder Details im Bild zu glätten.

def ben_graham(image):
    image = cv2.cvtColor(image, cv2.COLOR_RGB2HSV)
    image = cv2.GaussianBlur(image, (5, 5), 0)
    return image

Farbton, Sättigung, Helligkeit:

Durch diese Erweiterung wird das Bild in den HLS-Farbraum konvertiert, der das Bild in Farbton-, Sättigungs- und Helligkeitskanäle unterteilt.

def hsb(image):
    return cv2.cvtColor(image, cv2.COLOR_RGB2HLS)

LUV-Farbraum:

Durch diese Verbesserung wird das Bild in den LUV-Farbraum konvertiert, der wahrnehmungsmäßig konsistent ist und genauere Farbvergleiche ermöglicht.

def luv(image):
    return cv2.cvtColor(image, cv2.COLOR_RGB2LUV)

Alpha-Kanal:

Diese Verbesserung fügt dem Bild einen Alphakanal hinzu, der zur Erhöhung der Transparenz verwendet werden kann.

def alpha_channel(image):
    return cv2.cvtColor(image, cv2.COLOR_RGB2RGBA)

YZ-Farbraum:

Durch diese Verbesserung wird das Bild in den XYZ-Farbraum konvertiert, einen geräteunabhängigen Farbraum, der eine genauere Farbdarstellung ermöglicht.

def xyz(image):
    return cv2.cvtColor(image, cv2.COLOR_RGB2XYZ)

Luma-Chroma:

Durch diese Verbesserung wird das Bild in den YCrCb-Farbraum konvertiert, der das Bild in Luma- (Helligkeit) und Chroma- (Farbe) Kanäle unterteilt.

def luma_chroma(image):
    return cv2.cvtColor(image, cv2.COLOR_RGB2YCrCb)

CIE-Labor:

Durch diese Verbesserung wird das Bild in den CIE-Lab-Farbraum konvertiert, der für eine einheitliche Wahrnehmung ausgelegt ist und genauere Farbvergleiche ermöglicht.

def cie_lab(image):
    return cv2.cvtColor(image, cv2.COLOR_RGB2Lab)

YUV-Farbraum:

Durch diese Verbesserung wird das Bild in den YUV-Farbraum konvertiert, der das Bild in Luma- (Helligkeit) und Chroma- (Farbe) Kanäle unterteilt.

def yuv(image):
    return cv2.cvtColor(image, cv2.COLOR_RGB2YUV)

Mittlerer Zuschnitt:

Diese Verbesserung schneidet zufällig einen rechteckigen Bereich mit einem Seitenverhältnis von [3/4,4/3] zu, skaliert den Zuschnitt dann zufällig um einen Faktor zwischen [8 %, 100 %] und passt den Zuschnitt schließlich an img_{size} * an. img_ {size} img_{size} * img_{size} Quadrat. Dies geschieht nach dem Zufallsprinzip bei jeder Charge.

transforms.CenterCrop((100, 100))

Flippings:

Diese Erweiterung erhöht die Wahrscheinlichkeit, dass das Bild zufällig horizontal gespiegelt wird. Beispielsweise besteht bei einer Wahrscheinlichkeit von 0,5 eine Wahrscheinlichkeit von 50 %, dass das Bild horizontal gespiegelt wird.

def flippings(image):
    if np.random.uniform() < 0.5:
        image = cv2.flip(image, 1)
    return image

Zufälliger Zuschnitt:

Diese Erweiterung schneidet zufällig einen rechteckigen Bereich aus dem Bild aus.

transforms.RandomCrop((100, 100))

Zufällig geänderter Ausschnitt:

Durch diese Erweiterung werden rechteckige Bereiche eines Bilds zufällig in der Größe geändert und ausgeschnitten.

transforms.RandomResizedCrop((100, 100))

Farbjitter:

Durch diese Verbesserung werden Helligkeit, Kontrast, Sättigung und Farbton des Bildes nach dem Zufallsprinzip angepasst.

transforms.ColorJitter(brightness=0.5, contrast=0.5, saturation=0.5, hue=0.5)

Zufällige Affinität:

Diese Erweiterung wendet zufällig eine affine Transformation auf das Bild an, einschließlich Drehung, Skalierung und Scherung.

transforms.RandomAffine(degrees=45,translate=(0.1,0.1),scale=(0.5,2.0),shear=45)

Zufälliger horizontaler Flip:

Spiegelt das Bild zufällig horizontal mit einer Wahrscheinlichkeit von 0,5.

transforms.RandomHorizontalFlip()

Zufälliger vertikaler Flip:

Diese Erweiterung dreht das Bild zufällig vertikal mit einer Wahrscheinlichkeit von 0,5.

transforms.RandomVerticalFlip()

Zufällige Perspektive:

Diese Erweiterung wendet zufällig eine perspektivische Transformation auf das Bild an.

transforms.RandomPerspective()

Zufällige Rotation:

Durch diese Erweiterung wird das Bild zufällig um einen bestimmten Gradbereich gedreht.

transforms.RandomRotation(degrees=45)

Zufällige Umkehrung:

Durch diese Verbesserung werden die Farben des Bildes nach dem Zufallsprinzip invertiert.

transforms.RandomInvert()

Zufälliges Posterisieren:

Diese Erweiterung reduziert zufällig die Anzahl der Bits, die zur Darstellung jedes Pixelwerts verwendet werden, wodurch ein Farbseparationseffekt entsteht.

transforms.RandomPosterize(bits=4)

Zufällige Solarisierung:

Diese Verbesserung wendet zufällig einen Belichtungseffekt auf das Bild an, bei dem Pixel über einem bestimmten Intensitätsschwellenwert invertiert werden.

transforms.RandomSolarize(threshold=128)

Zufälliger Autokontrast:

Diese Verbesserung passt den Kontrast eines Bildes nach dem Zufallsprinzip an, indem die Intensitätswerte über den gesamten verfügbaren Bereich gestreckt werden.

transforms.RandomAutocontrast()

Zufälliger Ausgleich:

Diese Erweiterung gleicht das Histogramm des Bildes zufällig aus und erhöht so den Kontrast.

transforms.RandomEqualize()

fortgeschrittenere Verbesserungen

Zusätzlich zu den oben genannten grundlegenden Verbesserungsmethoden gibt es einige fortgeschrittenere Verbesserungsmethoden.

Automatische Erweiterung:

Auto Augment ist eine Erweiterungsmethode, die Reinforcement Learning nutzt, um nach der besten Erweiterungsstrategie für einen bestimmten Datensatz zu suchen. Es hat sich gezeigt, dass es die Leistung von Bildklassifizierungsmodellen verbessert.

from autoaugment import AutoAugment

auto_augment = AutoAugment()
image = auto_augment(image)

Schnelle automatische Augmentierung:

Fast Autoaugment ist eine schnellere Implementierung der Auto Augment-Methode. Es verwendet neuronale Netze, um die beste Erweiterungsstrategie für einen bestimmten Datensatz vorherzusagen.

from fast_autoaugment import FastAutoAugment

fast_auto_augment = FastAutoAugment()
image = fast_auto_augment(image)

Augmix:

Augmix ist eine Erweiterungsmethode, die mehrere erweiterte Bilder kombiniert, um ein einziges, vielfältigeres und realistischeres Bild zu erstellen. Es hat sich gezeigt, dass es die Robustheit und Generalisierung von Bildklassifizierungsmodellen verbessert.

from augmix import AugMix

aug_mix = AugMix()
image = aug_mix(image)

Verwechslung/Ausschnitt:

Mixup ist eine Erweiterungsmethode, die zwei Bilder durch lineare Interpolation von Pixelwerten kombiniert. Cutout ist eine Erweiterungsmethode, die zufällig rechteckige Bereiche aus einem Bild entfernt. Es hat sich gezeigt, dass diese Methoden die Robustheit und Verallgemeinerung von Bildklassifizierungsmodellen verbessern.

"You take a picture of a cat and add some "transparent dog" on top of it. The amount of transparency is a hyperparam."

x=lambda*x1+(1-lambda)x2,

y=lambda*x1+(1-lambda)y2

Testzeiterweiterungen (TTA)

Die Bildvergrößerung ist nicht nur beim Training, sondern auch beim Testen nützlich. Für die Testphase wird es TTA genannt. Nehmen Sie einfach das Testsatzbild mit mehreren Erweiterungen, wenden Sie es auf die Vorhersage an und mitteln Sie die Ergebnisse. Diese Methode kann die Robustheit der Vorhersage erhöhen, erhöht aber entsprechend auch die Zeit. Um den Testsatz zu verbessern, sind zu fortgeschrittene Verbesserungsmethoden wie das Ändern des Bildmaßstabs, das Zuschneiden verschiedener Stellen, das Spiegeln usw. nicht geeignet.

Ich persönlich bin der Meinung, dass dieser Ansatz nur bei Wettbewerben angewendet werden sollte~

2. Bessere Modelle

Auch wenn die folgenden Modelle inzwischen einige Jahre auseinander liegen, belegen sie aufgrund ihrer herausragenden Leistung immer noch die erste Reihe im Wettbewerb. Obwohl in den letzten Jahren bessere Modelle produziert wurden, sind viele Modelle nicht Open Source oder zu groß und sind es noch nicht verfügbar. breiter genutzt werden.

tf_efficientnetv1,v2系列
seresnext

Und einige Ideen und Modelle zum Ausprobieren.

Swin Transformer
BeIT Transformer
ViT Transformers

Fügen Sie weitere versteckte Schichten hinter dem Rückgrat hinzu

Das Hinzufügen weiterer Ebenen kann von Vorteil sein, da Sie damit erweiterte Funktionen erlernen können. Es kann jedoch auch die Feinabstimmung großer vorab trainierter Modelle erleichtern und sogar die Modellleistung beeinträchtigen.

Schicht für Schicht auftauen

Ein einfacher Trick, mit dem Sie kleine Verbesserungen erzielen können, besteht darin, die Schichten des vortrainierten Rückgrats im Verlauf des Trainings aufzutauen. Fügen Sie zunächst weitere Schichten hinzu und frieren Sie das Rückgrat ein. Geben Sie dann langsam die Parameter des Rückgrats frei, damit es am Training teilnehmen kann.

## Weight freezing
for param in model.parameters():
  param.requires_grad = False 

## Weight unfreezing
for param in model.parameters():
  param.requires_grad = True

Einfrieren und Auftauen von Gewichten in TensorFlow

## Weight freezing
layer.trainable = False
## Weight unfreezing
layer.trainable = True

3. Lernrate und Zeitplaner

Die Lernrate und der Lernratenplaner wirken sich auf die Trainingsleistung des Modells aus. Eine Änderung der Lernrate kann einen großen Einfluss auf die Leistung und die Trainingskonvergenz haben.

Lernratenplaner

Kürzlich hat sich gezeigt, dass der One-Cycle-Cosine-Plan bessere Ergebnisse bei mehreren Aufgaben liefert, und Sie können ihn wie folgt verwenden:

One-Cycle-Cosinus-Planung in PyTorch

from torch.optim.lr_scheduler import CosineAnnealingLR
optimizer = torch.optim.Adam(optimizer_grouped_parameters, lr=args.learning_rate, eps=args.adam_epsilon)
#这里使用
scheduler = CosineAnnealingLR(optimizer, T_max=num_train_optimization_steps)
num_training_steps = num_train_optimization_steps / args.gradient_accumulation_steps
# Update the scheduler
scheduler.step()
# step the learning rate scheduler here, 
# you will want to step the learning rate scheduler only once per optimizer step nothing more nothing less. 
# So in this case, it should be called before you expect the gradients to be applied.

Tensorfluss

## One Cycle Cosine scheduling in TensorFlow
optimizer = tf.keras.optimizers.Adam(learning_rate)
scheduler = tf.keras.optimizers.schedules.CosineDecay(learning_rate, decay_steps=num_training_steps)

Tipps zur Verwendung des Learning Rate Scheduler

  • Die Optimierung der Lernrate mithilfe von „Triangular“- oder „One Cyclic“-Methoden kann zu subtilen, aber erheblichen Verbesserungen führen – diese intelligenten Methoden der Lernratenplanung können einige Probleme mit der Stapelgröße überwinden.

  • Die Zeit damit zu verbringen, die beste Lernratenplanungsmethode für Ihre Aufgabe und das von Ihnen verwendete Modell zu recherchieren, ist ein sehr wichtiger Teil der Konvergenz Ihres Modells.

  • Lernratenplanungsstrategien können verwendet werden, um Modelle mit geringerer Stapelgröße oder mehreren Lernraten zu trainieren.

  • Wir alle wissen, dass die Lernrate wichtig ist. Probieren Sie daher zunächst niedrige Lernraten aus und prüfen Sie, ob eine Erhöhung der Lernrate die Leistung des Modells verbessert oder beeinträchtigt.

  • Das Erhöhen der Lernrate oder mehrerer Lernraten oder der Stapelgröße oder der Gradientenakkumulation oder der Lernratenplanungsstrategien später im Training kann manchmal dazu beitragen, dass das Modell besser konvergiert. Dies ist eine fortgeschrittene Technik, da sie manchmal die Leistung beeinträchtigt, aber nur, wenn Sie einen zu großen Wert angeben – denken Sie daran um es zu testen.

  • Die Verlustskalierung trägt dazu bei, die Verlustvarianz zu reduzieren und den Gradientenfluss zu verbessern, wenn Sie Gradientenakkumulation oder mehrere Lernraten oder hohe Batchgrößen verwenden. Wenn Sie jedoch versuchen, das Problem durch Erhöhen der Batchgröße zu lösen, versuchen Sie, die Lernrate zu erhöhen, da dies manchmal zu besseren Ergebnissen führt Leistung.

4. Optimierer

Heutzutage verwenden viele Leute Adam oder AdamW. Wenn Sie die beste Leistung aus dem Adam-Optimierer herausholen möchten, müssen Sie einige Dinge wissen:

Den optimalen Gewichtsverlustwert zu finden, kann mühsam sein und erfordert viel Experimentieren (und Glück).

  • Ein weiterer wichtiger Hyperparameter sind Beta1 und Beta2, die im Adam-Optimierer verwendet werden. Die Auswahl des besten Werts hängt von Ihrer Aufgabe und Ihren Daten ab. Viele neue Missionen profitieren von einem niedrigeren Beta1 und einem höheren Beta2, während sie bei etablierten Missionen das Gegenteil bewirken. Nochmals: Experimentieren wird Ihr bester Freund sein.

  • In der Welt des Adam-Optimierers besteht die erste Regel darin, die Bedeutung des Epsilon-Werts des Optimierers nicht zu unterschätzen. Hier gelten die gleichen Prinzipien zum Finden optimaler Gewichtsabnahme-Hyperparameter.

  • Überbeanspruchen Sie die Farbverlaufsbeschneidungsnorm nicht – sie kann manchmal hilfreich sein, wenn Ihre Farbverläufe explodieren und umgekehrt – sie kann bei einigen Aufgaben die Konvergenz verhindern.

  • Die Gradientenakkumulation kann immer noch einige subtile Vorteile bieten. Normalerweise akkumuliere ich Gradienten in etwa 2 Schritten, aber wenn Ihre GPU nicht über genügend Speicher verfügt, können Sie die Gradientenakkumulation auf bis zu 8 Schritte steigern. Die Gradientenakkumulation ist auch bei Verwendung gemischter Präzision nützlich.

Auch wenn Sie die Dynamik des SGD über einen längeren Zeitraum anpassen, erhalten Sie möglicherweise bessere Ergebnisse, aber auch dies erfordert eine Menge Anpassung.

Es gibt mehrere andere bemerkenswerte Optimierer:

  • AdamW: Dies ist eine Erweiterung des Adam-Algorithmus, die einen exponentiellen Gewichtsabfall der Gewichte des äußeren Modells verhindert und ein bestraftes Übervolumen unterhalb der Standardgewichte fördert.

  • Adafactor: Es ist auf geringe Speichernutzung und Skalierbarkeit ausgelegt. Der Optimierer kann mehrere GPUs verwenden, um eine erhebliche Optimierungsleistung bereitzustellen.

  • Novograd: Im Grunde ein weiterer Adam-ähnlicher Optimierer, aber mit besseren Funktionen. Es ist einer der Optimierer, die zum Trainieren von Bert-Large-Modellen verwendet werden.

  • Ranger: Der Ranger-Optimierer ist ein sehr interessanter Optimierer, der bei Lösungen zur Leistungsoptimierung gute Ergebnisse erzielt hat, aber nicht sehr bekannt ist oder unterstützt wird.

  • Lamb: Ein GPU-optimierter wiederverwendbarer Adam-Optimierer, der von Gewinnern des GLUE- und QQP-Wettbewerbs entwickelt wurde.

  • Lookahead: Ein beliebter Optimierer, den Sie zusätzlich zu anderen Optimierern verwenden können und der Ihnen einige Leistungssteigerungen beschert.

5. Regularisierungsmittel

Aussteiger nutzen! Das Hinzufügen von Dropout zwischen den Schichten führt normalerweise zu einer höheren Trainingsstabilität und zuverlässigeren Ergebnissen. Verwenden Sie es in versteckten Schichten. Dropout kann auch verwendet werden, um die Leistung leicht zu verbessern. Versuchen Sie, Layer-Dropouts vor dem Training festzulegen. Aufgaben und Modelle.

Regularisierung: Wenn Ihr neuronales Netzwerk über- oder unterpasst, kann die Regularisierung die Leistung erheblich verbessern. Für normale Modelle für maschinelles Lernen ist die L1- oder L2-Regularisierung in Ordnung.

Verwenden Sie immer Experimente, um Ideen zu testen: Verwenden Sie Experimente. Experiment. Experimentieren Sie und probieren Sie Modelle aus.

Mehrfachvalidierungen: Sie können die Robustheit Ihres Modells gegenüber Überanpassungen verbessern, indem Sie Mehrfachvalidierungen verwenden. Allerdings geht dies mit Kosten der Rechenzeit einher.

6. Etikettenglättung

Papierlink:

Wann hilft die Etikettenglättung?:

https://arxiv.org/pdf/1906.02629.pdf

Die Kernformel ist in einer Zeile zusammengefasst:

Funktioniert normalerweise gut und ist in vielen Spielen zu sehen. Am Beispiel der binären Klassifizierungsaufgabe ist unten der Beispielcode für die Etikettenglättung angegeben, der direkt verwendet werden kann.

Tensorflow:

loss = BinaryCrossentropy(label_smoothing = label_smoothing)

Pytorch:

from torch.nn.modules.loss import _WeightedLoss

class SmoothBCEwLogits(_WeightedLoss):
    def __init__(self, weight = None, reduction = 'mean', smoothing = 0.0, pos_weight = None):
        super().__init__(weight=weight, reduction=reduction)
        self.smoothing = smoothing
        self.weight = weight
        self.reduction = reduction
        self.pos_weight = pos_weight

    @staticmethod
    def _smooth(targets, n_labels, smoothing = 0.0):
        assert 0 <= smoothing < 1
        with torch.no_grad(): targets = targets * (1.0 - smoothing) + 0.5 * smoothing
        return targets

    def forward(self, inputs, targets):
        targets = SmoothBCEwLogits._smooth(targets, inputs.size(-1), self.smoothing)
        loss = F.binary_cross_entropy_with_logits(inputs, targets,self.weight, pos_weight = self.pos_weight)
        if  self.reduction == 'sum': loss = loss.sum()
        elif  self.reduction == 'mean': loss = loss.mean()
        return loss

7. Wissensdestillation

Nutzen Sie ein großes Lehrernetzwerk, um das Lernen eines kleinen Netzwerks zu leiten.

Schritt:

  • Große Modelle trainieren: Große Modelle anhand von Daten trainieren.

  • Soft Labels berechnen: Verwenden Sie das trainierte große Modell, um Soft Labels zu berechnen. Das heißt, die Ausgabe von Softmax, nachdem das große Modell „erweicht“ wurde

  • Training des Schülermodells: Trainieren Sie auf der Grundlage des großen Modells ein Schülermodell basierend auf der Ausgabe des Lehrers als zusätzliche Soft-Label-Verlustfunktion und passen Sie das Verhältnis der beiden Verlustfunktionen durch Interpolation an.

8. Pseudo-Kennzeichnung

Verwenden Sie das Modell, um unbeschriftete Daten (z. B. Testdaten) zu kennzeichnen, und verwenden Sie dann die neuen gekennzeichneten Daten, um das Modell neu zu trainieren.

Schritt:

  • Trainieren Sie das Lehrermodell: Trainieren Sie das Modell anhand der Ihnen vorliegenden Daten.

  • Pseudo-Labels berechnen: Soft-Labels für unbeschriftete Daten mithilfe eines trainierten großen Modells berechnen.

  • Verwenden Sie nur vom Modell „sichere“ Ziele: Verwenden Sie nur Vorhersagen mit der höchsten Konfidenz als Pseudobezeichnungen, um Fehler so weit wie möglich zu vermeiden. (Wenn Sie dies nicht tun, funktioniert es möglicherweise nicht)

  • Studnet-Modellschulung: Trainieren Sie ein Studentenmodell anhand neuer gekennzeichneter Daten, die Sie haben.

9. Fehleranalyse

Beim Training passen viele Leute einfach die Parameter an, wissen aber nicht, wie sie analysieren sollen, und hören im Unternehmen oft das Wort „Analyse“. Es ist ebenso wichtig und kann uns manchmal sogar zusätzliche Ideen liefern. Eine wichtige Vorgehensweise, die Ihnen viel Zeit sparen kann, besteht darin, Ihr Modell zum Auffinden schwierigerer oder beschädigter Datenbeispiele zu verwenden. Bilder können für Ihr Modell aus verschiedenen Gründen „schwieriger“ sein, z. B. kleine Zielobjekte, unterschiedliche Farben, abgeschnittene Ziele, ungültige Anmerkungen usw. Versuchen Sie herauszufinden, warum, es könnte Ihnen helfen.

Fehler sind manchmal eine gute Nachricht!

Dies sind die Muster, die die Spitzenreiter vom Rest der Spieler unterscheiden. Wenn Sie Schwierigkeiten haben, zu erklären, was mit Ihrem Modell passiert, sehen Sie sich die Validierungsbeispiele an, auf die Ihr Modell gestoßen ist.

Finden Sie die Fehler Ihres Modells!

Der einfachste Weg, den Fehler zu finden, besteht darin, die Validierungsstichproben nach dem Konfidenzwert des Modells zu sortieren und zu sehen, welche Stichproben die niedrigste Vorhersagekonfidenz aufweisen.

mistakes_idx = [img_idx for img_idx in range(len(train)) if int(pred[img_idx] > 0.5) != target[img_idx]]
mistakes_preds = pred[mistakes_idx]
sorted_idx = np.argsort(mistakes_preds)[:20]
# Show the images of the sorted idx here..

Zusammenfassen

Oben habe ich vieles geklärt, sie sind vielleicht nicht jedes Mal nützlich, aber denken Sie bitte daran, vielleicht werden sie in Zukunft bei einer bestimmten Aufgabe eine Rolle spielen!

Acho que você gosta

Origin blog.csdn.net/AbnerAI/article/details/129344965
Recomendado
Clasificación