Я новичок в 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