Я реализую 3D U-Net в TensorFlow/Keras. У меня есть собственный слой Encoder, который принимает аргумент Basic_module. Этот аргумент представляет собой класс, который наследуется от keras.layers.Layer (например, DoubleConv или ResNetBlock) и создается внутри Encoder.
Вот упрощенная версия моего кода:
@keras.saving.register_keras_serializable(package="U-Net", name="Encoder")
class Encoder(layers.Layer):
def __init__(self, in_channels, out_channels, basic_module=DoubleConv, **kwargs):
super().__init__(**kwargs)
self.in_channels = in_channels
self.out_channels = out_channels
self.basic_module_class = basic_module
# Instantiate the basic module
self.basic_module = basic_module(
in_channels=in_channels,
out_channels=out_channels,
encoder=True
)
def call(self, x, training=False):
x = self.basic_module(x, training=training)
return x
def get_config(self):
config = super().get_config()
config.update({
"in_channels": self.in_channels,
"out_channels": self.out_channels,
"basic_module": keras.saving.serialize_keras_object(self.basic_module_class),
})
return config
@classmethod
def from_config(cls, config):
basic_module_class = keras.saving.deserialize_keras_object(config.pop("basic_module"))
return cls(basic_module=basic_module_class, **config)
Я хочу сделать это полностью сериализуемым с помощью model.save() и keras.models.load_model(). Я не уверен, что это правильный способ сериализации слоя, когда Basic_module передается как класс.
Пример использования:
encoder = Encoder(in_channels=1, out_channels=32, basic_module=DoubleConv)
encoder_config = encoder.get_config()
new_encoder = Encoder.from_config(encoder_config)
Подробнее здесь: https://stackoverflow.com/questions/798 ... sed-as-a-c
Как сериализовать и десериализовать слой Keras, когда подмодуль передается как класс ⇐ Python
Программы на Python
1767152209
Anonymous
Я реализую 3D U-Net в TensorFlow/Keras. У меня есть собственный слой Encoder, который принимает аргумент Basic_module. Этот аргумент представляет собой [b]класс[/b], который наследуется от keras.layers.Layer (например, DoubleConv или ResNetBlock) и создается внутри Encoder.
Вот упрощенная версия моего кода:
@keras.saving.register_keras_serializable(package="U-Net", name="Encoder")
class Encoder(layers.Layer):
def __init__(self, in_channels, out_channels, basic_module=DoubleConv, **kwargs):
super().__init__(**kwargs)
self.in_channels = in_channels
self.out_channels = out_channels
self.basic_module_class = basic_module
# Instantiate the basic module
self.basic_module = basic_module(
in_channels=in_channels,
out_channels=out_channels,
encoder=True
)
def call(self, x, training=False):
x = self.basic_module(x, training=training)
return x
def get_config(self):
config = super().get_config()
config.update({
"in_channels": self.in_channels,
"out_channels": self.out_channels,
"basic_module": keras.saving.serialize_keras_object(self.basic_module_class),
})
return config
@classmethod
def from_config(cls, config):
basic_module_class = keras.saving.deserialize_keras_object(config.pop("basic_module"))
return cls(basic_module=basic_module_class, **config)
Я хочу сделать это полностью сериализуемым с помощью model.save() и keras.models.load_model(). Я не уверен, что это [b]правильный способ сериализации слоя, когда Basic_module передается как класс[/b].
[b]Пример использования:[/b]
encoder = Encoder(in_channels=1, out_channels=32, basic_module=DoubleConv)
encoder_config = encoder.get_config()
new_encoder = Encoder.from_config(encoder_config)
Подробнее здесь: [url]https://stackoverflow.com/questions/79857944/how-to-serialize-and-deserialize-a-keras-layer-when-a-submodule-is-passed-as-a-c[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия