# 加载torch包
library(torch)
# 设置常量a和b
a <- 1
b <- 5
# rosenbrock函数
rosenbrock <- function(x) {
x1 <- x[1]
x2 <- x[2]
(a - x1)^2 + b * (x2 - x1^2)^2
}
# 迭代数2
num_iterations <- 2
# x被初始化为一个值为-1和1的张量k
# 并且requires_grad = TRUE表示需要为该张量计算梯度。
x <- torch_tensor(c(-1, 1), requires_grad = TRUE)
# optimizer使用optim_lbfgs设置
# 这是L-BFGS优化算法的实现
# line_search_fn参数设置为"strong_wolfe",这是一种线搜索方法
optimizer <- optim_lbfgs(x, line_search_fn = "strong_wolfe")
# calc_loss函数用于清零现有的梯度,计算Rosenbrock函数的值
# 显示该值,然后调用backward()来计算梯度。
calc_loss <- function() {
optimizer$zero_grad()
value <- rosenbrock(x)
cat("Value is: ", as.numeric(value), "\n")
value$backward()
value
}
# 循环运行指定的迭代次数(num_iterations)
# 在每次迭代中,打印迭代次数并调用optimizer$step(calc_loss)
# 这会使用L-BFGS算法执行一次优化步骤。
for (i in 1:num_iterations) {
cat("\nIteration: ", i, "\n")
optimizer$step(calc_loss)
}
发表评论