web-dev-qa-db-fra.com

Comment réparer "ResourceExhaustedError: MOO lors de l'allocation du tenseur"

Je veux faire un modèle avec plusieurs entrées. Alors, j'essaye de construire un modèle comme celui-ci.

# define two sets of inputs
inputA = Input(shape=(32,64,1))
inputB = Input(shape=(32,1024))

# CNN
x = layers.Conv2D(32, kernel_size = (3, 3), activation = 'relu')(inputA)
x = layers.Conv2D(32, (3,3), activation='relu')(x)
x = layers.MaxPooling2D(pool_size=(2,2))(x)
x = layers.Dropout(0.2)(x)
x = layers.Flatten()(x)
x = layers.Dense(500, activation = 'relu')(x)
x = layers.Dropout(0.5)(x)
x = layers.Dense(500, activation='relu')(x)
x = Model(inputs=inputA, outputs=x)

# DNN
y = layers.Flatten()(inputB)
y = Dense(64, activation="relu")(y)
y = Dense(250, activation="relu")(y)
y = Dense(500, activation="relu")(y)
y = Model(inputs=inputB, outputs=y)

# Combine the output of the two models
combined = concatenate([x.output, y.output])


# combined outputs
z = Dense(300, activation="relu")(combined)
z = Dense(100, activation="relu")(combined)
z = Dense(1, activation="softmax")(combined)

model = Model(inputs=[x.input, y.input], outputs=z)

model.summary()

opt = Adam(lr=1e-3, decay=1e-3 / 200)
model.compile(loss = 'sparse_categorical_crossentropy', optimizer = opt,
    metrics = ['accuracy'])

et le résumé: _

Mais, quand j'essaye de former ce modèle,

history = model.fit([trainimage, train_product_embd],train_label,
    validation_data=([validimage,valid_product_embd],valid_label), epochs=10, 
    steps_per_Epoch=100, validation_steps=10)

le problème se produit ....:

-------------------------------------------------- ------------------------- ResourceExhaustedError Traceback (dernier appel le plus récent) dans () ----> 1 history = model.fit ([trainimage , train_product_embd], train_label, validation_data = ([validimage, valid_product_embd], valid_label), epochs = 10, steps_per_Epoch = 100, validation_steps = 10)

4 frames /usr/local/lib/python3.6/dist-packages/tensorflow_core/python/client/session.py in call (self, * args, ** kwargs) 1470 ret = tf_session. TF_SessionRunCallable (self._session._session, 1471
self._handle, args, -> 1472 run_metadata_ptr) 1473 si run_metadata: 1474
proto_data = tf_session.TF_GetBuffer (run_metadata_ptr)

ResourceExhaustedError: 2 erreur (s) racine trouvée (s). (0) Ressource épuisée: MOO lors de l'allocation du tenseur avec la forme [800000,32,30,62] et le type float on/job: localhost/replica: 0/task: 0/device: GPU: 0 par l'allocateur GPU_0_bfc [[{{ node conv2d_1/convolution}}]] Astuce: Si vous voulez voir une liste des tenseurs alloués lorsque le MOO se produit, ajoutez report_tensor_allocations_upon_oom à RunOptions pour les informations d'allocation actuelles.

[[metrics/acc/Mean_1/_185]] Astuce: Si vous voulez voir une liste des tenseurs alloués lorsque le MOO se produit, ajoutez report_tensor_allocations_upon_oom à RunOptions pour les informations d'allocation actuelles.

(1) Ressource épuisée: MOO lors de l'allocation du tenseur avec la forme [800000,32,30,62] et le type float on/job: localhost/replica: 0/task: 0/device: GPU: 0 par allocator GPU_0_bfc
[[{{node conv2d_1/convolution}}]] Astuce: Si vous voulez voir une liste des tenseurs alloués lorsque le MOO se produit, ajoutez report_tensor_allocations_upon_oom à RunOptions pour les informations d'allocation actuelles.

0 opérations réussies. 0 erreurs dérivées ignorées.

Merci d'avoir lu et j'espère m'aider :)

2
Robert

Cela m'est arrivé aussi.

Vous pouvez essayer de réduire les paramètres entraînables en utilisant une certaine forme d'apprentissage par transfert - essayez de geler les premières couches et utilisez des tailles de lots inférieures.

0
Debayan Mitra