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