Могу ли я скопировать оптимизатор (состояние) из одной модели в другую? [keras, tensorflow]

#python #tensorflow #keras

#python #tensorflow #keras

Вопрос:

Предполагая, что я создаю модель A, которая имеет аналогичную, но не совсем ту же архитектуру, что и скомпилированная модель B. Могу ли я скомпилировать модель A следующим образом?

 model_A.compile(model_B.optimizer,
                loss=model_B.loss,
                metrics=model_B.metrics,
                )
  

Меня больше всего беспокоит, что некоторые значения, хранящиеся в оптимизаторе (например, обновления, веса, …), специфичны для архитектуры модели и могут привести к несоответствию. Кто-нибудь может объяснить, что именно происходит, когда я выполняю такое копирование? Я не смог извлечь полезную информацию из исходного кода (l37ff).

P.s.: Состояние оптимизатора также копируется таким образом? Если нет, можете ли вы скопировать его как-нибудь?

Ответ №1:

Мы можем использовать оптимизатор из одной модели в другую. Большинство оптимизаторов принимают скорость обучения, импульс, затухание и т.д. В качестве аргументов. model.compile инициализирует веса в соответствии с вашим аргументом. оптимизатор заботится только о том, как распределяются ваши потери после его вычисления.

Мы изменим оптимизатор только для того, чтобы наша модель быстрее сходилась для заданных данных.

Но вы, возможно, не сможете использовать одну и ту же функцию потерь для разных моделей (модель b может быть mse, а модель a может иметь softmax в качестве последнего слоя). то же самое справедливо и для точности.

Комментарии:

1. Итак, состояние оптимизатора (сохраненное в optimizer.updates в соответствии с моим пониманием) не копируется таким образом?

2. если вы используете keras, нет ничего похожего на model.optimizer, для обучения вашей модели с помощью model.fit() вы объявите оптимизаторы в keras ‘optimizers’, например sgd = keras.optimizers.SGD(«параметр»), а затем используете в своей model.fit( optimizer = ) вы можете использовать один и тот же sgd как для ModelA, так и для ModelB

3. Хм .. я не понял вашего ответа. По крайней мере, в моей версии keras (2.2.4) есть model.optimizer, и его можно установить во время компиляции, а не (только) во время обучения см. keras.io/getting-started/sequential-model-guide . Более того, существует состояние оптимизатора, которое может быть сохранено в соответствии с keras.io/getting-started/faq/#how-can-i-save-a-keras-model

4. в keras Model есть класс, у которого нет метода optimizer(). оптимизаторы, подобные sgd, принадлежат к классу optimizer. извините, модель в моем предыдущем комментарии является экземпляром класса Model.