TensorFlow 2.0中的分层注意

时间:2019-12-12 00:50:39

标签: tensorflow2.0 tf.keras

我正在尝试使用AdditiveAttention Keras层在TensorFlow 2.0中创建分层注意力。我得到的错误:

  

ValueError:图已断开连接:无法在“ question_input”层获取张量Tensor(“ question_input:0”,shape =(None,None),dtype = float32)的值。可以顺利访问以下先前的图层:[]

有人可以告诉我我做错了什么吗?

def get_text_model(self, embedding):
        print("Text Input")
        text_input = Input(shape=(None,), name="text_input")
        text_embedding = embedding(text_input)
        cnn_1d = Conv1D(128, 4, padding="same", activation="relu", strides=1)(text_embedding)
        output = cnn_1d
        model = Model(text_input, output)
        return model

def get_sentence_attention_model(self, sentence_input, encoded_question, sentence_model):
    encoded_sentence = sentence_model(sentence_input)
    sentence_attention = AdditiveAttention()([encoded_sentence, encoded_question])
    output = Concatenate()([sentence_attention, encoded_question])
    model = Model(sentence_input, output)
    return model

def get_section_model(self, encoded_question, sentence_model):
    section_input = Input(shape=(None, None), name="section_input")
    section_encoded = TimeDistributed(sentence_model)([self.question_input, section_input])
    cnn_1d = Conv1D(128, 4, padding="same", activation="relu", strides=1)(section_encoded)
    output = cnn_1d
    section_attention_output = AdditiveAttention()([output, encoded_question])
    model = Model(section_input, section_attention_output)
    return model

def get_document_model(self, encoded_question, section_model):
    document_input = Input(shape=(None, None, None), name="document_input")
    document_encoded = TimeDistributed(section_model)(document_input)

    cnn_1d = Conv1D(128, 4, padding="same", activation="relu", strides=1)(document_encoded)

    document_attention = AdditiveAttention()([cnn_1d, encoded_question])
    model = Model(document_input, document_attention)

    return model

def get_model(self):
    self.vocabulary_size = self.vectorizer.get_vocabulary_size()
    self.embedding_matrix = self.vectorizer.get_embedding_matrix()

    embedding = Embedding(self.vocabulary_size, self.embedding_size, mask_zero=True, trainable=True,
                               weights=None if self.embedding_matrix is None else [self.embedding_matrix])

    self.question_input = Input(shape=(None,), name="question_input")
    self.sentence_input = Input(shape=(None,), name="sentence_input")

    self.question_model = self.get_text_model(embedding)
    self.sentence_model = self.get_text_model(embedding)

    self.encoded_question = self.question_model(self.question_input)

    self.sentence_attention_model = self.get_sentence_attention_model(self.sentence_input, self.encoded_question, self.sentence_model)

    self.section_model = self.get_section_model(self.encoded_question, self.sentence_attention_model)
    self.document_model = self.get_document_model(self.encoded_question, self.section_model)

    optimizer = Adadelta()

    loss_metrics = "binary_crossentropy"

    self.document_model.compile(loss=loss_metrics, optimizer=optimizer, metrics=[loss_metrics])
    self.document_model.summary()

0 个答案:

没有答案