2016-12-10 3 views
0

Я пытаюсь взять последний слой в модели (старая модель) и создать новую модель только одного слоя (новой модели), которая имеет те же параметры, что и последний слой старой модели. Я хочу сделать это таким образом, что это не зависит от того, каков последний слой старой модели. Я пытаюсь сделать это с помощью этого кода, но получаю сообщение об ошибке.Копирование параметров слоя в Keras

newModel = Sequential() 
newModel.add(type(oldModel.layers[-1])(oldModel.layers[-1].output_shape, 
              activation=oldModel.layers[-1].activation, 
              input_shape=oldModel.layers[-1].input_shape)) 

Это дает следующее сообщение об ошибке:

TypeError: __init__() missing 1 required positional argument: 'output_dim' 

Если я просматриваю последний слой oldModel, он показывает мне это:

full_model.model.layers[-1] 
>>>> <keras.layers.core.Dense at 0x7fe22010e128> 

Я попытался добавления output_dim в список параметров Я копирую таким образом, но это, похоже, не помогло. Это дало мне эту ошибку вместо этого, когда я это сделал:

Exception: Input 0 is incompatible with layer dense_8: expected ndim=2, found ndim=3 

Любая идея, что я делаю неправильно здесь?

ответ

0

Нашел ответ самостоятельно. Если вместо того, чтобы сделать input_shape таким же, как input_shape последнего слоя старой модели, я делаю его output_shape предпоследнего слоя старой модели и задаю только [1:] этого выходного массива, он работает. Код, который работает, является следующим:

newModel.add(type(oldModel.layers[-1])(oldModel.layers[-1].output_shape, 
             activation=oldModel.layers[-1].activation, 
             input_shape=oldModel.layers[-2].output_shape[1:])) 
Смежные вопросы