【发布时间】:2020-09-03 04:24:48
【问题描述】:
我正在尝试使用torch.optim.adam 优化场景顶点的平移。它是 redner 教程系列中的一段代码,在初始设置下运行良好。它尝试通过将所有顶点移动相同的值translation 来优化场景。这是原始代码:
vertices = []
for obj in base:
vertices.append(obj.vertices.clone())
def model(translation):
for obj, v in zip(base, vertices):
obj.vertices = v + translation
# Assemble the 3D scene.
scene = pyredner.Scene(camera = camera, objects = objects)
# Render the scene.
img = pyredner.render_albedo(scene)
return img
# Initial guess
# Set requires_grad=True since we want to optimize them later
translation = torch.tensor([10.0, -10.0, 10.0], device = pyredner.get_device(), requires_grad=True)
init = model(translation)
# Visualize the initial guess
t_optimizer = torch.optim.Adam([translation], lr=0.5)
我尝试修改代码,以便计算每个顶点的单独平移。为此,我对上面的代码进行了以下修改,使translation 的形状从torch.Size([3]) 变为torch.Size([43380, 3]):
# translation = torch.tensor([10.0, -10.0, 10.0], device = pyredner.get_device(), requires_grad=True)
translation = base[0].vertices.clone().detach().requires_grad_(True)
translation[:] = 10.0
这引入了ValueError: can't optimize a non-leaf Tensor。你能帮我解决这个问题吗?
PS:很抱歉,我对这个主题很陌生,我想尽可能全面地陈述这个问题。
【问题讨论】:
标签: optimization pytorch tensor