Ich bin immer noch Neuling in tensorflow
und ich versuche zu verstehen, was in Details passiert, während das Training meiner Modelle weitergeht. Kurz gesagt, ich verwende die slim
Modelle, die auf ImageNet
vortrainiert sind, um die finetuning
auf meinem Dataset zu tun. Hier sind einige Parzellen von tensorboard für 2 separate Modelle extrahieren:Interpretieren Tensorboard Plots
Model_1 (InceptionResnet_V2)
Model_2 (InceptionV4)
Bisher beiden Modelle schlechte Ergebnisse auf den Validierungssätzen (Durchschnittliches Az (Fläche unter die ROC-Kurve) = 0,7 für Model_1
& 0,79 für Model_2
). Meine Interpretation zu diesen Plots ist, dass sich die Gewichte nicht über die Mini-Chargen ändern. Es sind nur die Vorurteile, die sich über die Mini-Chargen ändern, und dies könnte das Problem sein. Aber ich weiß nicht, wo ich nachsehen soll, um diesen Punkt zu überprüfen. Dies ist die einzige Interpretation, die ich mir vorstellen kann, aber es könnte falsch sein, wenn man bedenkt, dass ich immer noch Neuling bin. Kannst du mir bitte deine Gedanken mitteilen? Zögern Sie nicht, im Notfall weitere Parzellen anzufordern.
EDIT: Wie Sie in den folgenden Darstellungen sehen können, scheint es, dass die Gewichte sich im Laufe der Zeit kaum ändern. Dies gilt für alle anderen Gewichtungen für beide Netzwerke. Dies führte mich zu der Annahme, dass es irgendwo ein Problem gibt, aber ich weiß nicht, wie ich es interpretieren soll.
InceptionV4 weights
InceptionResnetV2 weights
EDIT2: Diese Modelle zunächst auf IMAGEnet ausgebildet wurden und diese Diagramme sind die Ergebnisse von ihnen auf meinem Dataset Feinstimm. Ich verwende einen Datensatz von 19 Klassen mit ungefähr 800000 Bildern darin. Ich mache ein Multi-Label-Klassifikationsproblem und verwende sigmoid_crossentropy als Verlustfunktion. Die Klassen sind sehr unausgewogen.In der nachstehenden Tabelle sind zeigen wir den Prozentsatz der Anwesenheit von jeder Klasse in den zwei Untergruppen (Zug, Validierung):
Objects train validation
obj_1 3.9832 % 0.0000 %
obj_2 70.6678 % 33.3253 %
obj_3 89.9084 % 98.5371 %
obj_4 85.6781 % 81.4631 %
obj_5 92.7638 % 71.4327 %
obj_6 99.9690 % 100.0000 %
obj_7 90.5899 % 96.1605 %
obj_8 77.1223 % 91.8368 %
obj_9 94.6200 % 98.8323 %
obj_10 88.2051 % 95.0989 %
obj_11 3.8838 % 9.3670 %
obj_12 50.0131 % 24.8709 %
obj_13 0.0056 % 0.0000 %
obj_14 0.3237 % 0.0000 %
obj_15 61.3438 % 94.1573 %
obj_16 93.8729 % 98.1648 %
obj_17 93.8731 % 97.5094 %
obj_18 59.2404 % 70.1059 %
obj_19 8.5414 % 26.8762 %
Die Werte des hyperparams:
batch_size=32
weight_decay = 0.00004 #'The weight decay on the model weights.'
optimizer = rmsprop
rmsprop_momentum = 0.9
rmsprop_decay = 0.9 #'Decay term for RMSProp.'
learning_rate_decay_type = exponential #Specifies how the learning rate is decayed
learning_rate = 0.01 #Initial learning rate.
learning_rate_decay_factor = 0.94 #Learning rate decay factor
num_epochs_per_decay = 2.0 #'Number of epochs after which learning rate
In Bezug auf die sparsity von die Schichten, sind hier einige Proben der sparsity der Schichten für beide Netze:
sparsity (InceptionResnet_V2)
sparsity (InceptionV4)
EDITED3: Hier sind die Plots der Verluste für beide Modelle:
Losses and regularization loss (InceptionResnet_V2)
Losses and regularization loss (InceptionV4)
Ich bin nicht vertraut mit RMSprop, aber diese Hyperparameter sehen gut aus für mich. Sie haben auch eine beträchtliche Menge an Daten ... Ich weiß, auROC ist eine gute Metrik für voreingenommene Klassifizierung, aber aus Neugier haben Sie Top-1 oder - vorzugsweise - ** Top-5 Genauigkeit **? Wie wäre es mit einer Darstellung des tatsächlichen ** Verlustwertes **? –
In meinem Fall ist es eine Multi-Label-Klassifizierung, so dass es keine Möglichkeit gibt, über das Problem als Top-1 oder Top-5 nachzudenken, weil ein Bild 19 verschiedene Klassen hat (nicht nur eine Hauptklasse in der Multi-Klasse) Einstufung). Ich habe die Verluste Plots hinzugefügt – Maystro
Mein Fehler, ich habe das Problem falsch verstanden. Danke für die Verlustplots. –