Python 在Keras函数API中合并两个模型
我在广泛而深入的模型中游手好闲,试图用keras实现一些基本的东西。我能够使用功能性keras生成一个简单的模型和一个深度nn。然而,我有一些问题混淆了两者Python 在Keras函数API中合并两个模型,python,tensorflow,keras,Python,Tensorflow,Keras,我在广泛而深入的模型中游手好闲,试图用keras实现一些基本的东西。我能够使用功能性keras生成一个简单的模型和一个深度nn。然而,我有一些问题混淆了两者 ############################################################################### ############################################################################### inputs = I
###############################################################################
###############################################################################
inputs = Input(shape = (X_train.shape[1],))
output = Dense(1, activation='linear')(inputs)
wide = Model(inputs, output)
wide.compile(
optimizer = 'adam',
loss = 'mean_squared_error',
metrics = ['accuracy']
)
wide.fit(x = X_train, y = Y_train, epochs = 10, verbose = 1)
###############################################################################
###############################################################################
inputs = Input(shape = (X_train.shape[1],))
x = Dense(200, kernel_initializer = 'uniform',
activation = 'relu')(inputs)
x = Dense(100, activation = 'relu')(x)
x = Dense(50, activation = 'relu')(x)
output = Dense(1, activation='sigmoid')(x)
deep = Model(inputs, output)
deep.compile(
optimizer = 'adam',
loss = 'mean_squared_error',
metrics = ['accuracy']
)
deep.fit(x = X_train, y = Y_train, epochs = 10, verbose = 1)
###############################################################################
###############################################################################
merge = Concatenate([wide, deep])
hidden1 = Dense(10, activation='relu')(merge)
output = Dense(1, activation='sigmoid')(hidden1)
model = Model(inputs=visible, outputs=output)
如何连接这两个模型
我得到这个错误:
ValueError: Layer dense_36 was called with an input that isn't a symbolic tensor. Received type: <class 'keras.layers.merge.Concatenate'>. Full input: [<keras.layers.merge.Concatenate object at 0x1a1adda588>]. All inputs to the layer should be tensors.
ValueError:调用Layer dense_36时使用的输入不是符号张量。收到的类型:。完整输入:[]。层的所有输入都应该是张量。
A串联
层的工作原理与其他层完全相同
- 第一个括号中的图层参数(图层创建)
- 在第二个括号中输入张量(调用层以获得输出)
- 输入必须是张量,而不是模型
model = Model(inputs=[wide.inputs,deep.inputs], outputs=output)
keras 2.1及以上:
merge = Concatenate()([wide.output,deep.output])
model = Model(inputs=[wide.input,deep.input], outputs=output)
因为,
.outputs
和.input
返回列表,而不是tensor如果像层一样调用模型以获得相应的输出wide(inputs)
而不是。outputs
不确定是否“更真实”,但这确实是一种常见的标准方法,但是,这会创建更多节点,如果以后要派生更多模型、尝试自定义函数等,可能需要额外注意。///另一方面,如果您希望两个模型串联在一起,但又可以选择分别使用它们,您的建议是最好的选择。
merge = Concatenate()([wide.output,deep.output])
model = Model(inputs=[wide.input,deep.input], outputs=output)