web-dev-qa-db-fra.com

ValueError: Aucune des valeurs non prises en charge. Code fonctionne correctement sur la CPU / GPU mais pas sur TPU

J'essaie de former un seq2seq Modèle pour la traduction linguistique, et je suis copié-coller du code de ceci Notebook Kaggle sur Google Colab. Le code fonctionne bien avec la CPU et GPU, mais cela me donne des erreurs tout en formant une TPU. Cette même question a déjà été posée ici .

Voici mon code:

    strategy = tf.distribute.experimental.TPUStrategy(resolver)
    
    with strategy.scope():
      model = create_model()
      model.compile(optimizer = 'rmsprop', loss = 'categorical_crossentropy')
    
    model.fit_generator(generator = generate_batch(X_train, y_train, batch_size = batch_size),
                        steps_per_Epoch = train_samples // batch_size,
                        epochs = epochs,
                        validation_data = generate_batch(X_test, y_test, batch_size = batch_size),
                        validation_steps = val_samples // batch_size)

Traceback:

Epoch 1/2
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-60-940fe0ee3c8b> in <module>()
      3                     epochs = epochs,
      4                     validation_data = generate_batch(X_test, y_test, batch_size = batch_size),
----> 5                     validation_steps = val_samples // batch_size)

10 frames
/usr/local/lib/python3.7/dist-packages/tensorflow/python/framework/func_graph.py in wrapper(*args, **kwargs)
    992           except Exception as e:  # pylint:disable=broad-except
    993             if hasattr(e, "ag_error_metadata"):
--> 994               raise e.ag_error_metadata.to_exception(e)
    995             else:
    996               raise

ValueError: in user code:
    /usr/local/lib/python3.7/dist-packages/keras/engine/training.py:853 train_function  *
    return step_function(self, iterator)
    /usr/local/lib/python3.7/dist-packages/keras/engine/training.py:842 step_function  **
    outputs = model.distribute_strategy.run(run_step, args=(data,))
...
ValueError: None values not supported.

Je ne pouvais pas comprendre l'erreur et je pense que l'erreur est dû à cette generate_batch une fonction:

X, y = lines['english_sentence'], lines['hindi_sentence']
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.2, random_state = 34)

def generate_batch(X = X_train, y = y_train, batch_size = 128):
    while True:
        for j in range(0, len(X), batch_size):
 
            encoder_input_data = np.zeros((batch_size, max_length_src), dtype='float32')
            decoder_input_data = np.zeros((batch_size, max_length_tar), dtype='float32')
            decoder_target_data = np.zeros((batch_size, max_length_tar, num_decoder_tokens), dtype='float32')
            
            for i, (input_text, target_text) in enumerate(Zip(X[j:j + batch_size], y[j:j + batch_size])):
                for t, Word in enumerate(input_text.split()):
                    encoder_input_data[i, t] = input_token_index[Word]
                for t, Word in enumerate(target_text.split()):
                    if t<len(target_text.split())-1:
                        decoder_input_data[i, t] = target_token_index[Word]
                    if t>0:

                        decoder_target_data[i, t - 1, target_token_index[Word]] = 1.
            yield([encoder_input_data, decoder_input_data], decoder_target_data)

Mon cahier Colab - ici
Kaggle Dataset - ICI
Version Tensorflow - 2.6

Éditer - S'il vous plaît ne me disiez pas à la version Tensorflow/Keras de qualité inférieure à 1.x. Je peux le faire descendre à TensorFlow 2.0, 2.1, 2.3 mais non 1.x. Je ne comprends pas TensorFlow 1.x. En outre, il ne sert à rien d'utiliser une version de 3 ans.

6
Adarsh Wase

Vous devez mettre à jour Keras et votre problème sera corrigé

0
LeMaths

Besoin d'une note de bas à Keras 1.0.2 si fonctionne, sinon, sinon je vais raconter une autre solution.

0
Faisal Shahbaz