Ist die Verwendung von setattr + list zum Erstellen einer variablen Anzahl von Unterschichten serialisierbar?Python

Python-Programme
Anonymous
 Ist die Verwendung von setattr + list zum Erstellen einer variablen Anzahl von Unterschichten serialisierbar?

Post by Anonymous »

Ich implementieren eine benutzerdefinierte Keras-Ebene, bei der die Anzahl der internen Unterebenen von einem benutzerdefinierten Parameter abhängt, sodass ich die Anzahl der Ebenen nicht im Voraus kenne.
Um dies zu handhaben, erstelle ich die Unterebenen in einer Schleife, weise jede einzelne mit setattr als Attribut zu und halte sie zur einfachen Iteration auch in einer Python-Liste:

Code: Select all

@keras.saving.register_keras_serializable()
class MyBlock(tf.keras.layers.Layer):
def __init__(self, n_layers):
super().__init__()
self.n_layers = n_layers
self.blocks = []

for i in range(n_layers):
layer = tf.keras.layers.Dense(8)
setattr(self, f"block_{i}", layer)
self.blocks.append(getattr(self, f"block_{i}"))

def call(self, x):
for layer in self.blocks:
x = layer(x)
return x

def get_config(self):
return {"n_layers": self.n_layers}

My understanding is that:
  • Keras verfolgt nur Layer, die als Attribute zugewiesen sind
  • Listen allein werden nicht verfolgt
  • Mit setattr wird sichergestellt, dass jeder Sublayer korrekt registriert und serialisiert wird
Ist dieser Ansatz korrekt und sicher für das Modell? Speichern/Laden, oder gibt es ein besseres von Keras empfohlenes Muster für eine variable Anzahl von Unterschichten?

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post