1.首先需要我们思考的问题是。。。什么是优化器? 优化器能干什么?有哪些?参数怎么设置?
下面为大家一一讲解什么:
1》什么是优化器?
在小琼看来,是一个优化函数(白说),举个例子:例如求解y=2*x+3的零点,采用试探法,首先x取值为-1,则y=1,取大了,然后再取x=-2,y=-1,那么我们是不是会在【-2,-1】之间再去一个值,而不是在其他区间内取值,这样如法炮制,逐步会逼近函数的零点,然后得出x=?(你们比我厉害,我算不出)。
其实优化器就是干这个的,优化目标函数,使得目标函数得到最优解。(一般采用梯度下降法,其中采取合适的步长才是关键,好比两座山,走的不长不能太大,否则直接跨过山谷,而我们寻求的就是山谷的位置)。
2》发现连干什么的说了,没控制住。(直接看上面)
专业点就是使用梯度下降法更新网络模型参数。
#官方给出的例子: optimizer = optim.SGD(model.parameters(), lr=0.01, momentum=0.9) optimizer = optim.Adam([var1, var2], lr=0.0001)
3》有哪些优化器/优化器有哪些类型?
(着急了) 首先说一下优化器更新方法:两种(有没有发现有一定的套路)
1.optimizer.step() #官方给出的例子 for input, target in dataset: optimizer.zero_grad() output = model(input) loss = loss_fn(output, target) loss.backward() optimizer.step() 2.optimizer.step(closure) 此法应用在一些优化算法需要多次重新计算函数,如共轭梯度和LBFGS,因此我们必须传递一个闭包,允许优化器重新计算训练模型。此时闭包应该清除梯度,计算损失并返回。 for input, target in dataset: def closure(): optimizer.zero_grad() output = model(input) loss = loss_fn(output, target) loss.backward() return loss optimizer.step(closure)
接着上面讲:
优化器1:
torch.optim.Adadelta(params, lr=1.0, rho=0.9, eps=1e-06, weight_decay=0)
优化器2:
torch.optim.Adagrad(params, lr=0.01, lr_decay=0, weight_decay=0, initial_accumulator_value=0, eps=1e-10)
优化器3:
torch.optim.Adam(params, lr=0.001, betas=(0.9, 0.999), eps=1e-08, weight_decay=0, amsgrad=False)
优化器4:
torch.optim.ASGD(params, lr=0.01, lambd=0.0001, alpha=0.75, t0=1000000.0, weight_decay=0)
优化器5:
torch.optim.SGD(params, lr=<required parameter>, momentum=0, dampening=0, weight_decay=0, nesterov=False) 例子: optimizer = torch.optim.SGD(model.parameters(), lr=0.1, momentum=0.9) optimizer.zero_grad() loss_fn(model(input), target).backward() optimizer.step()
待续。。。
如果写的不好,欢迎大佬批评纠正!!!
pytorch网络优化器(How to use an optimizer)
最新推荐文章于 2023-04-04 00:00:00 发布