У меня есть сеть со следующими характеристиками:
Layer (type) Output Shape Param #
input_38 (InputLayer) (None, 474) 0
dense_149 (Dense) (None, 120) 57000
dense_150 (Dense) (None, 120) 14520
dropout_38 (Dropout) (None, 120) 0
dense_151 (Dense) (None, 120) 14520
dense_152 (Dense) (None, 1) 121
Теперь я тренирую модель и сохраняю веса первых 2 плотных слоев, используя:
reshaped_weights1 = model.layers[1].get_weights()
reshaped_weights2 = model.layers[2].get_weights()
и пытается использовать эти веса в другой модели (точная настройка) с такой же структурой, как указано выше, но с подмножеством данных, используемых для обучения первой модели.Модель выглядит следующим образом:
def createModelHelper1(dropoutRate = 0.0, numNeurons=40, optimizer = 'adam', numNeuronsFirstTwo=40):
inputLayer = Input(shape=(data.shape[1],))
denseLayer1 = Dense(numNeuronsFirstTwo, kernel_regularizer=l2(0.001))(inputLayer)
denseLayer2 = Dense(numNeuronsFirstTwo, kernel_regularizer=l2(0.001))(denseLayer1)
dropoutLayer = Dropout(dropoutRate)(denseLayer2)
denseLayer3 = Dense(numNeurons, kernel_regularizer=l2(0.001))(dropoutLayer)
outputLayer = Dense(1, activation='sigmoid')(denseLayer3)
model = Model(input=inputLayer, output=outputLayer)
model.layers[1].set_weights(reshaped_weights1) #ERROR
model.layers[1].trainable = False #freezing the layer
model.layers[2].set_weights(reshaped_weights2)
model.layers[2].trainable = False #freezing the layer
model.compile(loss='binary_crossentropy', optimizer=optimizer)
return model
Я получаю сообщение об ошибке, в котором говорится:
The weight shape (474,60) not compatible with provided weight shape (474, 120).
Что я здесь не так делаю?Структура абсолютно одинакова для обеих моделей?Заранее большое спасибо!