PyTorch, почему я получаю RuntimeError: пытаюсь вернуться по графику во второй разPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 PyTorch, почему я получаю RuntimeError: пытаюсь вернуться по графику во второй раз

Сообщение Anonymous »

У меня довольно простой код

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

import torch
import random

image_width, image_height = 128, 128

def apply_ellipse_mask(img, pos, axes):
r = torch.arange(image_height)[:, None]
c = torch.arange(image_width)[None, :]
val_array = ((c - pos[0]) ** 2) / axes[0] ** 2 + ((r - pos[1]) ** 2) / axes[1] ** 2
mask = torch.where((0.9 < val_array) & (val_array < 1), torch.tensor(1.0), torch.tensor(0.0))

return axes[0] * img * (1.0 - mask) + mask

random.seed(0xced)

sphere_radius = image_height / 3
sphere_position = torch.tensor([image_width / 2, image_height / 2 ,0], requires_grad=True)

ref_image = apply_ellipse_mask(torch.zeros(image_width, image_height, requires_grad=True), sphere_position, [sphere_radius, sphere_radius, sphere_radius])

ellipsoid_pos = torch.tensor([sphere_position[0], sphere_position[1], 0], requires_grad=True)
ellipsoid_axes = torch.tensor([image_width / 3 + (random.random() - 0.5) * image_width / 5, image_height / 3 + (random.random() - 0.5) * image_height / 5, image_height / 2], requires_grad=True)

optimizer = torch.optim.Adam([ellipsoid_axes], lr=0.1)
criterion = torch.nn.MSELoss()
for _ in range(100):

optimizer.zero_grad()
current_image = torch.zeros(image_width, image_height, requires_grad=True)
current_image = apply_ellipse_mask(current_image, ellipsoid_pos, ellipsoid_axes)

loss = criterion(current_image, ref_image)
loss.backward()
print(_, loss)
optimizer.step()

Однако я столкнулся с проблемой, которую, как новичку в Pytorch, мне трудно понять.

RuntimeError: Попытка пройти по графику назад во второй раз (или напрямую получить доступ к сохраненным тензорам после того, как они уже были освобождены). Сохраненные промежуточные значения графика освобождаются при вызове .backward() или autograd.grad(). Укажите continue_graph=True, если вам нужно пройти по графику назад во второй раз или если вам нужно получить доступ к сохраненным тензорам после обратного вызова.

Я не хочу понять, почему он будет пытаться вернуться назад по тому же графику во второй раз? или я получаю прямой доступ к сохраненным тензорам после их освобождения? Я не понимаю, почему это происходит.

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

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

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

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

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

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

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