Частичное переопределение пакетовPython

Программы на Python
Ответить
Anonymous
 Частичное переопределение пакетов

Сообщение Anonymous »

Моя проблема
У меня проблема с переопределением только частей конфигурации, но с сохранением значений по умолчанию. Например, полная конфигурация выглядит следующим образом (структурированная конфигурация):

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

@dataclass
class MyConfig(DictConfig):
_target_: str = "py.runner.MyRunner"
some_other_field: Any
loss: LossConfig
model: ModelConfig
defaults: list[Any] = field(
default_factory=lambda: [{"model": "default"}, "_self_"]
)

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

conf/model/default.yaml
я указал значения по умолчанию для всех частей модели:

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

_target_: "src.model.DefaultModel"
decoder:
_target_: "torch.nn.TransformerDecoder"
...
encoder:
_target_: "torch.nn.TransformerEncoder"
...
prediction_layer:
_target_: "src.model.PredictionLayer"
...
Теперь я хотел бы изменить только model._target_ из файла конфигурации, не изменяя никаких других частей модели. Например, мне может понадобиться модель conf/model/decoder_only.yaml, окончательная конфигурация которой выглядит так:

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

_target_: "src.model.EncoderOnlyModel"
decoder:
_target_: "src.model.Dummy"
...
encoder:
_target_: "torch.nn.TransformerEncoder"
...
prediction_layer:
_target_: "src.model.PredictionLayer"
...
Что я пробовал
Использование CLI: Что работает, так это просто использовать model._target_=src.model .EncoderOnlyModel из интерфейса командной строки. Однако это становится очень затруднительным, если необходимо изменить несколько частей конфигурации.
Я пробовал различное содержимое conf/model/decoder_only.yaml и вызывал его из CLI через model=prediction_layer:
  • Наивный

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

model:
_target_: src.model.PredictionLayerModel
  • Использование подхода @package

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

# @package model
_target_: src.model.PredictionLayerModel
  • Переопределить

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

# @package _global_
defaults:
- override /model: default

model:
_target_: src.model.PredictionLayerModel
Эти три, похоже, перезаписывают все содержимое из conf/model/default.yaml.
  • Использование переопределения, как указано в разделе «Настройка экспериментов»:

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

# @package _global_
defaults:
- override /_target_: src.model.PredictionLayerModel
Это просто дает мне исключение ConfigCompositionException: в «model/prediction_layer»: не удалось переопределить «_target_». В списке значений по умолчанию нет совпадений.

[*]Использование списка значений по умолчанию:

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

# @package _global_
defaults:
- model: default
Это дает MissingConfigException: в «model/prediction_layer»: не удалось найти «model/model/default».


Подробнее здесь: https://stackoverflow.com/questions/791 ... f-packages
Ответить

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

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

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

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

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