首页 > 解决方案 > 使用中间层的输出进行新的训练(“模型”对象没有属性“形状”)

问题描述

我使用带有 keras 后端的 tensorflow 训练了一个 FCNN 模型。该模型由两个独立的网络组成(在同一个图中训练)。

该模型的两个中间层具有相同的形状 ((?,512, 24, 16), 'channel_first')。我想提取这两层(基于 2nd response Keras,How to get the output of each layer?)并使用密集层将它们相互映射:

intermediate_layer_net = Model(inputs=model.input,
                             outputs=model.get_layer(name='net1_bn7').output)
intermediate_layer_net2 = Model(inputs=model.input,
                             outputs=model.get_layer(name='net2_bn5').output)

mid_model_in = Input(shape=(512, 24, 16))
mid_model_dense = Dense(512,activation=None, use_bias=True, kernel_initializer="glorot_uniform", bias_initializer="zeros", kernel_regularizer=None, bias_regularizer=None, activity_regularizer=None, name='mid_dense')(mid_model_in)

mid_model = Model(inputs=[mid_model_in], outputs=[mid_model_dense])

mid_model.compile(loss=['mean_squared_error'], optimizer='Adam', metrics=['mae'])

history_mid= mid_model.fit(intermediate_layer_net, intermediate_layer_net2, batch_size=10, epochs=50, validation_split=0.2, shuffle=True) 

当我运行上面的代码时,我得到了这个错误:AttributeError: 'Model' object has no attribute 'shape'

我如何传递形状?形状不应该包含在我从中提取输出层的第一个模型中吗?

标签: pythontensorflowkerasdeep-learning

解决方案


推荐阅读