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 .