如何生成Solver配置文件---caffe
2016-12-12 21:09
274 查看
solver是caffe的核心,也被称为优化器,在DeepLearning中通常是没有解析解的,我们只能通过优化的方案来求解,solver的主要作用就是交替调用前向传播和后向传播算法来交替更新参数。
solver的流程:
1. 设计好优化的对象---编写train.prototxt文件
2. 通过forward来计算最终的输出值,以及对应的loss
3. 通过backward计算每一层的梯度
4. 根据选用的solver算法来利用梯度进行更新
5. 定期的评价测试训练的网络
6. 记录并保存每一次迭代的学习率,快照,以及对应的状态
如何写solver文件:
from caffe.proto import caffe_pb2
s = caffe_pb2.SolverParameter()
path='/home/xxx/data/'
solver_file=path+'solver.prototxt' # solver文件保存位置
s.train_net = path+'train.prototxt' # 训练配置文件
s.test_net.append(path+'val.prototxt') # 测试配置文件
s.test_interval = 782 # 测试间隔
s.test_iter.append(100) # 测试迭代次数,结合batch_size来理解
s.max_iter = 78200 # 最大迭代次数
s.momentum = 0.9 # momentum系数
s.weight_decay = 5e-4 # 权值衰减系数
#学习率的设置在下面会详细来讲
s.base_lr = 0.001 # 基础学习率
s.lr_policy = 'step' # 学习率衰减方法
s.stepsize=10000 # 此值仅对step方法有效
s.gamma = 0.1 # 学习率衰减指数
s.display = 782 # 屏幕日志显示间隔,如果为0则不显示
s.snapshot = 7820 # 保存模型的间隔
s.snapshot_prefix = 'model/snapshot' # 保存在model文件夹下,文件名以snapshot开头
s.type = “SGD” # 优化算法
s.solver_mode = caffe_pb2.SolverParameter.GPU # 设置计算方式
with open(solver_file, 'w') as f:
f.write(str(s))
学习率的设置。只要是梯度下降法来求解优化,都会有一个学习率,也叫步长。base_lr用于设置基础学习率,在迭代的过程中,可以对基础学习率根据指定的策略进行调整,由lr_policy来设置。
lr_policy可以设置为下面这些值,相应的学习率的计算为:
- fixed:
保持base_lr不变.
- step:
如果设置为step,则还需要设置stepsize和gamma,返回 base_lr*gamma^(floor(iter/stepsize)),其中iter表示当前的迭代次数。
- exp:
还需要设置gamma,返回base_lr*gamma^iter,iter为当前迭代次数
- inv:
如果设置为inv,还需要设置power和gamma, 返回base_lr*(1+gamma*iter)^(-power)
- multistep:
s.stepvalue.append(10000)
s.stepvalue.append(20000)
s.stepvalue.append(30000) 如果设置为multistep,则还需要设置一个stepvalue。这个参数和step很相似,step是均匀等间隔变化,而multistep则是根据stepvalue值变化
- poly:
学习率进行多项式误差,返回 base_lr (1 - iter/max_iter) ^ (power)
- sigmoid:
学习率进行sigmod衰减,返回 base_lr ( 1/(1 + exp(-gamma * (iter - stepsize))))
solver的流程:
1. 设计好优化的对象---编写train.prototxt文件
2. 通过forward来计算最终的输出值,以及对应的loss
3. 通过backward计算每一层的梯度
4. 根据选用的solver算法来利用梯度进行更新
5. 定期的评价测试训练的网络
6. 记录并保存每一次迭代的学习率,快照,以及对应的状态
如何写solver文件:
from caffe.proto import caffe_pb2
s = caffe_pb2.SolverParameter()
path='/home/xxx/data/'
solver_file=path+'solver.prototxt' # solver文件保存位置
s.train_net = path+'train.prototxt' # 训练配置文件
s.test_net.append(path+'val.prototxt') # 测试配置文件
s.test_interval = 782 # 测试间隔
s.test_iter.append(100) # 测试迭代次数,结合batch_size来理解
s.max_iter = 78200 # 最大迭代次数
s.momentum = 0.9 # momentum系数
s.weight_decay = 5e-4 # 权值衰减系数
#学习率的设置在下面会详细来讲
s.base_lr = 0.001 # 基础学习率
s.lr_policy = 'step' # 学习率衰减方法
s.stepsize=10000 # 此值仅对step方法有效
s.gamma = 0.1 # 学习率衰减指数
s.display = 782 # 屏幕日志显示间隔,如果为0则不显示
s.snapshot = 7820 # 保存模型的间隔
s.snapshot_prefix = 'model/snapshot' # 保存在model文件夹下,文件名以snapshot开头
s.type = “SGD” # 优化算法
s.solver_mode = caffe_pb2.SolverParameter.GPU # 设置计算方式
with open(solver_file, 'w') as f:
f.write(str(s))
学习率的设置。只要是梯度下降法来求解优化,都会有一个学习率,也叫步长。base_lr用于设置基础学习率,在迭代的过程中,可以对基础学习率根据指定的策略进行调整,由lr_policy来设置。
lr_policy可以设置为下面这些值,相应的学习率的计算为:
- fixed:
保持base_lr不变.
- step:
如果设置为step,则还需要设置stepsize和gamma,返回 base_lr*gamma^(floor(iter/stepsize)),其中iter表示当前的迭代次数。
- exp:
还需要设置gamma,返回base_lr*gamma^iter,iter为当前迭代次数
- inv:
如果设置为inv,还需要设置power和gamma, 返回base_lr*(1+gamma*iter)^(-power)
- multistep:
s.stepvalue.append(10000)
s.stepvalue.append(20000)
s.stepvalue.append(30000) 如果设置为multistep,则还需要设置一个stepvalue。这个参数和step很相似,step是均匀等间隔变化,而multistep则是根据stepvalue值变化
- poly:
学习率进行多项式误差,返回 base_lr (1 - iter/max_iter) ^ (power)
- sigmoid:
学习率进行sigmod衰减,返回 base_lr ( 1/(1 + exp(-gamma * (iter - stepsize))))
相关文章推荐
- 如何生成Solver配置文件---caffe
- 如何生成Solver配置文件---caffe
- 如何生成Solver配置文件---caffe
- 如何生成Solver配置文件---caffe
- 如何生成Solver配置文件---caffe
- 如何生成Solver配置文件---caffe
- 如何生成Solver配置文件---caffe
- 如何生成Solver配置文件---caffe
- 如何生成Solver配置文件---caffe
- 如何生成Solver配置文件---caffe
- 如何使用PHP生成动态配置文件
- caffe的python接口学习(2):生成solver文件
- Mybatis 如何自动生成bean dao xml 配置文件 generatorconfig.xml
- caffe for windows的python接口学习(5):生成solver文件
- Android Studio下如何配置AIDL文件并生成java文件
- vs2010中如何配置工程的pdb文件的生成路径
- Mybatis 如何自动生成bean dao xml 配置文件 generatorconfig.xml (mysql)
- 转载:如何使用XCodeFactory自动生成XML配置文件和对应的解析类
- Mybatis 如何自动生成bean dao xml 配置文件 generatorconfig.xml (main()方法自动生成更快捷)
- 如何根据hibernate的实体类和实体类配置文件生成数据库的表