python - neural - tensorflow tutorial pdf
Actualice un subconjunto de pesas en TensorFlow (2)
¿Alguien sabe cómo actualizar un subconjunto (es decir, solo algunos índices) de los pesos que se usan en la propagación directa?
Supongo que podría hacerlo después de aplicar compute_gradients de la siguiente manera:
optimizer = tf.train.GradientDescentOptimizer(learning_rate=learning_rate)
grads_vars = optimizer.compute_gradients(loss, var_list=[weights, bias_h, bias_v])
... y luego haz algo con la lista de tuplas en grads_vars
.
Podría usar una combinación de gather
y scatter_update
. Aquí hay un ejemplo que duplica los valores en la posición 0
y 2
indices = tf.constant([0,2])
data = tf.Variable([1,2,3])
data_subset = tf.gather(data, indices)
updated_data_subset = 2*data_subset
sparse_update = tf.scatter_update(data, indices, updated_data_subset)
init_op = tf.initialize_all_variables()
sess = tf.Session()
sess.run([init_op])
print "Values before:", sess.run([data])
sess.run([sparse_update])
print "Values after:", sess.run([data])
Debería ver
Values before: [array([1, 2, 3], dtype=int32)]
Values after: [array([2, 2, 6], dtype=int32)]
La manera más fácil es tirar de la tf.Variable
a python (como una matriz numpy) usando npvar = sess.run(tfvar)
, luego realizar alguna operación sobre ella, como npvar[1, 2] = -10
. Luego puede cargar los datos modificados nuevamente en tensorflow utilizando sess.run(tfvar.assign(npvar))
.
Obviamente, esto es muy lento y no es realmente útil para el entrenamiento, pero funciona.