keras模型合并,输入输出问题
merge of keras model, input output problem
我想使用一个已经训练好的模型分两步构建一个新模型。
根据图中,将已经训练好的模型视为 model_109,第一层 LSTM (Extracteur_LSTM),第二层密集输出,最后一层密集输出。
我的目标是提供 model_109 并获得输出 (output1)。
和
作为第二个模型,仅使用 model_109 (Extracteur_LSTM) 输出的头部,将其合并到 output1 以提供新的密集模型。
我的最终输出是 model_109 和新密集模型的输出。
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,
终于搞定了....
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'))
我想使用一个已经训练好的模型分两步构建一个新模型。
根据图中,将已经训练好的模型视为 model_109,第一层 LSTM (Extracteur_LSTM),第二层密集输出,最后一层密集输出。
我的目标是提供 model_109 并获得输出 (output1)。 和 作为第二个模型,仅使用 model_109 (Extracteur_LSTM) 输出的头部,将其合并到 output1 以提供新的密集模型。 我的最终输出是 model_109 和新密集模型的输出。
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,
终于搞定了....
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'))