# -*- coding:utf-8 -*- # çæsolveræä»¶ from caffe.proto import caffe_pb2 def solver_file(model_root, model_name): s = caffe_pb2.SolverParameter() # 声æsolverç»æ s.train_net = model_root+'train.prototxt' # è®ç»ç½ç»ç»æé ç½®æä»¶ s.test_net.append(model_root+'test.prototxt') # æµè¯æ¶ç½ç»ç»æé ç½®æä»¶ï¼æµè¯ç½ç»å¯æå¤ä¸ª # æ¯è®ç»è¿ä»£test_interval次è¿è¡ä¸æ¬¡æµè¯ã s.test_interval = 500 # æ¯æ¬¡æµè¯æ¶çæ¹éæ°ï¼æµè¯éç½ç»å¯æå¤ä¸ª s.test_iter.append(100) # æå¤§è®ç»è¿ä»£æ¬¡æ° s.max_iter = 10000 # åºç¡å¦ä¹ ç s.base_lr = 0.01 # å¨éï¼è®°å¿å å s.momentum = 0.9 # æéè¡°åå¼ï¼éå¿å å s.weight_decay = 5e-4 # å¦ä¹ çååçç¥ãå¯éåæ°ï¼fixedãstepãexpãinvãmultistep # fixed: ä¿æbase_lrä¸åï¼ # step: å¦ä¹ çååè§å¾base_lr * gamma ^ (floor(iter / stepsize))ï¼å ¶ä¸iter表示å½åçè¿ä»£æ¬¡æ°ï¼ # exp: å¦ä¹ çååè§å¾base_lr * gamma ^ iterï¼ # inv: è¿éè¦è®¾ç½®ä¸ä¸ªpowerï¼å¦ä¹ çååè§å¾base_lr * (1 + gamma * iter) ^ (- power)ï¼ # multistep: è¿éè¦è®¾ç½®ä¸ä¸ªstepvalueï¼è¿ä¸ªåæ°åstepç¸ä¼¼ï¼stepæ¯ååçé´éååï¼èmultistepåæ¯æ ¹æ®stepvalueå¼ååï¼ # stepvalueåæ°è¯´æï¼ # poly: å¦ä¹ çè¿è¡å¤é¡¹å¼è¯¯å·®ï¼è¿åbase_lr (1 - iter/max_iter) ^ (power)ï¼ # sigmoid: å¦ä¹ çè¿è¡sigmodè¡°åï¼è¿åbase_lr ( 1/(1 + exp(-gamma * (iter - stepsize))))ã s.lr_policy = 'inv' s.gamma = 0.0001 s.power = 0.75 s.display = 100 # æ¯è¿ä»£display次æ¾ç¤ºç»æ s.snapshot = 5000 # ä¿åä¸´æ¶æ¨¡åçè¿ä»£æ° s.snapshot_prefix = model_root+model_name+'shapshot' # 模ååç¼ï¼å°±æ¯è®ç»å¥½çæmodelçåå s.type = 'SGD' # è®ç»æ¹æ³ï¼å类梯度ä¸éæ³ï¼ï¼å¯éåæ°ï¼SGDï¼AdaDeltaï¼AdaGradï¼Adamï¼Nesterovï¼RMSProp s.solver_mode = caffe_pb2.SolverParameter.GPU # è®ç»åæµè¯æ¨¡åï¼GPUæCPU solver_file=model_root+'solver.prototxt' # è¦ä¿åçsolveræä»¶å with open(solver_file, 'w') as f: f.write(str(s)) caffe_root = '../../' model_name = 'LeNet5_Mnist_' # caffe_root = 'E:/Code/Github/windows_caffe/' model_root = caffe_root + 'models/mnist/' solver_file(model_root, model_name)