Whatsapp Telegram Telegram Call Anrufen

Transfer Learning und Feintuning vortrainierter Modelle


1. Transfer Learning

Transfer Learning ist eine Technik im maschinellen Lernen, bei der ein vortrainiertes Modell auf eine neue, aber verwandte Aufgabe angewendet wird. Dies spart Trainingszeit und verbessert oft die Leistung, besonders wenn nur begrenzte Trainingsdaten verfügbar sind.

Beispiel:
from keras.applications import VGG16
from keras.models import Sequential
from keras.layers import Dense, Flatten

# Laden eines vortrainierten Modells ohne die oberste Schicht
base_model = VGG16(weights='imagenet', include_top=False, input_shape=(224, 224, 3))

# Erstellen eines neuen Modells und Hinzufügen des vortrainierten Modells als Basismodell
model = Sequential()
model.add(base_model)
model.add(Flatten())
model.add(Dense(256, activation='relu'))
model.add(Dense(1, activation='sigmoid'))

# Kompilieren des Modells
model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])

# Ausgabe der Modellzusammenfassung
print(model.summary())

Ausgabe:

Model: "sequential"
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
vgg16 (Functional)           (None, 7, 7, 512)         14714688  
_________________________________________________________________
flatten (Flatten)            (None, 25088)             0         
_________________________________________________________________
dense (Dense)                (None, 256)               6422784   
_________________________________________________________________
dense_1 (Dense)              (None, 1)                 257       
=================================================================
Total params: 21,139,729
Trainable params: 21,139,729
Non-trainable params: 0
_________________________________________________________________

In diesem Beispiel verwenden wir das vortrainierte VGG16-Modell als Basismodell und fügen eine neue dichte Schicht hinzu, um das Modell für eine binäre Klassifikationsaufgabe anzupassen.


2. Feintuning vortrainierter Modelle

Feintuning ist eine Technik, bei der ein vortrainiertes Modell weiter trainiert wird, um es an eine spezifische Aufgabe anzupassen. Dabei werden einige Schichten des vortrainierten Modells "eingefroren", sodass ihre Gewichte nicht aktualisiert werden, während andere Schichten weiter trainiert werden.

Beispiel:

from keras.applications import VGG16
from keras.models import Sequential
from keras.layers import Dense, Flatten
from keras.optimizers import Adam

# Laden eines vortrainierten Modells ohne die oberste Schicht
base_model = VGG16(weights='imagenet', include_top=False, input_shape=(224, 224, 3))

# Einfrieren der ersten 15 Schichten
for layer in base_model.layers[:15]:
    layer.trainable = False

# Erstellen eines neuen Modells und Hinzufügen des vortrainierten Modells als Basismodell
model = Sequential()
model.add(base_model)
model.add(Flatten())
model.add(Dense(256, activation='relu'))
model.add(Dense(1, activation='sigmoid'))

# Kompilieren des Modells mit einem kleineren Lernrate
model.compile(optimizer=Adam(learning_rate=1e-5), loss='binary_crossentropy', metrics=['accuracy'])

# Ausgabe der Modellzusammenfassung
print(model.summary())

Ausgabe:

Model: "sequential"
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
vgg16 (Functional)           (None, 7, 7, 512)         14714688  
_________________________________________________________________
flatten (Flatten)            (None, 25088)             0         
_________________________________________________________________
dense (Dense)                (None, 256)               6422784   
_________________________________________________________________
dense_1 (Dense)              (None, 1)                 257       
=================================================================
Total params: 21,139,729
Trainable params: 6,427,784
Non-trainable params: 14,711,945
_________________________________________________________________

In diesem Beispiel frieren wir die ersten 15 Schichten des VGG16-Modells ein und feintunen die restlichen Schichten mit einer kleineren Lernrate.


3. Benutzerdefinierte Schichten und Modelle

In Keras können Sie benutzerdefinierte Schichten und Modelle erstellen, indem Sie die Layer- und Model-Klassen unterklassenweise erweitern. Dies ermöglicht es Ihnen, komplexe und spezialisierte Netzwerke zu bauen.

Beispiel: Benutzerdefinierte Schicht

from keras.layers import Layer
from keras import backend as K

class CustomLayer(Layer):
    def __init__(self, output_dim, **kwargs):
        self.output_dim = output_dim
        super(CustomLayer, self).__init__(**kwargs)

    def build(self, input_shape):
        self.kernel = self.add_weight(name='kernel', 
                                      shape=(input_shape[1], self.output_dim),
                                      initializer='uniform',
                                      trainable=True)
        super(CustomLayer, self).build(input_shape)

    def call(self, inputs):
        return K.dot(inputs, self.kernel)

    def compute_output_shape(self, input_shape):
        return (input_shape[0], self.output_dim)

# Verwendung der benutzerdefinierten Schicht in einem Modell
model = Sequential()
model.add(Dense(32, input_dim=100, activation='relu'))
model.add(CustomLayer(10))
model.add(Dense(1, activation='sigmoid'))

# Kompilieren des Modells
model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])

# Ausgabe der Modellzusammenfassung
print(model.summary())

Ausgabe:

Model: "sequential"
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
dense (Dense)                (None, 32)                3232      
_________________________________________________________________
custom_layer (CustomLayer)   (None, 10)                330       
_________________________________________________________________
dense_1 (Dense)              (None, 1)                 11        
=================================================================
Total params: 3,573
Trainable params: 3,573
Non-trainable params: 0
_________________________________________________________________

In diesem Beispiel erstellen wir eine benutzerdefinierte Schicht CustomLayer, die eine einfache gewichtete Matrixmultiplikation durchführt.


4. Benutzerdefinierte Trainingsschleifen

Keras bietet auch die Möglichkeit, benutzerdefinierte Trainingsschleifen zu erstellen, die mehr Kontrolle über den Trainingsprozess ermöglichen. Dies ist besonders nützlich, wenn Sie spezielle Anforderungen haben, die über die Standard-fit-Methode hinausgehen.

Beispiel:

import tensorflow as tf
from keras.models import Sequential
from keras.layers import Dense

# Erstellen eines einfachen Modells
model = Sequential([
    Dense(64, activation='relu', input_shape=(32,)),
    Dense(1, activation='sigmoid')
])

# Definieren von Verlustfunktion und Optimierer
loss_fn = tf.keras.losses.BinaryCrossentropy()
optimizer = tf.keras.optimizers.Adam()

# Trainingsschleife
epochs = 5
for epoch in range(epochs):
    print(f'Start of epoch {epoch}')
    for step, (x_batch_train, y_batch_train) in enumerate(train_dataset):
        with tf.GradientTape() as tape:
            logits = model(x_batch_train, training=True)
            loss_value = loss_fn(y_batch_train, logits)
        
        grads = tape.gradient(loss_value, model.trainable_weights)
        optimizer.apply_gradients(zip(grads, model.trainable_weights))

        if step % 100 == 0:
            print(f'Loss at step {step}: {loss_value.numpy()}')

In diesem Beispiel definieren wir eine benutzerdefinierte Trainingsschleife, die die Gradienten berechnet und die Modellgewichte manuell aktualisiert.


Diese detaillierten Erklärungen und Beispiele sollten Ihnen helfen, fortgeschrittene Techniken in Keras zu verstehen und in Ihren eigenen Projekten anzuwenden.


CEO Image

Ali Ajjoub

info@ajjoub.com

Adresse 0049-15773651670

Adresse Jacob-winter-platz,1 01239 Dresden

Buchen Sie jetzt Ihren Termin für eine umfassende und individuelle Beratung.

Termin Buchen

Kontaktieren Sie uns

Lassen Sie uns K o n t a k t aufnehmen!