如何将Keras功能API模型的输出用作其他模型的输入

时间:2019-11-26 09:05:22

标签: python tensorflow keras

我训练了一个基本的功能API Keras模型,现在我想将其输出重新用作新模型的输入,同时还要重新使用其权重。在新模型上,我想再添加一个输入,并将其与基本模型的输出相乘。 因此,在新模型中,我希望有两个输入(包括一个基本模型+一个新添加的输入)和一个新输出,该输出由基本模型输出与新输入的逐元素相乘组成。

基本模型如下:

  

图层(类型)输出形状参数#
  input_1(InputLayer)(无,30,1)0
  _________________________________________________________________ lstm_1(LSTM)(无,64)16896
  _________________________________________________________________ dropout_1(Dropout)(None,64)0
  _________________________________________________________________ density_1(密集)(无,96)6240
  _________________________________________________________________ dropout_2(退出)(无,96)0
  _________________________________________________________________ density_2(密集)(30岁,无)2910

我尝试过(但不起作用)的代码是:

newModel = baseModel

base_output = baseModel.get_layer('dense_2').output
input_2 = Input(shape=(n_steps_in, n_features))

multiply = Multiply()([base_output,input_2])

new_output = Dense(30)(multiply)

newModel = Model(inputs=[input_1,input_2], outputs=new_output)

newModel.summary()

我收到错误:“ TypeError:Model的输入图层必须是InputLayer对象。收到的输入:[,]。输入0(基于0)源自图层类型{{1 }}。”。关于我所缺少的任何建议吗?预先感谢。

2 个答案:

答案 0 :(得分:5)

在线

newModel = Model(inputs=[input_1,input_2], outputs=new_output)

您在定义的地方有“ input_1”。错误是因为该变量未定义

根据情况,您应该使用

input_1=baseModel.input

答案 1 :(得分:2)

您缺少来自baseModel的输入。 试试:

base_input = baseModel.input
base_output = baseModel.get_layer('dense_2').output
input_2 = Input(shape=(n_steps_in, n_features))

multiply = Multiply()([base_output,input_2])

new_output = Dense(30)(multiply)

newModel = Model(inputs=[base_input, input_2], outputs=new_output)

newModel.summary()