zoukankan      html  css  js  c++  java
  • [caffe] caffe训练tricks

    Tags: Caffe
    Categories: Tools/Wheels

    1. 将caffe训练时将屏幕输出定向到文本文件

    caffe中自带可以画图的工具,在caffe路径下:

    ./tools/extra/parse_log.sh
    ./tools/extra/extract_seconds.py
    ./tools/extra/plot_training_log.py.example

    1. 日志重定向:在训练命令中加入一行参数,实现log日志定向到文件:
      caffe train --sover=/path/to/solver >log/***.log 2>&1
    2. 解析训练数据
      将前面说的三个脚本拷贝到log文件下
      sh parse_log.sh xxxx.log
    3. 生成图片
      python plot_traning_log.py [0-7] save.png xxxx.log

    可以选择的各种图类型:
    6ha3u.md.png

    2. 均值文件计算和转换

    c++中使用的是.binaryproto格式,python中使用的是.npy格式,因此会经常遇到二者之间相互转化的时候。

    python .npy > .binaryproto

    import caffe
    import numpy as np
    
    MEAN_PROTO_PATH = 'mean.binaryproto' # 待转换的pb格式图像均值文件路径
    MEAN_NPY_PATH = 'mean.npy' # 转换后的numpy格式图像均值文件路径
    
    blob = caffe.proto.caffe_pb2.BlobProto() # 创建protobuf blob
    data = open(MEAN_PROTO_PATH, 'rb' ).read() # 读入mean.binaryproto文件内容
    blob.ParseFromString(data) # 解析文件内容到blob
    
    array = np.array(caffe.io.blobproto_to_array(blob))# 将blob中的均值转换成numpy格式,array的shape (mean_number,channel, hight, width)
    mean_npy = array[0] # 一个array中可以有多组均值存在,故需要通过下标选择其中一组均值
    np.save(MEAN_NPY_PATH ,mean_npy)
    

    已知图像均值构造mean.npy

    import numpy as np
    
    MEAN_NPY_PATH = 'mean.npy'
    
    mean = np.ones([3,256, 256], dtype=np.float)
    mean[0,:,:] = 104
    mean[1,:,:] = 117
    mean[2,:,:] = 123
    
    np.save(MEAN_NPY, mean)
    

    3. 训练文件solver的配置

    solver文件是协调整个模型运作的文件,里面可以配置迭代次数,训练策略,学习率的更新策略,训练 多少次测试一次,使用GPU还是CPU等等.

    net: "examples/mnist/lenet_train_test.prototxt"
    test_iter: 100
    test_interval: 500
    base_lr: 0.01
    momentum: 0.9
    type: SGD
    weight_decay: 0.0005
    lr_policy: "inv"
    gamma: 0.0001
    power: 0.75
    display: 100
    max_iter: 20000
    snapshot: 5000
    snapshot_prefix: "examples/mnist/lenet"
    solver_mode: CPU
    

    net: 网络模型,网络模型中可以同时配置train和test model
    test_iter: 遍历整个test数据集的次数
    test_iterval: 训练迭代多少次进行一次测试(一般是遍历完一次训练集进行一次测试)
    display: 迭代多少次将记录输出到屏幕
    max_iter: 最大训练迭代次数
    snapshot: 多少次保存训练的caffemodel和solverstate
    snapshot_prefix: 中间文件保存地址
    solver_mode: 使用GPU/还是CPU
    debug_info:是否将网络每一层的数据输出到屏幕,这个在调试的时候很有用
    type: 求解算法,SGD/AdaDelta/AdaGrad/Nesterov/Adam/RMSProp

    solver配置的官方详细介绍:
    https://github.com/BVLC/caffe/wiki/Solver-Prototxt

    4. 在solver 文件中设置debug_infor: true可以看见网络的forward and backward propagation, 可以根据权值和微分计算,帮助调参

    how to interprete caffe log with debug_info?
    https://stackoverflow.com/questions/40510706/how-to-interpret-caffe-log-with-debug-info

  • 相关阅读:
    周学习笔记(04)——大三下
    进度(3)
    进度(2)
    进度(1)
    周学习笔记(03)——大三下
    《信息领域热词分析》之在代码层实现可用性战术
    周学习笔记(02)——大三下
    cf1041E
    cf1067b
    cf1131D
  • 原文地址:https://www.cnblogs.com/vincentcheng/p/9180263.html
Copyright © 2011-2022 走看看