Soy nuevo en Keras y necesito tu ayuda.
Estoy entrenando una red neuronal en Keras y mi función de pérdida es la salida cuadrada b / n de la red y el valor objetivo.
Quiero optimizar esto usando Gradient Descent. Después de pasar por algunos enlaces en la red, he llegado a saber que generalmente se utilizan 3 tipos de descensos de gradiente:
- Descenso de gradiente de muestra única : aquí, el gradiente se calcula a partir de una sola muestra cada iteración -> El gradiente puede ser ruidoso.
- Descenso de gradiente por lotes : aquí, el gradiente es el promedio de gradientes calculados a partir de TODAS las muestras en el conjunto de datos -> El gradiente es más general, pero intratable para grandes conjuntos de datos.
- Descenso de gradiente de mini lotes : similar a Batch GD. En lugar de usar un conjunto de datos completo, solo algunas de las muestras (determinadas por tamaño de lote) se usan para calcular el gradiente en cada iteración -> No muy ruidoso y manejable computacionalmente -> Lo mejor de ambos mundos.
Preguntas:
- Me gustaría realizar el Descenso de gradiente de mini lotes en Keras. ¿Cómo puedo hacer esto? ¿Debo usar el optimizador SGD?
Si se va a utilizar SGD, ¿cómo configuro el batch_size? No parece haber un parámetro para la función SGD para establecer el tamaño del lote.
optimizer = keras.optimizers.SGD(lr=0.01, decay=0.1, momentum=0.1, nesterov=False)
Hay un parámetro batch_size en model.fit () en Keras.
history = model.fit(x, y, nb_epoch=num_epochs, batch_size=20, verbose=0, validation_split=0.1)
¿Es esto lo mismo que el tamaño del lote en Descenso de gradiente de mini-lote? Si no, ¿qué significa exactamente entrenar en un lote de entradas? ¿Significa que 'batch_size' no. de subprocesos se ejecutan en paralelo y actualizan los pesos del modelo en paralelo?
Si ayuda, aquí está el fragmento de código de Python que he escrito hasta ahora .
fuente
Dejando a un lado las consideraciones teóricas, dado el conjunto de datos de la vida real y el tamaño de la red neuronal moderna típica, por lo general tomaría demasiado tiempo entrenar en lotes de tamaño uno, y no tendrá suficiente memoria RAM o GPU para entrenar en todo el conjunto de datos En seguida. Por lo tanto, generalmente no es la pregunta "si" se debe usar un mini lote, sino "qué tamaño" de los lotes debe usar. El
batch_size
argumento es el número de observaciones para entrenar en un solo paso, por lo general, los tamaños más pequeños funcionan mejor porque tienen un efecto de regularización. Además, a menudo las personas usan optimizadores más complicados (por ejemplo, Adam, RMSprop) y otros trucos de regularización, lo que hace que la relación entre el rendimiento del modelo, el tamaño del lote, la tasa de aprendizaje y el tiempo de cálculo sea más complicada.fuente