Angenommen, ich möchte eine vortrainierte Worteinbettungsmatrix während des Trainings aktualisieren, gibt es eine Möglichkeit, nur eine Teilmenge der Worteinbettmatrix zu aktualisieren?Aktualisiere nur einen Teil der Worteinbettungsmatrix in Tensorflow
Ich habe in die Tensorflow API Seite gesucht und diese 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)
jedoch wie bewerbe ich mich, dass das Wort-Embedding Matrix. 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 kann ich dann verwenden opt.apply_gradients
und tf.scatter_update
, um die ursprüngliche embeddign Matrix zu aktualisieren? (Außerdem wirft tensorflow einen Fehler, wenn das zweite Argument der compute_gradient
ist kein tf.Variable
)
Wie definieren Sie "Teilmenge" hier ? – viksit
Nur eine Teilmenge der Zeilen in der Einbettungsmatrix.Da jede Zeile ein Worteinbettungsvektor ist, ist es nur eine Untermenge von Worteinbettungsvektoren aus der ursprünglichen Worteinbettungsmatrix – user1718064
http://deeplearning.net/software/theano/tutorial/faq_tutorial.html Dies ist, was ich würde gerne erreichen, aber in Tensorflow – user1718064