Операции на месте при вычислении градиента во вложенных циклах PyTorchPython

Программы на Python
Anonymous
Операции на месте при вычислении градиента во вложенных циклах PyTorch

Сообщение Anonymous »

Я разрабатываю модель на основе PyTorch, в которой для вычислений используются вложенные циклы.
Я столкнулся с препятствием при попытке вычислить градиенты. Процесс обратного распространения ошибки завершается сбоем из-за, по-видимому, операций внутри циклов.
Вот минимальный пример, иллюстрирующий проблему:
import torch

# Setup
length, dx = 1000, 100
num_rows, num_cols = 5, int(length / dx) + 1

# Parameters requiring gradients
C = torch.rand(num_rows, requires_grad=True)
D = torch.rand(num_rows, requires_grad=True)
qobs = torch.rand(num_rows)

# Intermediate calculations
Caux = 1 + C + D
C0, C1, C2 = (-1 + C + D) / Caux, (1 + C - D) / Caux, (1 - C + D) / Caux

# Main computation
qprop = torch.zeros((num_rows, num_cols))
qprop[:, 0] = qobs

for j in range(1, num_cols):
for n in range(1, num_rows):
qprop[n, j] = (C2[n] * qprop[n-1, j-1] +
C1[n] * qprop[n, j-1] +
C0[n] * qprop[n-1, j])

# Attempt gradient computation
loss = qprop.sum()
loss.backward() # This operation fails


Подробнее здесь: https://stackoverflow.com/questions/790 ... orch-loops

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