Python keras模型的合并,投入产出问题
我想用一个已经训练过的模型,分两步建立一个新的模型 根据图中第一层LSTM(提取器LSTM),第二层密集输出,最后一层密集输出,将已经训练好的模型视为模型109 我的目标是为模型_109馈电并获得输出(output1)。 和 作为第二个模型,仅使用模型_109(提取器_LSTM)输出的头部,将其合并到输出1,以提供新的稠密模型。 我的最终输出是模型_109和新稠密模型的输出Python keras模型的合并,投入产出问题,python,tensorflow,keras,merge,concat,Python,Tensorflow,Keras,Merge,Concat,我想用一个已经训练过的模型,分两步建立一个新的模型 根据图中第一层LSTM(提取器LSTM),第二层密集输出,最后一层密集输出,将已经训练好的模型视为模型109 我的目标是为模型_109馈电并获得输出(output1)。 和 作为第二个模型,仅使用模型_109(提取器_LSTM)输出的头部,将其合并到输出1,以提供新的稠密模型。 我的最终输出是模型_109和新稠密模型的输出 tensor_input = Input(shape=(Xn.shape[1], Xn.shape[2]), name='
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是相同的,Extracter_LSTM是模型_109第一层的副本
最后我得到了这个错误
ValueError:检查模型输入时出错:传递给模型的Numpy数组列表的大小不是模型预期的大小。预计将看到2个阵列,但得到了以下1个阵列的列表:[array([[[[8.19255325e-04,最终确定它
tensor_input = Input(shape=(Xn.shape[1], Xn.shape[2]), name='input')
prev_模型=负载_模型(“模型_109.h5”)
尝试以这种方式定义模型(输入=张量输入,输出=输出)并简单地以这种方式拟合模型。拟合(Xn,yn,…)这是我的第一次尝试,但得到了这个错误…''值错误:图形断开连接:无法获得“输入”层的张量张量值(“输入”27:0,形状=(无,60,7),数据类型=浮点32).访问以下以前的层时没有问题:[]''也许这是一个好方法,我真正的问题就在这一层上
# 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'))