Keras - Die Zwischenschicht im Funktionsmodell ersetzenPython

Python-Programme
Anonymous
 Keras - Die Zwischenschicht im Funktionsmodell ersetzen

Post by Anonymous »

Ich versuche, eine benutzerdefinierte Implementierung von LORA für Keras zu erstellen, und ich stoße in Schwierigkeiten, meinen Ansatz zur Arbeit zu erlangen. Ich verwende Keras 3.4.1 in Google Collaby. Ich versuche jedoch, eine Lösung zu finden, die für Funktionsmodelle funktioniert, nicht nur für sequentielle Modelle wie VGG16. Zunächst erstelle ich das Modell ohne die letzte Schicht, deaktiviere das Training und drucke seine Zusammenfassung aus: < /p>

Code: Select all

vgg16_lora  = tf.keras.applications.vgg16.VGG16(weights="imagenet", input_shape=(224, 224, 3))
vgg16_lora.trainable = False

lora_model = tf.keras.Model(inputs=vgg16_lora.inputs, outputs=vgg16_lora.layers[-2].output)
lora_model.summary()
Ausgabe:

Dann versuche ich die LORA-Schicht wie folgt hinzuzufügen:
import math

class LoraLayer(tf.keras.Layer):
def __init__(self, original_layer, rank=8, trainable=False, **kwargs):
original_layer_config = original_layer.get_config()
name = original_layer_config["name"]
kwargs.pop('name', None)

super().__init__(name=name, trainable=trainable, **kwargs)

self.original_layer = original_layer
self.original_layer.trainable = False

self.A = tf.keras.layers.Dense(units=rank, use_bias=False, kernel_initializer=tf.keras.initializers.VarianceScaling(scale=math.sqrt(5), mode="fan_in", distribution="uniform"), trainable=trainable, name="lora_A")
self.B = tf.keras.layers.Dense(units=original_layer.output.shape[-1], kernel_initializer="zeros", trainable=trainable, name="lora_B")

def call(self, inputs):
original_outputs = self.original_layer(inputs)
lora_outputs = self.B(self.A(inputs))
return original_outputs + lora_outputs

lora_model._tracker.unlock()
lora_model.layers[-2] = LoraLayer(lora_model.layers[-2], rank=8, trainable=False)
lora_model._tracker.lock()
lora_model.summary()
< /code>
Meine Absicht mit diesem Code ist es, die vorletzte Schicht durch selbst zu ersetzen. Gemäß der Zusammenfassung des Modells geschieht dies jedoch nicht:

Falsch in meiner Implementierung? Vielleicht hat es etwas mit dem zu tun, was in diesem Problem erklärt wird, und es ist grundsätzlich unmöglich in Keras zu tun, oder gibt es einen Zwischenschritt, den ich fehlt, damit dies funktioniert?>

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post