J'initialise donc un modèle comme:

model = tf.keras.utils.multi_gpu_model(model, gpus=NUM_GPUS) et quand je le fais model.compile() ça marche parfaitement bien.

Mais quand je fais history = model.fit(tf.cast(X_train, tf.float32), tf.cast(Y_train, tf.float32), validation_split=0.25, batch_size = 16, verbose=1, epochs=100), cela me donne une erreur:

MOO lors de l'allocation du tenseur avec la forme [4760,256,256,3] et le type float on / job: localhost / replica: 0 / task: 0 / device: GPU: 0 par l'allocateur GPU_0_bfc [Op: Cast] nom: Cast /

Ce code fonctionnait parfaitement bien auparavant, mais plus avec Tensorflow 2.0. J'ai 4760 échantillons dans mon kit d'entraînement. Je ne sais pas pourquoi cela prend l'ensemble complet au lieu de la taille du lot.

0
Jonathan 8 oct. 2019 à 01:38

1 réponse

Meilleure réponse

model.compile() ne configure que le modèle pour la formation et il n'a pas d'allocation de mémoire.

Votre bug s'explique de lui-même, vous alimentez directement un grand tableau numpy dans le modèle. Je suggère de coder un nouveau générateur de données ou keras.utils.Sequence pour alimenter vos données d'entrée. Si c'est le cas, vous n'avez pas besoin de spécifier à nouveau la batch_size dans la méthode fit, car votre propre générateur ou Sequence générera des lots.

1
zihaozhihao 7 oct. 2019 à 23:37