Tensorflow: функция потерь с использованием scatter_nd: ValueError: для любой переменной не предусмотрено градиентов - PullRequest
0 голосов
/ 20 сентября 2019

Я пытаюсь обработать вывод своей сети, прежде чем вычислять потери.Сеть выводит 2 значения, скажем, х, у.Я хочу сгенерировать матрицу гистограммы для вывода.По сути, я хочу подсчитать, сколько раз происходит конкретный (x, y), и сохранять это значение в матрице в точке (x, y).Я могу успешно сделать это для моих основополагающих истинных предсказаний, используя tf.scatter_nd , но когда я вычисляю потери l2 между матрицей подсчета истинной земли и матрицей предсказанного подсчета, я получаю ValueError: Нет градиентовдля любой переменной проверьте свой график на наличие операций, которые не поддерживают градиенты .Ниже я поделился кодом, пожалуйста, дайте мне знать об ошибке или наоборот.

l2_loss = tf.constant([0], dtype=tf.float32)
 for j in range(batch_size):
    count_matrix_estimated_frame1 = tf.scatter_nd(int_estimated_frame1[j,:,:], value_estimated_frame1, shape, name='scatter_nd1')
    count_matrix_frame1_gt_events = tf.scatter_nd(int_frame1_gt_events[j,:,:], value_frame1_gt_events, shape, name='scatter_nd2')
    count_matrix_frame2_gt_events = tf.scatter_nd(int_frame2_gt_events[j,:,:], value_frame1_gt_events, shape, name='scatter_nd3')

    l2_loss = tf.add(tf.reduce_mean(\
                tf.reduce_sum((count_matrix_estimated_frame1 - count_matrix_frame1_gt_events)\
                    *(count_matrix_estimated_frame1 - count_matrix_frame1_gt_events), axis=1, name='reduce_sum')/2.0, name='reduce_mean'), l2_loss)

return l2_loss

Выше приведена выдержка из функции потерь.Функция просто содержит объявления переменных, отличных от this.Когда я запускаю код с использованием этой функции потерь, я получаю следующую ошибку:

File "train.py", line 300, in <module>
    train()
  File "train.py", line 128, in train
    train_op = optimizer.minimize(loss, global_step=batch)
  File "/home/<name_of_user>/.local/lib/python3.5/site-packages/tensorflow/python/training/optimizer.py", line 406, in minimize
    ([str(v) for _, v in grads_and_vars], loss))
ValueError: No gradients provided for any variable, check your graph for ops that do not support gradients, 
between variables ["<tf.Variable 'Variable:0' shape=() dtype=int32_ref>", "<tf.Variable 'sa1/layer1/conv0/weights:0' 
shape=(1, 1, 6, 32) dtype=float32_ref>" ........

Ошибка продолжается

Сначала я подумал, что у разброса нет градиента, но используется get_gradient_function () Iобнаружил, что scatter_nd имеет градиент.Я не знаю, в чем проблема.Любая помощь будет великолепна.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...