【发布时间】:2020-06-07 16:02:01
【问题描述】:
我正在尝试将两个模型合并为一个。 我有一个 BERT 模型和 EfficientNet 模型。
input_text = model_Bert.inputs[:2]
text = model_Bert(input_text)
input_img = model_EfNet.layers[0].input
img = model_EfNet(input_img)
concatenated = layers.concatenate([text, img], axis=1) #same dimension
dense = layers.Dense(512, activation='relu')(concatenated)
dense = layers.Dense(128, activation='relu')(dense)
dense = layers.Dropout(0.3)(dense)
outputs = layers.Dense(2, activation='softmax', name = 'real_output')(dense)
model_Multimodal = keras.models.Model(inputs=[input_text, input_img], outputs=outputs)
但是我收到了这个错误:
ValueError Traceback(最近一次调用最后一次) 在 9 个输出 = layers.Dense(2, activation='softmax', name = 'real_output')(dense) 10 ---> 11 model_Multimodal = keras.models.Model(inputs=[input_text, input_img], outputs=outputs)
~/anaconda3/lib/python3.7/site-packages/keras/legacy/interfaces.py 在 wrapper(*args, **kwargs)
89 warnings.warn('更新你的' + object_name + '调用'+
90 'Keras 2 API: ' + 签名,stacklevel=2)
---> 91 返回函数(*args,**kwargs)
92 包装器._original_function = func
93 返回包装器
~/anaconda3/lib/python3.7/site-packages/keras/engine/network.py in init(self, *args, **kwargs) kwargs 中的 92 个“输入”和 kwargs 中的“输出”): 93 # 图网络 ---> 94 self._init_graph_network(*args, **kwargs) 95 其他: 96 # 子类网络
~/anaconda3/lib/python3.7/site-packages/keras/engine/network.py in _init_graph_network(self, inputs, outputs, name, **kwargs)
167 '必须来自keras.layers.Input。 '
168 '收到:' + str(x) +
--> 169 '(缺少上一层元数据)。')
170 # 检查 x 是否是输入张量。
171层,node_index,tensor_index = x._keras_history
ValueError: Input tensors to a Model must come from `keras.layers.Input`. Received: [<tf.Tensor 'Input-Token_1:0' shape=(None, 128) dtype=float32>, <tf.Tensor 'Input-Segment_1:0' shape=(None, 128) dtype=float32>] (missing previous layer metadata).
【问题讨论】:
-
我已经尝试像这样修改第 2,4 行:
text = model_Bert.layers[105].output img = model_EfNet.layers[11].output但错误是一样的。 -
请问你解决了吗?
标签: python tensorflow keras deep-learning keras-layer