¿Por qué barajar mi conjunto de validación en Keras cambia el rendimiento de mi modelo?
Por qué estoy confundido:
Si pruebo mi modelo en los ejemplos [A, B, C], obtendrá una cierta precisión. Si pruebo el mismo modelo en los ejemplos [C, B, A], debería obtener la misma precisión. En otras palabras, mezclar los ejemplos no debería cambiar la precisión de mi modelo. Pero eso es lo que parece estar sucediendo a continuación:
Paso a paso:
Aquí es donde entreno al modelo:
model.fit_generator(batches, batches.nb_sample, nb_epoch=1, verbose=2,
validation_data=val_batches,
nb_val_samples=val_batches.nb_sample)
Aquí es donde pruebo el modelo, sin barajar el conjunto de validación:
gen = ImageDataGenerator()
results = []
for _ in range(3):
val_batches = gen.flow_from_directory(path+"valid", batch_size=batch_size*2,
target_size=target_size, shuffle=False)
result = model.evaluate_generator(val_batches, val_batches.nb_sample)
results.append(result)
Aquí están los resultados (val_loss, val_acc):
[2.8174608421325682, 0.17300000002980231]
[2.8174608421325682, 0.17300000002980231]
[2.8174608421325682, 0.17300000002980231]
Tenga en cuenta que las precisiones de validación son las mismas.
Aquí es donde pruebo el modelo, con unbarajado conjunto de validación:
results = []
for _ in range(3):
val_batches = gen.flow_from_directory(path+"valid", batch_size=batch_size*2,
target_size=target_size, shuffle=True)
result = model.evaluate_generator(val_batches, val_batches.nb_sample)
results.append(result)
Aquí están los resultados (val_loss, val_acc):
[2.8174608802795409, 0.17299999999999999]
[2.8174608554840086, 0.1730000001192093]
[2.8174608268737793, 0.17300000059604645]
Darse cuenta delas precisiones de validación son inconsistentes, a pesar de un conjunto de validación sin cambios y un modelo sin cambios. ¿Que esta pasando?
Nota:
Estoy evaluando todo el conjunto de validación cada vez.model.evaluate_generator regresa después de evaluar el modelo en el número de ejemplos igual aval_batches.nb_sample
, que es el número de ejemplos en el conjunto de validación.