Supponendo che io voglia aggiornare una matrice di incorporamento di parole pre-addestrata durante l'allenamento, c'è un modo per aggiornare solo un sottoinsieme della matrice di incorporamento delle parole?Aggiornare solo parte della matrice di incorporamento delle parole in Tensorflow
ho guardato nella pagina API tensorflow e ho trovato questo:
# 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)
Tuttavia Come posso richiedere che alla matrice word-embedding. Supponiamo che io faccio:
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)
Come posso quindi utilizzare opt.apply_gradients
e tf.scatter_update
per aggiornare la matrice embeddign originale? (Inoltre, tensorflow genera un errore se il secondo argomento della compute_gradient
non è un tf.Variable
)
Come si fa a definire "sottoinsieme" qui ? – viksit
Solo un sottoinsieme di righe nella matrice di incorporamento.Poiché ogni riga è un vettore di incorporamento di parole, è solo un sottoinsieme di vettori che incorporano la parola dalla matrice di incorporamento della parola originale – user1718064
http://deeplearning.net/software/theano/tutorial/faq_tutorial.html Questo è ciò che vorrei piace realizzare ma in Tensorflow – user1718064