#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. вы решили это?