如何使用 Keras 函数式 API 模型的输出作为另一个模型的输入

Flo*_*n C 4 python keras tensorflow

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

基本模型如下所示:

层(类型)输出形状参数 #
input_1 (InputLayer) (None, 30, 1) 0
__________________________________________________________________ lstm_1 (LSTM) (None, 64)
16896 ________________________________________________________________ dropout_1 (Dropout) (None, 64) 0
_________________________________________________________________dense_1 (Dense) 96) 6240
_________________________________________________________________ dropout_2(辍学)(无,96) 0
__________________________________________________________________ 密集_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()
Run Code Online (Sandbox Code Playgroud)

我收到错误消息:“TypeError:输入层Model必须是InputLayer对象。接收到的输入:[, ]。输入 0(基于 0)来自层类型Dense。”。关于我缺少什么的任何建议?提前致谢。

Aru*_*tel 5

在行中

newModel = Model(inputs=[input_1,input_2], outputs=new_output)
Run Code Online (Sandbox Code Playgroud)

你有“input_1”你在哪里定义它。错误是因为此变量未定义

根据你的情况,你应该使用

input_1=baseModel.input
Run Code Online (Sandbox Code Playgroud)