Caffe | solver.prototxt values ​​setting strategy strategy

En Caffe, estoy tratando de implementar una red Fully Convolution para la segmentación semántica. Me preguntaba si existe una estrategia específica para configurar 'solver.prototxt' valores de 'solver.prototxt' para los siguientes 'solver.prototxt' :

  • test_iter
  • test_interval
  • iter_size
  • max_iter

¿Depende de la cantidad de imágenes que tienes para tu conjunto de entrenamiento? ¿Si es así, cómo?

    Para establecer estos valores de manera significativa, debe tener algunos datos más sobre sus datos:

    1. Tamaño del conjunto de entrenamiento el número total de ejemplos de entrenamiento que tiene, llamemos a esta cantidad T
    2. Entrenando el tamaño del lote el número de ejemplos de entrenamiento procesados ​​juntos en un solo lote, esto generalmente es establecido por la capa de datos de entrada en 'train_val.prototxt' . Por ejemplo, en este archivo, el tamaño del lote del tren se establece en 256. Denotemos esta cantidad por tb .
    3. El tamaño del conjunto de validación es la cantidad total de ejemplos que ha reservado para validar su modelo, denotemos esto por V
    4. Valor del tamaño del lote de validación establecido en batch_size para la fase TEST. En este ejemplo , se establece en 50. Vamos a llamar a esto vb .

    Ahora, durante el entrenamiento, le gustaría obtener una estimación imparcial del rendimiento de su red de vez en cuando. Para hacerlo, ejecute su red en el conjunto de validación para test_iter iteraciones test_iter . Para cubrir todo el conjunto de validación, debe tener test_iter = V/vb .
    ¿Con qué frecuencia le gustaría obtener esta estimación? Depende de ti. Si tiene un conjunto de validación muy grande y una red lenta, la validación con demasiada frecuencia hará que el proceso de capacitación sea demasiado largo. Por otro lado, no validar con la suficiente frecuencia puede evitar que notes si tu proceso de entrenamiento no convergió y cuándo lo hizo. test_interval determina la frecuencia con la que se valida: generalmente para redes grandes se establece test_interval en el orden de 5K, para redes más pequeñas y más rápidas se pueden elegir valores más bajos. De nuevo, todo depende de ti.

    Para cubrir todo el conjunto de entrenamiento (completando una “época”) necesita ejecutar iteraciones T/tb . Por lo general, se entrena durante varias épocas, por lo tanto max_iter=#epochs*T/tb .

    En cuanto a iter_size : esto permite promediar gradientes en varios mini lotes de entrenamiento, consulte este hilo para obtener más información.