Градиентное вычисление с автоградом Pytorch с производными 1 -го и 2 -го порядка не работаетPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Градиентное вычисление с автоградом Pytorch с производными 1 -го и 2 -го порядка не работает

Сообщение Anonymous »

У меня есть странная проблема с функциональностью автограда Pytorch при внедрении настраиваемого расчета потерь в разнице в дифференциальном уравнении второго порядка. В приведенном ниже коде прогнозы нейронной сети проверяются, если они удовлетворяют уравнению дифференциального порядка. Это работает нормально. Однако, когда я хочу рассчитать градиент потери в отношении прогнозов, я получаю ошибку, указывающая, что, по -видимому, нет связи между потерей и U в вычислительном графике.

runtimeerror: один из дифференцированных тензоров, по -видимому, не использовался в графике. Установите Alluct_Unused = true < /code>, если это требуется
behavior.
< /blockquote>
Это не имеет смысла, потому что потеря напрямую зависит и рассчитывается с предыдущими производными, которые происходят из u . Получение потери в отношении u_xx и U_T работает, получение до u_x нет. Мы подтвердили, что .Requires_Grad установлен на true для всех переменных (, u , u_d , u_x , u_t , u_xx ).
Почему это делает случилось и как это исправить?

Код: Выделить всё

# Ensure X requires gradients
X.requires_grad_(True)

# Get model predictions
u = self.pinn(X)

# Compute first-order gradients (∂u/∂x and ∂u/∂t)
u_d = torch.autograd.grad(
u,
X,
grad_outputs=torch.ones_like(u),
retain_graph=True,
create_graph=True,  # Allow higher-order differentiation
)[0]

# Extract derivatives
u_x, u_t = u_d[:, 0], u_d[:, 1]  # ∂u/∂x and ∂u/∂t

# Compute second-order derivative ∂²u/∂x²
u_xx = torch.autograd.grad(
u_x,
X,
grad_outputs=torch.ones_like(u_x),
retain_graph=True,
create_graph=True,
)[0][:, 0]

# Diffusion equation (∂u/∂t = κ * ∂²u/∂x²)
loss = nn.functional.mse_loss(u_t, self.kappa * u_xx)

## THIS FAILS
# Compute ∂loss/∂u
loss_u = torch.autograd.grad(
loss,
u,
grad_outputs=torch.ones_like(loss),
retain_graph=True,
create_graph=True,
)[0]

# Return error on diffusion equation
return loss
model:

Код: Выделить всё

==========================================================================================
Layer (type:depth-idx)                   Output Shape              Param #
==========================================================================================
Sequential                               [1, 1]                    --
├─Linear: 1-1                            [1, 50]                   150
├─Tanh: 1-2                              [1, 50]                   --
├─Linear: 1-3                            [1, 50]                   2,550
├─Tanh: 1-4                              [1, 50]                   --
├─Linear: 1-5                            [1, 50]                   2,550
├─Tanh: 1-6                              [1, 50]                   --
├─Linear: 1-7                            [1, 50]                   2,550
├─Tanh: 1-8                              [1, 50]                   --
├─Linear: 1-9                            [1, 1]                    51
==========================================================================================
Total params: 7,851
Trainable params: 7,851
Non-trainable params: 0
Total mult-adds (M): 0.01
==========================================================================================
Input size (MB): 0.00
Forward/backward pass size (MB): 0.00
Params size (MB): 0.03
Estimated Total Size (MB): 0.03
==========================================================================================
Что мы уже пробовали:
Завершен к более старой версии Pytorch (протестировано на 2.5.0 и 1.13 .1). Та же проблема. Это не помогло. Мы, хотя этот нарезка может нарушить вычислительный график, разбивая соединение с u .

Код: Выделить всё

# Extract derivatives
u_x, u_t = u_d[:, 0], u_d[:, 1]  # ∂u/∂x and ∂u/∂t

# Extract derivatives alternative
u_x = torch.sum(
torch.reshape(torch.tensor([1, 0], device=u_d.device), [1, -1]) * u_d,
dim=1,
keepdim=True,
)
u_t = ...
Спасибо за вашу помощь!

Подробнее здесь: https://stackoverflow.com/questions/794 ... vatives-do
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»