Использует ли setattr + list для создания сериализуемого количества переменного количества подслоев?Python

Программы на Python
Ответить
Anonymous
 Использует ли setattr + list для создания сериализуемого количества переменного количества подслоев?

Сообщение Anonymous »

Я реализую собственный слой Keras, где количество внутренних подслоев зависит от пользовательского параметра, поэтому я не знаю количество слоев заранее.
Чтобы справиться с этим, я создаю подслои в цикле, назначаю каждый из них в качестве атрибута с помощью setattr, а также сохраняю их в списке Python для упрощения итерации:

Код: Выделить всё

@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 отслеживает только слои, назначенные в качестве атрибутов
  • Само по себе списки не отслеживаются
  • Использование setattr гарантирует правильную регистрацию и сериализацию каждого подслоя
Правильен ли и безопасен ли этот подход для сохранения/загрузки модели, или есть ли лучший шаблон, рекомендованный Keras, для переменного количества подслоев?

Подробнее здесь: https://stackoverflow.com/questions/798 ... rializable
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»