2017-09-04 4 views
1

Ich bin neu in Deep Learning und Keras. Was bedeutet vortrainierte Gewichtungsinitialisierungsgewichte = 'imagineet', wenn sie verwendet werden, um ein Modell in Keras zu definieren?Definieren von Modell in Keras

ResNet50(weights='imagenet') 

Vielen Dank!

+0

Wenn Ihre Frage gelöst ist, sollten Sie die meisten hilfreiche Antwort als Lösung markieren dieses Thema zu schließen. – FlashTek

Antwort

4

Diese Codezeile erstellt eine Netzwerkarchitektur, die unter dem Namen ResNet50 bekannt ist (weitere Informationen dazu finden Sie unter here). Die weights='imagenet' macht Keras lädt die Gewichte dieses Netzwerks, das auf dem imagenet Datensatz trainiert wurde. Ohne diese Information wäre Keras nur in der Lage, die Netzwerkarchitektur vorzubereiten, aber wäre nicht in der Lage, irgendwelche der Gewichtungen auf "gute" Werte zu setzen, da es den Zweck des Modells nicht kennt. Dies wird durch Angabe des Datensatzes bestimmt.

Wenn Sie einen anderen Datensatz verwenden, verwenden Sie das Modell als vortrainiertes Modell. Sie können weitere Informationen über diese Technik finden here; Die allgemeine Idee ist jedoch: Nachdem ein Modell an einem komplexen (Bild-) Datensatz trainiert wurde, hat es in seinen untersten Schichten gelernt (meistens: Faltungen), um sehr grundlegende Merkmale wie Kanten, Ecken usw. zu erkennen Dies hilft dem Modell, viel schneller den eigenen Datensatz zu analysieren, da es nicht mehr lernen muss, diese grundlegenden Funktionen zu erkennen.

+0

Danke für Ihre Antwort. Aber ich verwende einen anderen Datensatz. Wie hilft die Verwendung der Gewichte dieses Netzwerks, die in einem anderen Datensatz trainiert wurden, meinem Modell zu lernen (oder was bedeutet die Verwendung der Gewichte aus einem vortrainierten Modell?) –

+1

@AKSHAYAAVAIDYANATHAN Siehe die Änderung. – FlashTek

3

Nach @FlashTek Antwort können wir dieses Modell auch auf unserem Datensatz trainieren.

Blick auf den folgenden Code:

model = applications.ResNet50(weights = "imagenet", include_top=False, 
input_shape = (img_width, img_height,3)) 


# Freeze the layers which you don't want to train. Here I am freezing the first 30 layers. 
for layer in model.layers[0:30]: 
    layer.trainable = False 

for layer in model.layers[30:]: 
    layer.trainable = True 

#Adding custom Layers 
x = Flatten()(model.output) 
# x = Dense(1024, activation="relu")(x) 
# x = Dropout(0.5)(x) 
# x = Dense(1024, activation="relu")(x) 
# x = Dropout(0.5)(x) 
x = Dense(1024, activation="relu")(x) 
predictions = Dense(2, activation="softmax")(x) 

In dem obigen Code können wir angeben, wie viele Schicht RESNET wir auf unserem Datensatz trainieren durch layer.trainable Zuweisung entweder wahr es auf trainieren Ihr Datensatz oder falsch für sonst.

Abgesehen davon können wir auch Schicht nach der Netzwerk-Stick wie in Hinzufügen von benutzerdefinierten Schichten gezeigt

+0

Das ist eine interessante Erklärung. Vielen Dank. –