Arhn - архитектура программирования

Нахождение градиентов в тензорном потоке без суммы

Контекст: я решаю 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

Что мне нужно сделать, чтобы получить нужные мне градиенты? Я был бы очень признателен за вашу помощь. Поиск похожих вопросов здесь не помог.

26.10.2019

Ответы:


1

Если я правильно понимаю, вам нужна матрица Якоби. См. https://www.tensorflow.org/api_docs/python/tf/test/compute_gradient и https://stackoverflow.com/a/48880275/3712254.

26.10.2019
  • Спасибо. Но якобиан мне не нужен. Если вы нажмете на эту ссылку, вы увидите ее. Мне действительно нужно (частично p_i)/(частично x_i). 26.10.2019
  • Разве вы не можете взять диагональ якобиана, а затем преобразовать ее из (16) в (4, 4)? 26.10.2019
  • Это хорошая идея. В моем случае P — 2x2, X — 2x2. Таким образом, выполнение Z=Jacobian(P,X) в тензорном потоке возвращает тензор [2,2,2,2], который имеет (частичный p_i)/(частичный x_j). Так что диагональная операция сейчас не совсем помогает. Мне нужно извлечь необходимое (частично p_i)/(частично x_i) с помощью нарезки Z, что становится очень медленным, потому что этот процесс нужно выполнять много раз во время обучения. Если у вас есть лучший способ, я был бы очень признателен!! 27.10.2019
  • На самом деле это не должно быть слишком медленным, потому что вы делаете срез один раз при построении графа, а не непрерывно во время выполнения — вы запускали его и обнаружили, что он работает медленно? 27.10.2019
  • Да, вы правы. Я заметил, что первая оценка занимает много времени. После этого не плохо. У меня есть вопрос вдогонку. Что мне действительно нужно, так это суммы всех частичных (частичных p_i)/(частичных x_i) . Теперь, если я начну с sum=0. И продолжайте выполнять sum=sum+partial внутри цикла for, создаст ли это новую операцию приращения суммы для каждого цикла? 29.10.2019
  • Да, sum в конце этого цикла for будет добавлением всех партиалов, потому что если sum и partial являются тензорами, то + должно разрешаться в операцию tf.add. В качестве альтернативы посмотрите, можете ли вы использовать tensorflow.org/api_docs/python/tf/math. /reduce_sum. 29.10.2019
  • 1) Хорошо, после завершения цикла for я понимаю, что sum будет иметь суммы всех моих необходимых частей. Я имел в виду следующее: создает ли граф новую операцию каждый раз, когда строка sum=sum+partial выполняется в цикле for. И это просто заполнит мою память? 30.10.2019
  • 2) Зарегистрируйте reduce_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.2019
  • 1) Это создаст отдельные операции, но это может не заполнить вашу память. Что у вас за цикл? Не стесняйтесь вставлять сюда код. 30.10.2019
  • ‹!-- язык: питон --› sum=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
  • Извиняюсь. Я не уверен, как отформатировать вставленный код. (Вот с правильными отступами: txt.do/1k2ch). Таким образом, в коде я фактически вычисляю лапласиан P относительно X. Таким образом, я создаю список sum только из необходимых частей (\partial^2 p_i)/(\partial (x_i) ^ 2. Я, наконец, суммирую их позже, когда это будет необходимо. Надеюсь, понятно, что я оцениваю. 31.10.2019
  • Новые материалы

    Коллекции публикаций по глубокому обучению
    Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

    Представляем: Pepita
    Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

    Советы по коду Laravel #2
    1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

    Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
    Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

    3 способа решить квадратное уравнение (3-й мой любимый) -
    1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

    Создание VR-миров с A-Frame
    Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

    Демистификация рекурсии
    КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..