我想使用已经训练好的模型来分两步构建一个新模型。
根据该图,已经训练好的模型为model_109,具有第一层LSTM(Extracteur_LSTM),第二层密集输出和最后一个密集输出。
我的目标是输入model_109并获取输出(output1)。 和 作为第二个模型,仅使用model_109(Extracteur_LSTM)输出的头,将其合并到output1以提供新的密集模型。 我的最终输出是model_109 AND新的密集模型的输出。
tensor_input = Input(shape=(Xn.shape[1], Xn.shape[2]), name='input2')
prev_model = load_model('model_109.h5')
out_prev_mod = prev_model(tensor_input)
merge_1 = Concatenate()([prev_model.layers[1].output, out_prev_mod])
xy2 = Dense(60+1, activation='softsign',
kernel_initializer= initializers.he_uniform(),
name='DenseOutput2')(merge_1)
xy2 = Dropout(rate = 02])(xy2)
out2 = Dense(1, activation='linear',
kernel_initializer= initializers.he_uniform(),
name='Output2')(xy2)
output = Concatenate()([out_prev_mod, out2])
model = Model(inputs=[prev_model.input, tensor_input], outputs=[output])
optimizer = optimizers.Adam(lr=params['learningRate']) # optimizer = RMSprop,
'Adagrad', 'adam' 'adadelta'
early_stopping = EarlyStopping(monitor='val_loss', patience=autres_param['patience'] )
if chckpts == True:
filepath = 'models/' + nom_exp + "_best-weights.h5"
checkpoint = ModelCheckpoint(filepath= filepath, monitor='val_loss',
mode='min', save_best_only=True)
cllBck = [early_stopping, checkpoint]
else:
cllBck = [early_stopping]
model.compile(optimizer=optimizer, loss=params['loss'])
history = model.fit([Xn], yn, validation_split =
autres_param['valid_ratio'],
epochs=autres_param['epochs'], shuffle = autres_param['shuffle'],
batch_size = autres_param['batch'], verbose=2, callbacks=cllBck)
在图中,input1和input相同,而Extracteur_LSTM是Model_109第一层的副本
最后我收到此错误...
ValueError:检查模型输入时出错:传递给模型的Numpy数组列表不是模型预期的大小。预计会看到2个数组,但获得了以下1个数组的列表:[array([[[[[8.19255325e-04,
答案 0 :(得分:0)
最后钉它。...
tensor_input = Input(shape=(Xn.shape[1], Xn.shape[2]), name='input')
prev_model = load_model('model_109.h5')
# keep head of model
model2= Model(inputs=prev_model .input, outputs=prev_model.layers[-2].output)
new_mod = Sequential()
new_mod.add(prev_model )
# Freeze trained Layer 0
new_mod.layers[0].trainable = False
## add/replace layer
new_mod.add(Dense(params['unitsDense1'], activation=params['activationDenseOutput'],
kernel_initializer= initializers.he_uniform(),
name='DenseOutput1'))
new_mod.add(Dense(1, activation=params['activationDenseOutput'],
kernel_initializer= initializers.he_uniform(),
name='DenseOutput1'))