Согласно документу Tensorflow 1.8.0, функция compute_gradients возвращает список, содержащий градиент и пару переменных.Поэтому я думаю, что каждая пара имеет совместимые градиенты и переменные.Когда я использую матрицу маски с одинаковой формой с переменными для умножения соответствующего градиента, она не работает, поскольку совместима.Что не так с моей работой и как ее правильно реализовать?
Это работает в Ubuntu 16.4 cuda 9.0 Tensorflow 1.8.0 python 2.7, я прочитал документ и попробую другой метод для реализации, но я действительнохочу знать, почему и что мне мешает.
Tensorflow 1.8.0 Doc Link: https://tensorflow.google.cn/versions/r1.8/api_docs/python/tf/train/AdamOptimizer?hl=zh-cn#compute_gradients.
# for example, a little code to reproduce,
# in Truth, The mask vars is generated by a trained model.
# So the mask vars shape is same with variables.
grads_and_vars = optimizer.compute_gradients(
loss, colocate_gradients_with_ops=True)
gradients = [item[0] for item in grads_and_vars]
variables = [item[1] for item in grads_and_vars]
mask_vars = tf.ones(shape=variables[1].shape.as_list())
gradients[1] = mask_vars * gradients[1]
Я хочу заморозить некоторые нейро в переменной, поэтому я пытаюсьградиент маски, чтобы избежать неврозов при обновлении переменных.