我是 PyTorch 的新手,所以我的问题可能很微不足道。
我正在尝试最小化一个可以在片段中恢复的函数
def target_function(params):
vector = torch.zeros(10)
μr = torch.zeros(2, requires_grad=True)
θ = torch.zeros(2, requires_grad=True)
μr = torch.tensor([params[0], params[4]], requires_grad=True)
θ = torch.tensor([params[3], params[7]], requires_grad=True)
for i in range(2):
vector[i] += (μr[i]**2 - θ[i] ).sum()
return torch.norm(vector)
我尝试通过执行优化
import matplotlib.pyplot as plt
# Initialize parameters with random values between 0 and 1
params = torch.rand(10, requires_grad=True)
# Choose an optimizer (e.g., SGD) and specify the learning rate
optimizer = SGD([params], lr=0.01)
num_steps = 100
# Lists to store the values of the target function during optimization
target_values = []
# Optimization loop
for i in range(num_steps):
# Zero gradients
optimizer.zero_grad()
# Compute the function value
output = target_function(params)
# Store the function value
target_values.append(output.item())
# Compute gradients
output.backward()
# Update parameters
optimizer.step()
# Plot the values of the target function during optimization
plt.plot(target_values)
plt.xlabel('Iteration')
plt.ylabel('Target Function Value')
plt.title('Optimization Progress')
plt.show()
但函数的值似乎在循环期间不会变化。调试我发现它可能取决于使用变量μr
和θ
代码中。也许我正在做一些不应该做的事情,但我不明白如何解决这个问题,保持变量μr
和θ
。
感谢您的任何帮助或解释
你的问题是
μr = torch.tensor([params[0], params[4]], requires_grad=True)
和θ = torch.tensor([params[3], params[7]], requires_grad=True)
。您创建新的张量,它们的引用与参数不同,因此参数不会在训练循环中更新。您可以将它们更改为然后你就可以正常训练了