Почему «TypeError: 'numpy .ndarray' объект не может быть вызван» и как его решить? - PullRequest
0 голосов
/ 01 февраля 2020

В настоящее время я изучаю ML из серии tenorflow. В данном случае речь идет о классификации текста. Как видно из кода, я уже обучил модель и сохранил ее в виде файла для проверки.

Загрузка сохраненного файла

modelFile = keras.models.load_model('model_text_classification.h5')

Функция для кодирования:

def review_encode(string):
  '''look up the mapping of all the words and return to us an encoded list'''

  encoded = [1] # start with 1 as a starting tag as the system with word_index['<START>'] = 1

  for word in string:
    if word in word_index:
      encoded.append(word_index[word.lower()])
    else:
      encoded.append(2) # as the END tag

  return encoded

Предварительная обработка:

  1. файл представляет собой большую строку, но мне нужно преобразовать это в закодированный список чисел
  2. размер текста не более 256 слов, потому что именно так я и использовал, когда тренировал данные
with open('lion_king.txt', encoding = 'utf-8') as f:
  for line in f.readlines():
    nline = line.replace(',', '').replace('.', '').replace('(', '').replace(')', '').replace('\"', '').replace(':', '')
    nline = nline.split(' ')

    # encode and trim the data down to 256 words
    encode = review_encode(nline)
    encode = keras.preprocessing.sequence.pad_sequences([encode], value = word_index['<PAD>'], padding = 'post', maxlen = 256) # [encode], because is expecting a list of lists

    # using the model to make a prediction
    predict = model.predict_classes(encode)

    print(line)
    print(encode)
    print(predict(encode[0])) #HERE IS ERROR

Ожидается вывод: распечатать прогноз как 96% положительный. пример: [0.9655667]

Полный возврат:

TypeError                                 Traceback (most recent call last)
<ipython-input-58-790c338a89ce> in <module>()
     13     print(line)
     14     print(encode)
---> 15     print(predict(encode[0]))

TypeError: 'numpy.ndarray' object is not callable

1 Ответ

1 голос
/ 01 февраля 2020

Вы использовали predict = model.predict_classes(encode), который переписывает любое определение функции предикта и заменяет его на массив.

Таким образом, Predict - это массив, который не может быть вызван. Если вы просто видите прогнозируемый класс для encode[0], вы можете использовать: print(predict[0])

...