【问题标题】:Bound optimization using pytorch使用 pytorch 进行边界优化
【发布时间】:2021-03-11 14:05:28
【问题描述】:

在 pytorch 中使用优化方法时如何包含边界。我有一个张量变量,每个变量都有不同的界限。

upper_bound = torch.tensor([1,5,10], requires_grad=False)
lower_bound = torch.tensor([-1,-5,-10], requires_grad=False)
X           = torch.tensor([10, -60, 105], require_grad=True)
for _ in range(100):
    optimizer.zero_grad()
    loss = ..    
    loss.backward()
    optimizer.step()
    X[:] = X.clamp(lower_bound, upper_bound)

但是,clamp 只使用一个数字。由于每个变量的界限不同,我需要包括上限和下限张量。

【问题讨论】:

    标签: optimization pytorch tensor constraint-programming


    【解决方案1】:

    梯度下降不是实现约束优化的最佳方法,但在这里您可以使用以下命令强制执行约束:

    x = ((X-lower_bound).clamp(min=0)+lower_bound-upper_bound).clamp(max=0)+upper_bound
    

    需要两个 clamp 而不是一个,但我找不到任何本地方法来实现这一点。

    【讨论】:

    • 梯度下降和约束优化有什么问题?
    猜你喜欢
    • 1970-01-01
    • 2021-07-28
    • 2020-04-12
    • 2019-11-22
    • 1970-01-01
    • 1970-01-01
    • 2019-12-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多