как добавить модель последовательности потерь RNN в коллекцию потерь - PullRequest
0 голосов
/ 28 апреля 2019

Я только начал изучать тензор потока.Я строю модель последовательности RNN для части речевого тегирования.назначить тег каждому термину в предложении, например, входные данные "go / V to / PP school / N"

x = [[index_term0, index_term1, index_term2, index_term3, 0, 0],[index_term4,index_term0, 0, 0, 0)]...]

Форма (batch_size, max_length), и каждый index_term является точкой слияния длятермин цели y.

y = [[index_tag0, index_tag1, index_tag2, index_tag3, 0, 0],[index_tag4,index_tag0, 0, 0, 0)]...]

Форма (batch_size, max_length), и каждый index_tag является целочисленной точкой для тега.

После того, как я получу логиты моделиМне нужно получить потерю и добавить потерю в коллекцию потерь, и я не уверен, как это сделать.

Следующие коды являются моими попытками, пожалуйста, дайте мне знать, как это исправить.

import tensorflow as tf
embedding = tf.get_variable('embeddings', [self.num_terms, 10])
x_embeddings = tf.nn.embedding_lookup(embedding, self.x)

cell = tf.keras.layers.SimpleRNNCell(self.num_tags)
layer = tf.keras.layers.RNN(cell, return_sequences=True)
self.logits = layer(x_embeddings)

#attempt1
loss = tf.contrib.seq2seq.sequence_loss(logits = self.logits, 
targets = self.y, weights = mask)
tf.losses.add_loss(loss, loss_collection=tf.GraphKeys.REGULARIZATION_LOSSES)

#attempt2
self.logits = self.logits*mask

y_onehot = tf.placeholder(tf.float32, [None, max_length, num_tags])
sigmoid = tf.nn.sigmoid(self.logits)
cross_entropy = -y_onehot * tf.log(sigmoid + 1e-6) - (1-y_onehot) * tf.log(1 - sigmoid + 1e-6)
cross_entropy = tf.reduce_sum(cross_entropy, axis=2)
csum_cross_entropy = tf.math.cumsum(cross_entropy, axis=1)
loss = tf.reduce_sum(csum_cross_entropy * mask)
tf.losses.add_loss(loss, loss_collection=tf.GraphKeys.REGULARIZATION_LOSSES)

Маска - это тензор, представляющий собой маску различной длины, например [[1, 1, 0, 0], [1, 1, 1, 0], [1, 1, 1, 1]], созданную из вектора длины, например [2, 3, 4], где каждый элемент - длина предложения.

Не могли бы вы сказать мне правильный способ создания и добавления потерь, пожалуйста?

...