Caffe之learning rate policy

本文详细介绍了Caffe框架中不同的学习率调整策略,并通过Matlab代码生成了各种策略下学习率变化的图像,帮助读者直观理解每种策略的特点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

learning rate很重要,如何设置它有很多种方法,在Caffe源码的caffe-master\src\caffe\solvers\sgd_solver.cpp中的GetLearningRate函数注释中有对应的介绍,如下:

// policies are as follows:
//    - fixed: always return base_lr.
//    - step: return base_lr * gamma ^ (floor(iter / step))
//    - exp: return base_lr * gamma ^ iter
//    - inv: return base_lr * (1 + gamma * iter) ^ (- power)
//    - multistep: similar to step but it allows non uniform steps defined by
//      stepvalue
//    - poly: the effective learning rate follows a polynomial decay, to be
//      zero by the max_iter. return base_lr (1 - iter/max_iter) ^ (power)
//    - sigmoid: the effective learning rate follows a sigmod decay
//      return base_lr ( 1/(1 + exp(-gamma * (iter - stepsize))))
//

废话不多说,直接看它们的图像一目了然:


对应matlab代码是:

iter=1:50000;  
max_iter=50000;  
base_lr=0.01;  
gamma=0.0001;  
power=0.75;  
step_size=5000;  
% - fixed: always return base_lr.  
lr=base_lr*ones(1,50000);  
subplot(2,3,1)  
plot(lr)  
title('fixed')  
% - step: return base_lr * gamma ^ (floor(iter / step))  
lr=base_lr .* gamma.^(floor(iter./10000));  
subplot(2,3,2)  
plot(lr)  
title('step')  
% - exp: return base_lr * gamma ^ iter  
lr=base_lr * gamma .^ iter;  
subplot(2,3,3)  
plot(lr)  
title('exp')  
% - inv: return base_lr * (1 + gamma * iter) ^ (- power)  
lr=base_lr.*(1./(1+gamma.*iter).^power);  
subplot(2,3,4)  
plot(lr)  
title('inv')  
% - multistep: similar to step but it allows non uniform steps defined by  
% stepvalue  
% - poly: the effective learning rate follows a polynomial decay, to be  
% zero by the max_iter. return base_lr (1 - iter/max_iter) ^ (power)  
lr=base_lr *(1 - iter./max_iter) .^ (power);  
subplot(2,3,5)  
plot(lr)  
title('poly')  
% - sigmoid: the effective learning rate follows a sigmod decay  
% return base_lr ( 1/(1 + exp(-gamma * (iter - stepsize))))  
lr=base_lr *( 1./(1 + exp(-gamma * (iter - step_size))));  
subplot(2,3,6)  
plot(lr)  
title('sigmoid')

What is `lr_policy` in Caffe?



### 如何在代码或配置中查看初始学习率 在深度学习框架中,初始学习率通常由优化器(Optimizer)定义并控制。以下是几种常见深度学习框架中查看初始学习率的方法: #### TensorFlow/Keras 在TensorFlow/Keras中,可以通过访问优化器对象的`learning_rate`属性获取当前的学习率。如果使用的是自定义调度器,则需要进一步解析其逻辑。 ```python import tensorflow as tf # 假设模型已编译 optimizer = model.optimizer initial_lr = optimizer.learning_rate.numpy() if isinstance(optimizer.learning_rate, tf.Variable) else optimizer.learning_rate print(f"Initial Learning Rate: {initial_lr}") ``` 此方法适用于静态学习率设置的情况[^1]。如果是动态调整的学习率(如通过回调函数实现),则需查阅具体的调度策略。 #### PyTorch PyTorch中的学习率同样存储于优化器内部参数组中。可通过遍历这些参数组来提取初始学习率。 ```python for param_group in optimizer.param_groups: initial_lr = param_group['lr'] break # 取第一个参数组即可 print(f"Initial Learning Rate: {initial_lr}") ``` 这种方法能够有效处理单个或多个参数组的不同学习率设定情况[^2]。 #### Caffe Caffe框架下,初始学习率被写入到Solver协议缓冲区文件(`.prototxt`)中。可以直接打开该文件寻找`base_lr`字段以确认数值大小。 ```plaintext solver_mode: GPU net: "train_val.prototxt" test_iter: 1000 test_interval: 500 base_lr: 0.001 # 初始学习率为0.001 momentum: 0.9 weight_decay: 0.0005 lr_policy: "step" gamma: 0.1 stepsize: 100000 display: 20 max_iter: 450000 snapshot: 10000 snapshot_prefix: "models/snapshot" ``` 以上展示了如何从不同框架中读取初始学习率的方式[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值