Контекст: я решаю PDE, используя CNN. И мне нужен градиент P относительно X.
P=[p1 p2 ; p3 p4 ], X= [x1 x2; x3 x4]
Мне нужен градиент P относительно X. Но Tensorflow дает мне сумму всех частичных значений.
Stackoverflow не позволяет мне публиковать сообщения в латексном формате. Итак, вот тот же вопрос, который я мог бы опубликовать на Math.Stachexchange. Пожалуйста, нажмите на эту ссылку для большей ясности:
https://math.stackexchange.com/questions/3408736/finding-gradients-in-tensorflow-without-sum
Что мне нужно сделать, чтобы получить нужные мне градиенты? Я был бы очень признателен за вашу помощь. Поиск похожих вопросов здесь не помог.
sum
в конце этого цикла for будет добавлением всех партиалов, потому что еслиsum
иpartial
являются тензорами, то+
должно разрешаться в операциюtf.add
. В качестве альтернативы посмотрите, можете ли вы использовать tensorflow.org/api_docs/python/tf/math. /reduce_sum. 29.10.2019sum
будет иметь суммы всех моих необходимых частей. Я имел в виду следующее: создает ли граф новую операцию каждый раз, когда строкаsum=sum+partial
выполняется в цикле for. И это просто заполнит мою память? 30.10.2019reduce_sum
, я сомневаюсь, смогу ли я его использовать. Потому что мне не нужна ни вся сумма, ни сумма, уменьшенная по определенной оси. Если J — мой якобиан, мне нужно J[0,0,0,0]+J[0,1,0,1] +J[1,0,1,0]+J[1,1,1]. ,1]. Так что, возможно,reduce_sum
не подходит для такого выборочного суммирования. 30.10.2019sum=0 for i in np.arange(2): for j in np.arange(2): d1=tf.gradients(P[i,j], X)[0] #outputs a [2,2] tensor d2=tf.gradients(d1[i,j], X)[0] #finds the second derivative #also a [2,2] tensor sum.append(tf.slice(d2,[i,j],[1,1])) #Finally sum contains all second derivatives (\partial^2 p_i)/(\partial (x_i)^2 )
31.10.2019