Update nur einen Teil der Wort-Einbettungsmatrix in Tensorflow

Angenommen, ich möchte während des Trainings eine vorab trainierte Worteinbettungsmatrix aktualisieren. Gibt es eine Möglichkeit, nur eine Teilmenge der Worteinbettungsmatrix zu aktualisieren?

Ich habe die Tensorflow API-Seite durchgesehen und Folgendes gefunden:

# Create an optimizer.
opt = GradientDescentOptimizer(learning_rate=0.1)

# Compute the gradients for a list of variables.
grads_and_vars = opt.compute_gradients(loss, <list of variables>)

# grads_and_vars is a list of tuples (gradient, variable).  Do whatever you
# need to the 'gradient' part, for example cap them, etc.
capped_grads_and_vars = [(MyCapper(gv[0]), gv[1])) for gv in grads_and_vars]

# Ask the optimizer to apply the capped gradients.
opt.apply_gradients(capped_grads_and_vars)

Wie kann ich das auf die Worteinbettungsmatrix anwenden? Angenommen, ich mache:

word_emb = tf.Variable(0.2 * tf.random_uniform([syn0.shape[0],s['es']], minval=-1.0, maxval=1.0, dtype=tf.float32),name='word_emb',trainable=False)

gather_emb = tf.gather(word_emb,indices) #assuming that I pass some indices as placeholder through feed_dict

opt = tf.train.AdamOptimizer(1e-4)
grad = opt.compute_gradients(loss,gather_emb)

Wie verwende ich dannopt.apply_gradients undtf.scatter_update, um die ursprüngliche Embeddign-Matrix zu aktualisieren? (Tensorflow löst auch einen Fehler aus, wenn das zweite Argument voncompute_gradient ist keintf.Variable)

Antworten auf die Frage(4)

Ihre Antwort auf die Frage