machine-learning - PyTorch 在没有直接关联时使用优化器更新值
问题描述
我正在使用 Chumpy 库从给定的 3D 对象中获取一些值。但是,这个过程在 CPU 上,对我的任务来说太慢了。
我想做的是使用诸如 Adam 之类的优化器来迭代地获取这些值。我的例子如下:
model = my_values # my values, this is Chumpy object
template_mesh_v = my_ground_truth # numpy array
betas = torch.nn.Parameter(torch.zeros(model.betas[300:].shape[0]).float()) # this is what I need
optimizer = torch.optim.Adam(
[betas],
lr=1.0,
weight_decay=0.0001
)
iters = 4000
for k in range(iters):
model.betas[300:] = betas.detach().numpy()
loss = (torch.tensor(template_mesh_v) - torch.tensor(model.r, requires_grad=True)).sum(1).mean()
optimizer.zero_grad()
loss.backward()
optimizer.step()
以下是发生的情况:当我更新 model.betas 时,model.r 值也会通过 Chumpy 更新(但我不确定 Chumpy 如何更新这些值)。从损失函数可以看出,我需要的是通过获取正确的 beta 值使 model.r 尽可能接近 template_mesh_v 值。我对 model.r 值不感兴趣,只对 beta 值感兴趣。我只使用 model.r 值来计算损失,因为它们在某种程度上依赖于 beta 值。
I have to call .detach() on betas values before assigning it to model.betas, otherwise Chumpy raises error. I know that gradients don't go through beta values, so betas.grad is actually None.
Am I approaching this problem in a wrong way? I want to iteratively update beta values, which updates model.r values.
Thanks.
解决方案
推荐阅读
- c++ - 名称查找过程是否被视为对glvalue的一种评估
- openlayers - 尝试对多几何特征进行聚类时出现断言错误
- python - 如何在python中将二维数组转换为字典
- java - 如何在超类中编写参数类型限制为属于调用对象的同一子类的另一个对象的方法
- python - 通过 Python 导出到 csv 从 API 获取请求
- sapui5 - 格式化值以显示在地图 ui5 应用程序上失败
- typescript - 如何从字符串中获取类型安全的枚举值?
- python - 如何删除 html 源代码中的 '\xa0'?
- python-3.x - 如何使用便携式运行器和 spark-submit 将 beams wordcount python 示例提交到 EMR running yarn 上的远程 spark 集群?
- java - 在未选择的选项卡中从 Fragment 调用方法