当前位置: 首页 > 知识库问答 >
问题:

连接BERT和CNN

山阳辉
2023-03-14

我正在尝试将两个模型连接在一起。我有一个伯特模型和效率网模型。

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个输出中=层。密集(2,activation='softmax',name='real_output')(密集)10---

~/anaconda3/lib/python3。7/现场包/KERA/遗留/接口。包装中的py(*args,**kwargs)89警告。警告('signature,stacklevel=2'更新您的'object\u name'对'90'Keras 2 API的调用)---

初始化中的~/anaconda3/lib/python3.7/site-包/keras/引擎/network.py(自,*args,**kwargs)92 kwargs中的“输入”和kwargs中的“输出”): 93#图形网络---

~/anaconda3/lib/python3。7/现场包/KERA/发动机/网络。py in _init_graph_network(self,input,output,name,**kwargs)167'必须来自keras。层。输入'168'收到:'str(x)--

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).

共有1个答案

常炯
2023-03-14

如果不知道用于BERT的实现,很难从代码中判断出来。特别是,它是无头模型吗?我的理解(可能是不正确的)是,没有头的BERT提供了形状(batch_size,seq_length,embedding_dim)的输出。换句话说,输出形状随输入大小而变化。因此,我看不出您的图像嵌入将始终与变压器的输出具有相同的形状。

我正在使用变形金刚库和预训练的CNN创建一个双峰语言模型,大致如下:

def call(encoded_sentences, img_embeddings, **transformer_kwargs):

        outputs = transformer(encoded_sentences, **transformer_kwargs)
        last_hidden_state, *_ = outputs
        batch_size, batch_seq_len, last_hidden_dim = last_hidden_state.shape

        # reshape and repeat image embeddings
        batch_size, *img_emb_shape = img_embeddings.shape
        img_emb_flattened = tf.reshape(img_embeddings, 
                                       (batch_size, np.prod(img_emb_shape)))
        emb_flattened_reps = tf.repeat(tf.expand_dims(img_emb_flattened, 1), 
                                       batch_seq_len, axis=1)

        # concatenate the language and image embeddings
        embs_concat = tf.concat([last_hidden_state, emb_flattened_reps], 2)

        # generate mlm predictions over input sequence
        training = transformer_kwargs.get('training', False)
        prediction_scores = mlm_head(embs_concat, training=training)

        # Add hidden states and attention if they are here
        outputs = (prediction_scores,) + outputs[2:]

        return outputs

在我的例子中,transformer是一个TFAlbertModelmlm\u head是一个tfalbertmhead(如果这个代码看起来有点混淆,因为我从tf.keras.Model中的类方法改编了它)。此外,请记住,encoded_语句已通过标记器传递,而img_嵌入是从预先训练的CNN中提取的。

查看我的笔记本中的此存储库,探索此图像字幕方法。

 类似资料:
  • BERT 是 Ruby 的 BERT (Binary ERlang Term) 序列化库,可以编码 Ruby 对象到 BERT 格式,或者解码 BERT 二进制到 Ruby 对象。 BERT 规范请看 bert-rpc.org。 以下的 Ruby 类实例会被自动转化为简单的 BERT 类型: Fixnum Float Symbol Array String 以下的 Ruby 类实例会被自动转换为复

  • Chainer implementation of Google AI's BERT model with a script to load Google's pre-trained models This repository contains a Chainer reimplementation of Google's TensorFlow repository for the BERT mo

  • 在自然语言处理领域中,预训练语言模型(Pre-trained Language Models)已成为非常重要的基础技术。为了进一步促进中文信息处理的研究发展,我们发布了基于全词遮罩(Whole Word Masking)技术的中文预训练模型 BERT-wwm,以及与此技术密切相关的模型:BERT-wwm-ext,RoBERTa-wwm-ext,RoBERTa-wwm-ext-large, RBT3

  • Are you looking for X-as-service? Try the Cloud-Native Neural Search Framework for Any Kind of Data bert-as-service Using BERT model as a sentence encoding service, i.e. mapping a variable-length sent

  • 中文说明 | English 在自然语言处理领域中,预训练语言模型(Pre-trained Language Models)已成为非常重要的基础技术。为了进一步促进中文信息处理的研究发展,我们发布了基于全词遮罩(Whole Word Masking)技术的中文预训练模型BERT-wwm,以及与此技术密切相关的模型:BERT-wwm-ext,RoBERTa-wwm-ext,RoBERTa-wwm-e

  • 问题内容: 我在两个表之间有多对多关系。 表包含我的餐厅。 表包含不同的类别。 表包含两列,每列分别包含两个表的ID。 以下陈述是我能想到的,但没有给我我想要的输出。 我希望输出是有关餐厅的信息,并在最后一列中是类别的连接行。 问题答案: 要串联值,可以使用。xml路径解决方案有误,应使用和特殊字符。 您也可以使用变量解决方案