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.
Vous devez mettre à jour Keras et votre problème sera corrigé
Besoin d'une note de bas à Keras 1.0.2 si fonctionne, sinon, sinon je vais raconter une autre solution.