1 Вопрос: Почему Keras pad_sequence не работает дважды в одном и том же коде?

вопрос создан в Thu, May 2, 2019 12:00 AM

Я пытаюсь предварительно обработать некоторые тексты с помощью Keras, и мне нужно использовать функцию keras.preprocessing.sequence.pad_sequences() более одного раза, однако, похоже, она этого не позволяет. Есть ли способ обойти эту ошибку и использовать функцию более одного раза?

import numpy
from keras.preprocessing.sequence import pad_sequences

example_sequences = [[1,2,3,4],[1,5,4],[2,3]]
MAX_SEQUENCE_LENGTH = 3

pad_sequences = pad_sequences(example_sequences, maxlen=MAX_SEQUENCE_LENGTH)
print(pad_sequences)

sequences2 = [[1,2,3,4],[1,5,4],[2,3]]
MAX_SEQUENCE_LENGTH2 = 3

pad_sequences2 = pad_sequences(sequences2, maxlen=MAX_SEQUENCE_LENGTH2)

Вывод:

Using TensorFlow backend.
[[2 3 4]
 [1 5 4]
 [0 2 3]]
Traceback (most recent call last):
  File "C:\Users\test.py", line 47, in <module>
    pad_sequences2 = pad_sequences(sequences2, maxlen=MAX_SEQUENCE_LENGTH2)
TypeError: 'numpy.ndarray' object is not callable

Как вы можете видеть при первом вызове функции, она создает матрицу, однако при втором ее вызове я получаю сообщение об ошибке, что numpy.ndarray не вызывается. Обратите внимание, что входные данные для функции pad_sequence идентичны, и никакие входные данные не являются пустым массивом. Так почему я не получаю один и тот же вывод из функции и как это исправить, чтобы я мог использовать функцию pad_sequence более одного раза?

    
0
1 ответ                              1                         

Вы присваиваете выход первого pad_sequences переменной с именем pad_sequences:

pad_sequences = pad_sequences(example_sequences, maxlen=MAX_SEQUENCE_LENGTH)
print(pad_sequences)  # "pad_sequences" is now a Numpy array!

Следовательно, к тому времени, когда вы достигнете второго «вызова» pad_sequences, это фактически массив Numpy:

pad_sequences2 = pad_sequences(sequences2, maxlen=MAX_SEQUENCE_LENGTH2)

Просто переименуйте выходную переменную, например.

padded_sequences = pad_sequences(example_sequences, maxlen=MAX_SEQUENCE_LENGTH)
print(padded_sequences)
    
0
2019-05-02 15: 18: 48Z
  1. Да, вы абсолютно правы. Такая простая ошибка, я не могу поверить, что я этого не видел. Мой код работает сейчас, спасибо за вашу помощь!
    2019-05-03 08: 19: 58Z
  2. @ sockerkakor: Если это помогло вам, рассмотрите возможность голосования и принятия ответа. Спасибо!
    2019-05-03 10: 03: 09Z
источник размещен Вот