InvalidArgumentError: найдено 2 корневых ошибки

#tensorflow #keras #nlp #named-entity-recognition

#tensorflow #keras #nlp #распознавание именованных объектов

Вопрос:

Я пытаюсь обучить свою модель для более ТОНКОЙ задачи с помощью моего пользовательского набора данных. Структура моей модели выглядит следующим образом:

 input_text = Input(shape=(max_len,), dtype=tf.string)
embedding = Lambda(ElmoEmbedding, output_shape=(max_len, 1024))(input_text)
x = Bidirectional(LSTM(units=512, return_sequences=True, recurrent_dropout=0.2, dropout=0.2))(embedding)
x_rnn = Bidirectional(LSTM(units=512, return_sequences=True, recurrent_dropout=0.2, dropout=0.2))(x)
x = add([x, x_rnn])
out = TimeDistributed(Dense(n_tags, activation="softmax"))(x)

model = Model(input_text, out)
model.summary()
model.compile(optimizer="adam", loss="categorical_crossentropy", metrics=["accuracy"])
  

ElmoEmbedding Функция определяется как:

 def ElmoEmbedding(x):
return elmo_model(inputs={
                        "tokens": tf.squeeze(tf.cast(x, tf.string)),
                        "sequence_len": tf.constant(batch_size*[max_len])
                  },
                  signature="tokens",
                  as_dict=True)["elmo"]
  

Теперь, когда я пытаюсь подогнать модель, я получаю следующую ошибку:

 ---------------------------------------------------------------------------
InvalidArgumentError                      Traceback (most recent call last)
<ipython-input-184-1bcacedbc709> in <module>
      1 history = model.fit(np.array(X_tr), y_tr_b, validation_data=(np.array(X_te), y_te_b),
----> 2                     batch_size=batch_size, epochs=3, verbose=1)

/opt/conda/lib/python3.7/site-packages/tensorflow/python/keras/engine/training_v1.py in fit(self, x, y, batch_size, epochs, verbose, callbacks, validation_split, validation_data, shuffle, class_weight, sample_weight, initial_epoch, steps_per_epoch, validation_steps, validation_freq, max_queue_size, workers, use_multiprocessing, **kwargs)
    807         max_queue_size=max_queue_size,
    808         workers=workers,
--> 809         use_multiprocessing=use_multiprocessing)
    810 
    811   def evaluate(self,

/opt/conda/lib/python3.7/site-packages/tensorflow/python/keras/engine/training_arrays.py in fit(self, model, x, y, batch_size, epochs, verbose, callbacks, validation_split, validation_data, shuffle, class_weight, sample_weight, initial_epoch, steps_per_epoch, validation_steps, validation_freq, **kwargs)
    664         validation_steps=validation_steps,
    665         validation_freq=validation_freq,
--> 666         steps_name='steps_per_epoch')
    667 
    668   def evaluate(self,

/opt/conda/lib/python3.7/site-packages/tensorflow/python/keras/engine/training_arrays.py in model_iteration(model, inputs, targets, sample_weights, batch_size, epochs, verbose, callbacks, val_inputs, val_targets, val_sample_weights, shuffle, initial_epoch, steps_per_epoch, validation_steps, validation_freq, mode, validation_in_fit, prepared_feed_values_from_dataset, steps_name, **kwargs)
    384 
    385         # Get outputs.
--> 386         batch_outs = f(ins_batch)
    387         if not isinstance(batch_outs, list):
    388           batch_outs = [batch_outs]

/opt/conda/lib/python3.7/site-packages/tensorflow/python/keras/backend.py in __call__(self, inputs)
   3823 
   3824     fetched = self._callable_fn(*array_vals,
-> 3825                                 run_metadata=self.run_metadata)
   3826     self._call_fetch_callbacks(fetched[-len(self._fetches):])
   3827     output_structure = nest.pack_sequence_as(

/opt/conda/lib/python3.7/site-packages/tensorflow/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         if run_metadata:
   1474           proto_data = tf_session.TF_GetBuffer(run_metadata_ptr)

InvalidArgumentError: 2 root error(s) found.
  (0) Invalid argument: Length of seq_lengths != input.dims(0), (32 vs. 25)
     [[{{node lambda_11/module_6_apply_tokens/bilm/ReverseSequence}}]]
     [[loss_12/mul/_1051]]
  (1) Invalid argument: Length of seq_lengths != input.dims(0), (32 vs. 25)
     [[{{node lambda_11/module_6_apply_tokens/bilm/ReverseSequence}}]]
0 successful operations.
0 derived errors ignored.
  

Я сомневаюсь, что у меня могут возникнуть проблемы с импортом модулей и настройкой. Поэтому я также добавляю следующие коды:
импортируйте numpy как np
импортируйте pandas как pd
импортируйте matplotlib.pyplot как plt

 from keras.preprocessing.sequence import pad_sequences
from keras.utils import to_categorical
from sklearn.model_selection import train_test_split

from keras.models import Model, Input
from keras.layers import LSTM, Embedding, Dense, TimeDistributed, Dropout, Bidirectional, Lambda
from keras.layers.merge import add
from keras_contrib.layers import CRF

import tensorflow.compat.v1 as tf
import tensorflow_hub as hub
from keras import backend as K
tf.disable_v2_behavior()

sess = tf.Session()
tf.keras.backend.set_session(sess)
  

Комментарии:

1. вы решили это?