Comandos de uso común y experiencia de aprendizaje de Caffe

1. afinar

    El proceso de ajuste fino es equivalente a la formación continua. La diferencia con la formación directa es durante la inicialización:
    a. El entrenamiento directo se inicializa de acuerdo con el método especificado por la definición de red (como la inicialización aleatoria gaussiana)
    b. Finetune se inicializa con el archivo de parámetros que ya tiene (es decir, el caffemodel previamente entrenado)

./build/tools/caffe train -solver examples / money_test / fine_tune / solver.prototxt -weights models / bvlc_reference_caffenet / bvlc_reference_caffenet.caffemodel

2. Parámetros de capa fija

    Arregle los parámetros antes de una cierta capa, agregue en esta capa

    propagate_down: 0

3. Configure los parámetros del archivo sover

    gama
        Este parámetro representa el grado de cambio de la tasa de aprendizaje cada vez y el valor es un número real.
    Numero de pie
        Este parámetro indica cuándo se debe realizar el siguiente proceso de entrenamiento y el valor es un número entero positivo. Se utiliza principalmente cuando lr_policy es step.
    valor de paso
        Este parámetro indica cuándo se debe realizar el próximo proceso de entrenamiento y el valor es un número entero positivo. Se utiliza principalmente cuando lr_policy es de varios pasos.
    max_iter
        Este parámetro representa el número máximo de iteraciones de la red neuronal de entrenamiento y el valor es un número entero positivo.
    impulso
        Este parámetro indica el número de ponderaciones anteriores que se retendrán en el nuevo cálculo. El valor es una puntuación real, normalmente establecida en 0,9.
    weight_decay
        Este parámetro representa el factor de penalización (regularización) para pesos más grandes. El valor es una puntuación real.
    solver_mode
        Este parámetro se usa para indicar el modo de resolver la red neuronal; el valor es CPU o GPU.
    instantánea
        Este parámetro se usa para indicar cuántas veces se deben guardar el modelo de instantánea y el estado de resolución en cada iteración, y el valor es un número entero positivo.
    snapshot_prefix:
        Este parámetro se utiliza para indicar el prefijo de modelo y estado de resolución al guardar la instantánea. El valor es una cadena entre comillas.
    neto:
        Este parámetro indica la ubicación de la red de entrenamiento y el valor es una cadena entre comillas.
    test_iter
        Este parámetro indica cuántas iteraciones de prueba se realizan para cada test_interval y el valor es un número entero positivo.
    test_interval
        Este parámetro indica cuándo probar los datos y el valor es un número entero positivo.
    mostrar
        Este parámetro se utiliza para indicar cuándo imprimir el resultado de salida en la pantalla El valor es un entero positivo, que indica el número de iteraciones.
    escribe
        Este parámetro representa el algoritmo de retropropagación utilizado para entrenar la red neuronal y el valor es una cadena entre comillas. Los valores opcionales son:
        Descenso de gradiente estocástico "SGD" —— Descenso de gradiente estocástico, el valor predeterminado.
        AdaDelta "AdaDelta" -un "método de tasa de aprendizaje robusto" es un método de optimización basado en gradientes.
        Gradiente adaptativo "AdaGrad" - método de gradiente adaptativo.
        Adam "Adam": un método de optimización basado en gradientes.
        Gradiente acelerado de Nesterov "Nesterov" -Método de gradiente acelerado de Nesterov, como el método más ideal en la optimización convexa, su velocidad de convergencia es muy rápida.
        RMSprop "RMSProp": un método de optimización basado en gradientes.

    r_policy se puede establecer en los siguientes valores, y la tasa de aprendizaje correspondiente se calcula como:
        -fixed: mantener base_lr sin cambios.
        - step:    如果设置为step,则还需要设置一个stepsize,  返回 base_lr * gamma ^ (floor(iter / stepsize)),其中iter表示当前的迭代次数
        - exp:     返回base_lr * gamma ^ iter, iter为当前迭代次数
        - inv:      如果设置为inv,还需要设置一个power, 返回base_lr * (1 + gamma * iter) ^ (- power)
        - multistep: 如果设置为multistep,则还需要设置一个stepvalue。这个参数和step很相似,step是均匀等间隔变化,而multistep则是根据                                 stepvalue值变化
        - poly:     学习率进行多项式误差, 返回 base_lr (1 - iter/max_iter) ^ (power)
        - sigmoid: 学习率进行sigmod衰减,返回 base_lr ( 1/(1 + exp(-gamma * (iter - stepsize))))

note:

 batch_size 尽量选8的倍数。
一个epoch的意思就是迭代次数*batch的数目 和训练数据的个数一样,就是一个epoch
一般在finetune时学习率一般设置在1e-5


4.画网络结构图

draw_net.py执行的时候带三个参数: 
    第1个参数:网络模型的prototxt文件 
    第2个参数:保存的图片路径及名字 
    第3个参数:–rankdir=x , x 有四种选项,分别是LR, RL, TB, BT,默认为LR 。用来表示网络的方向,分别是从左到右,从右到左,从上到小,从下到上。


具体步骤:

    进入到caffe根目录里的python ,在终端输入:
python draw_net.py 1.prototxt original.png


5.运行时生成.log文件

在caffe根目录下建立一个bash文件,写入以下:

#!/usr/bin/env sh
set -e
now=$(date +"%Y%m%d_%H%M%S")
/home/hulu/caffe_mul/build/tools/caffe \
train \
--solver=solver.prototxt \
-weights /home/hulu/vgg_face_recognition/ss2/webface_fr_tiny_vgg_iter_250000.caffemodel \
2>&1|tee train_$now.log &

6.画损失曲线图

    1)先进入/home/hulu/caffe_mul/tools/extra路径
    2)在命令行中运行./plot_training_log.py.example 0 save.png 1.log


7.caffe 数据

    Caffe的数据接口主要有原始图像(ImageData), HDF5, LMDB/LevelDB。由于Caffe自带的图像转LMDB接口只支持但label,对于多label的任务,往往需要使用HDF5。

    因为我用的输入数据比较多,为了方便起见,修改caffe-master使得ImageData支持多标签。

Supongo que te gusta

Origin blog.csdn.net/shenyesi0837/article/details/79658984
Recomendado
Clasificación