Как тренировать вес отдельного внимания для каждого ярлыка в pytorch? - PullRequest
1 голос
/ 30 октября 2019

Я новичок в PyTorch. Я пытаюсь обучить многослойную модель LSTM-внимания, где каждая метка имеет свой вес внимания. Я хотел бы спросить, есть ли такой способ, как tf.map_fn в Керасе, который я могу тренировать для разделения веса внимания с помощью того же скрытого состояния LSTM?

Я ссылался на https://github.com/iliaschalkidis/lmtc-eurlex57k. Похоже, что естьнет такой функции, как tf.map_fn в PyTorch, поэтому мне нужно использовать для цикла. Однако я не совсем знаком с тем, как PyTorch экономит вес и как я могу убедиться, что каждый вес внимания зависит от его собственной метки.

def call(self, x, mask=None):

        a = dot_product(x, self.Wa)

        def label_wise_attention(values):
            doc_repi, ai = values
            ai = K.softmax(K.transpose(ai))
            label_aware_doc_rep = K.dot(ai, doc_repi)
            if self.return_attention:
                return [label_aware_doc_rep, ai]
            else:
                return [label_aware_doc_rep, label_aware_doc_rep]

        label_aware_doc_reprs, attention_scores = K.tf.map_fn(label_wise_attention, [x, a])

        # Compute label-scores
        label_aware_doc_reprs = K.sum(label_aware_doc_reprs * self.Wo, axis=-1) + self.bo
        label_aware_doc_reprs = K.sigmoid(label_aware_doc_reprs)

        if self.return_attention:
            return [label_aware_doc_reprs, attention_scores]

        return label_aware_doc_reprs
...