Actualice solo una parte de la matriz de inclusión de palabras en Tensorflow
Suponiendo que quiero actualizar una matriz de inclusión de palabras previamente capacitada durante el entrenamiento, ¿hay alguna manera de actualizar solo un subconjunto de la matriz de inclusión de palabras?
He buscado en la página de la API de Tensorflow y he encontrado esto:
# 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)
Sin embargo, ¿cómo lo aplico a la matriz de inclusión de palabras? Supongamos que hago:
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)
¿Cómo uso entoncesopt.apply_gradients
ytf.scatter_update
actualizar la matriz de incrustación original? (Además, tensorflow arroja un error si el segundo argumento decompute_gradient
no es untf.Variable
)