Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/341.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python keras模型的合并,投入产出问题_Python_Tensorflow_Keras_Merge_Concat - Fatal编程技术网

Python keras模型的合并,投入产出问题

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='

我想用一个已经训练过的模型,分两步建立一个新的模型

根据图中第一层LSTM(提取器LSTM),第二层密集输出,最后一层密集输出,将已经训练好的模型视为模型109

我的目标是为模型_109馈电并获得输出(output1)。 和 作为第二个模型,仅使用模型_109(提取器_LSTM)输出的头部,将其合并到输出1,以提供新的稠密模型。 我的最终输出是模型_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是相同的,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'))