Zakładając, że chcę zaktualizować wstępnie wyszkoloną macierz osadzania słów podczas treningu, czy istnieje sposób na aktualizację tylko części macierzy osadzania wyrazów?Zaktualizuj tylko część macierzy osadzania wyrazów w Tensorflow
Szukałem na stronie Tensorflow API i stwierdziliśmy:
# 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)
jak mogę zastosować jednak, że do matrycy słowo-osadzania. Załóżmy, że mam:
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)
Jak następnie użyć opt.apply_gradients
i tf.scatter_update
zaktualizować oryginalną embeddign matrycę? (Również tensorflow zgłasza błąd jeśli drugi argument compute_gradient
nie jest tf.Variable
)
Jak zdefiniować "podzbiór" tutaj ? – viksit
Tylko podzbiór wierszy w matrycy osadzania.Ponieważ każdy wiersz jest wektorem do osadzania słów, jest tylko podzbiorem wektorów osadzających słowa z oryginalnej macierzy osadzania słów – user1718064
http://deeplearning.net/software/theano/tutorial/faq_tutorial.html To jest to, co chciałbym chcesz osiągnąć, ale w Tensorflow – user1718064