Изменить обученную модель архитектуры и продолжить обучение Кераса - PullRequest
5 голосов
/ 09 марта 2020

Я хочу тренировать модель последовательно. То есть сначала я хочу обучить модель простой архитектуре, а после обучения хочу добавить пару слоев и продолжить обучение. Возможно ли это сделать в Керасе? Если так, то как?

Я пытался изменить архитектуру модели. Но пока я не скомпилирую, изменения не будут эффективными. После компиляции все веса повторно инициализируются, и я теряю всю обученную информацию.

Все вопросы в Интернете и SO, которые я нашел, касаются либо загрузки предварительно обученной модели и продолжения обучения, либо изменения архитектуры предварительно обученной модели, а затем только проверить его. Я не нашел ничего связанного с моим вопросом. Любые указатели также высоко ценятся.

PS: Я использую Keras в пакете tenorflow 2.0.

1 Ответ

2 голосов
/ 09 марта 2020

Не зная деталей вашей модели, следующий фрагмент может помочь:

from tensorflow.keras.models import Model
from tensorflow.keras.layers import Dense, Input

# Train your initial model
def get_initial_model():
    ...
    return model

model = get_initial_model()
model.fit(...)
model.save_weights('initial_model_weights.h5')

# Use Model API to create another model, built on your initial model
initial_model = get_initial_model()
initial_model.load_weights('initial_model_weights.h5')

nn_input = Input(...)
x = initial_model(nn_input)
x = Dense(...)(x)  # This is the additional layer, connected to your initial model
nn_output = Dense(...)(x)

# Combine your model
full_model = Model(inputs=nn_input, outputs=nn_output)

# Compile and train as usual
full_model.compile(...)
full_model.fit(...)

По сути, вы тренируете свою первоначальную модель, сохраняете ее. И перезагрузите его снова, и оберните его вместе с вашими дополнительными слоями, используя Model API. Если вы не знакомы с Model API, вы можете проверить документацию Keras здесь (на самом деле API остается неизменным для Tensorflow.Keras 2.0).

Обратите внимание, что вам нужно проверьте, совместима ли выходная форма конечного слоя вашей исходной модели с дополнительными слоями (например, вы можете удалить конечный плотный слой из вашей исходной модели, если вы просто извлекаете объект).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...