У меня есть текстовый корпус переменного размера. Я пытаюсь передать свои тексты в модель LSTM, используя слой Embedding в keras. Мой код выглядит примерно так:
import numpy as np
from keras.layers import Embedding, Input, LSTM, RNN, SimpleRNN
from keras.models import Model, Sequential
vocab_size = 20000
embedding_len = 50
model = Sequential()
model.add(Embedding(vocab_size, embedding_len))
Я сгенерировал входные данные выборки с использованием генератора случайных чисел numpy:
akak=[]
for i in range(10):
akak.append(np.random.randint(0, 20, size = (np.random.randint(1,30, size=None))))
input_array = np.asarray(akak)
print(input_array)
Выход:
array([array([16, 2, 9, 12, 18, 10, 10, 14, 3, 11, 4, 6, 8, 11, 3]),
array([ 3, 6, 5, 8, 3, 10, 19, 9, 17]),
array([ 1, 6, 17, 14, 14, 19, 12, 15, 14, 0, 16, 2, 1, 18, 13, 14, 17,
14, 2, 11, 0, 19, 2, 8, 13, 10, 17, 13, 5]),
array([ 5, 10, 18, 0, 4, 8]),
array([ 5, 14, 19, 16, 10, 8, 13, 8, 12, 5, 19]),
array([ 7, 4, 17, 0, 10, 8, 3, 6, 14, 4, 8, 9, 0]),
array([ 4, 7, 7, 16, 7, 6, 16, 9, 4, 2, 11]),
array([ 2, 16, 15, 16, 18, 11, 7, 1, 0, 5, 11, 12, 11, 8, 3, 8, 8,
16, 19, 8]),
array([12, 18, 19, 15, 11, 6, 16, 16, 2, 12, 0, 14, 16, 0]),
array([12, 13, 13])], dtype=object)
Когда я пытаюсь предсказать получение только вложений, используя model.predict(input_array)
, я получаю следующую ошибку
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-49-313059fadb55> in <module>()
----> 1 model.predict(input_array).shape
/home/biswadip/.local/lib/python3.6/site-packages/keras/engine/training.py in predict(self, x, batch_size, verbose, steps)
1167 batch_size=batch_size,
1168 verbose=verbose,
-> 1169 steps=steps)
1170
1171 def train_on_batch(self, x, y,
/home/biswadip/.local/lib/python3.6/site-packages/keras/engine/training_arrays.py in predict_loop(model, f, ins, batch_size, verbose, steps)
292 ins_batch[i] = ins_batch[i].toarray()
293
--> 294 batch_outs = f(ins_batch)
295 batch_outs = to_list(batch_outs)
296 if batch_index == 0:
/home/biswadip/.local/lib/python3.6/site-packages/keras/backend/tensorflow_backend.py in __call__(self, inputs)
2713 return self._legacy_call(inputs)
2714
-> 2715 return self._call(inputs)
2716 else:
2717 if py_any(is_tensor(x) for x in inputs):
/home/biswadip/.local/lib/python3.6/site-packages/keras/backend/tensorflow_backend.py in _call(self, inputs)
2653 array_vals.append(
2654 np.asarray(value,
-> 2655 dtype=tf.as_dtype(tensor.dtype).as_numpy_dtype))
2656 if self.feed_dict:
2657 for key in sorted(self.feed_dict.keys()):
/home/biswadip/.local/lib/python3.6/site-packages/numpy/core/numeric.py in asarray(a, dtype, order)
536
537 """
--> 538 return array(a, dtype, copy=False, order=order)
539
540
ValueError: setting an array element with a sequence.
Я знаю, что могу просто дополнить последовательность, но слой LSTM не вернет только последнее скрытое состояние для дополненной последовательности. Я хочу скрытое состояние из последнего скрытого состояния фактической последовательности, а не дополненного, т. Е. Если моя длина последовательности равна 15, а максимальная длина последовательности равна 200, мне нужен вектор скрытого состояния из 15-го состояния, а не 200-го состояния