Estoy usando Python Keras package
para la red neuronal. Este es el enlace . ¿Es batch_size
igual al número de muestras de prueba? De Wikipedia tenemos esta información:
Sin embargo, en otros casos, evaluar el gradiente de suma puede requerir evaluaciones costosas de los gradientes de todas las funciones de sumando. Cuando el conjunto de entrenamiento es enorme y no existen fórmulas simples, evaluar las sumas de gradientes se vuelve muy costoso, porque evaluar el gradiente requiere evaluar todos los gradientes de las funciones de suma y suma. Para economizar el costo computacional en cada iteración, el descenso de gradiente estocástico muestrea un subconjunto de funciones de sumando en cada paso. Esto es muy efectivo en el caso de problemas de aprendizaje automático a gran escala.
¿La información anterior describe datos de prueba? ¿Es esto lo mismo que batch_size
en keras (número de muestras por actualización de gradiente)?
fuente
Respuestas:
El tamaño del lote define el número de muestras que se propagarán a través de la red.
Por ejemplo, supongamos que tiene 1050 muestras de entrenamiento y desea configurar un
batch_size
igual a 100. El algoritmo toma las primeras 100 muestras (del 1 al 100) del conjunto de datos de entrenamiento y entrena la red. Luego, toma las segundas 100 muestras (de la 101 a la 200) y entrena la red nuevamente. Podemos seguir haciendo este procedimiento hasta que hayamos propagado todas las muestras a través de la red. El problema puede ocurrir con el último conjunto de muestras. En nuestro ejemplo, hemos usado 1050 que no es divisible por 100 sin resto. La solución más simple es obtener las 50 muestras finales y capacitar a la red.Ventajas de usar un tamaño de lote <número de todas las muestras:
Requiere menos memoria. Como entrena la red con menos muestras, el procedimiento de entrenamiento general requiere menos memoria. Eso es especialmente importante si no puede ajustar todo el conjunto de datos en la memoria de su máquina.
Por lo general, las redes entrenan más rápido con mini lotes. Eso es porque actualizamos los pesos después de cada propagación. En nuestro ejemplo, hemos propagado 11 lotes (10 de ellos tenían 100 muestras y 1 tenía 50 muestras) y después de cada uno de ellos hemos actualizado los parámetros de nuestra red. Si usáramos todas las muestras durante la propagación, solo haríamos una actualización para el parámetro de la red.
Desventajas de usar un tamaño de lote <número de todas las muestras:
El estocástico es solo un mini-lote con
batch_size
igual a 1. En ese caso, el gradiente cambia su dirección aún más a menudo que un gradiente de mini-lote.fuente
batch_size=1
. La idea detrás del aprendizaje en línea es que actualice su modelo tan pronto como vea el ejemplo. Con un tamaño de lote más grande significa que primero está mirando las múltiples muestras antes de realizar la actualización. En RNN el tamaño del lote puede tener diferentes significados. Por lo general, es común dividir la secuencia de entrenamiento en una ventana de tamaño fijo (como 10 palabras). En este caso, incluir 100 de estas ventanas durante el entrenamiento significará que tienebatch_size=100
.En la terminología de la red neuronal:
Ejemplo: si tiene 1000 ejemplos de entrenamiento y el tamaño de su lote es 500, se necesitarán 2 iteraciones para completar 1 época.
FYI: intercambio de tamaño de lote frente a número de iteraciones para entrenar una red neuronal
fuente
Al resolver con una CPU un problema de optimización, aplica iterativamente un algoritmo sobre algunos datos de entrada. En cada una de estas iteraciones, generalmente actualiza una métrica de su problema haciendo algunos cálculos en los datos. Ahora, cuando el tamaño de sus datos es grande, puede necesitar una cantidad considerable de tiempo para completar cada iteración y puede consumir muchos recursos. Por lo tanto, a veces elige aplicar estos cálculos iterativos en una porción de los datos para ahorrar tiempo y recursos computacionales. Esta porción es el tamaño del lote y el proceso se llama (en la jerga de la red neuronal) procesamiento de datos por lotes. Cuando aplica sus cálculos en todos sus datos, entonces realiza el procesamiento de datos en línea. Supongo que la terminología proviene de los años 60, e incluso antes. ¿Alguien recuerda el. bat archivos DOS? Pero, por supuesto, el concepto encarnado significa un hilo o una porción de los datos que se utilizarán.
fuente
La documentación de
Keras
aproximadamente el tamaño del lote se puede encontrar bajo lafit
función en los modelos (API funcional) páginaSi tiene un conjunto de datos pequeño, sería mejor hacer que el tamaño del lote sea igual al tamaño de los datos de entrenamiento. Primero intente con un lote pequeño y luego aumente para ahorrar tiempo. Como mencionó itdxer , hay una compensación entre precisión y velocidad.
fuente