Python >> Tutoriel Python >  >> Python Tag >> Keras

Convergence GradienTape beaucoup plus lente que Keras.model.fit

Dataset.shuffle() mélanger uniquement chaque mini-lot, de sorte que chaque époque a le même ordre. Keras .fit() utilise des magies pour mélanger l'ensemble des données avant chaque époque. Pour ce faire dans TF, vous devez utiliser Dataset .repeat(epochs_number) et .shuffle(..., reshuffle_each_iteration=True) :

train_ds = data.Dataset.from_tensor_slices(
    (np.hstack([index_rows.reshape(-1, 1), index_cols.reshape(-1, 1)]), index_data)
    ).shuffle(100000, reshuffle_each_iteration=True
    ).batch(batch_size, drop_remainder=True
    ).repeat(epochs_number)

for ix, (examples, labels) in train_ds.enumerate():
    train_step(examples, labels)
    current_epoch = ix // (len(index_data) // batch_size)

Cette solution de contournement n'est ni belle ni naturelle, pour le moment vous pouvez l'utiliser pour mélanger chaque époque. C'est un problème connu et sera corrigé, à l'avenir, vous pouvez utiliser for epoch in range(epochs_number) au lieu de .repeat() .