machine-learning - example - tensorflow tutorial
Llamando "encajar" varias veces en Keras (2)
Esta pregunta se planteó en el repositorio de Github de Keras en el número 4446: Pregunta rápida: ¿puede un modelo ajustarse varias veces? Fue cerrado por François Chollet con la siguiente statement :
Sí, las llamadas sucesivas para
fit
entrenarán gradualmente el modelo.
Así que, sí, puedes llamar al ajuste varias veces.
He estado trabajando en una CNN a lo largo de varios cientos de GB de imágenes. He creado una función de entrenamiento que elimina partes de 4 Gb de estas imágenes y las llamadas fit
en cada una de estas piezas. Me preocupa que solo estoy entrenando en la última pieza en no en todo el conjunto de datos.
Efectivamente, mi pseudo-código se ve así:
DS = lazy_load_400GB_Dataset()
for section in DS:
X_train = section.images
Y_train = section.classes
model.fit(X_train, Y_train, batch_size=16, nb_epoch=30)
Sé que la API y los foros de Keras dicen que esto formará sobre todo el conjunto de datos, pero no puedo entender intuitivamente por qué la red no volvería a aprender solo en la última parte de la capacitación.
Un poco de ayuda para entender esto sería muy apreciado.
Mejor, joe
Para los conjuntos de datos que no caben en la memoria, hay una respuesta en la sección de Preguntas frecuentes de la documentación de Keras
Puede hacer entrenamiento por lotes usando
model.train_on_batch(X, y)
ymodel.test_on_batch(X, y)
. Consulte la documentación de los modelos .Alternativamente, puede escribir un generador que genere lotes de datos de entrenamiento y usar el método
model.fit_generator(data_generator, samples_per_epoch, nb_epoch)
.Puedes ver el entrenamiento por lotes en acción en nuestro ejemplo de CIFAR10 .
Entonces, si desea iterar su conjunto de datos de la forma en que lo está haciendo, probablemente debería usar model.train_on_batch
y cuidar de los tamaños de lote y la iteración.
Una cosa más a tener en cuenta es que debe asegurarse de que el orden en el que se mezclan las muestras con las que entrena a su modelo se baraja después de cada época. La forma en que ha escrito el código de ejemplo parece no mezclar el conjunto de datos. Puedes leer un poco más sobre barajar here y here