#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.