Я пытаюсь обработать вывод своей сети, прежде чем вычислять потери.Сеть выводит 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 имеет градиент.Я не знаю, в чем проблема.Любая помощь будет великолепна.