Не удается отследить запись при обработке записи в алгоритме LSTM для классификации текста

Как сказал тангенс, размер массива фиксирован. Но сначала вам нужно создать экземпляр, иначе это будет только нулевая ссылка.

String[] where = new String[10];

Этот массив может содержать только 10 элементов. Таким образом, вы можете добавить значение всего 10 раз. В вашем коде вы получаете нулевую ссылку. Вот почему он не работает. Чтобы иметь динамически растущую коллекцию, используйте ArrayList.

-1
задан Ashok Kuramdasu 8 March 2019 в 09:46
поделиться

1 ответ

В1) Почему мы ввели вектор внедрения слова (300 dim) в качестве весов в слой внедрения LSTM?

Очень упрощенно вы можете представить слои внедрения как таблица поиска, которая преобразует слово (представленное его индексом в словаре) в вектор. Это обучаемые слои. Поскольку вы уже обучили встраиванию слов вместо того, чтобы инициализировать слой встраивания со случайным весом, вы инициализируете его с помощью векторов, которые вы изучили.

Embedding(len(word_index)+1, 300, weights=[embedding_matrix], trainable=False)(input_layer)

Итак, вы

  • создаете слой внедрения или справочную таблицу, которая может искать индексы слов от 0 до len (word_index).
  • Каждое найденное слово будет отображаться в векторе размером 300.
  • Эта таблица поиска загружена векторами из «embedding_matrix» (которая является предварительно обученной моделью).
  • trainable = False замораживает вес в этом слое.

Вы прошли 300, потому что это размер вектора вашей предварительно обученной модели (embedding_matrix)

Q2) Как мы можем узнать оптимальное число нейронных элементов в слое LSTM?

< / blockquote>

Вы создали слой LSTM, в котором на вход берется вектор размера 300 и возвращается вектор размера 300. Выходной размер и количество уложенных LSTMS являются гиперпараметрами, которые настраиваются вручную (обычно с использованием KFold CV)

Q3) Не могли бы вы объяснить, как обрабатывается одна запись в алгоритме LSTM?

  • Одна запись / предложение (я) преобразуются в индексы словаря. Таким образом, для каждого предложения у вас есть массив индексов.
  • Партия этих предложений создается и подается в качестве входных данных для модели.
  • LSTM разворачивается, передавая по одному индексу за раз в качестве входных данных на каждом временном шаге.
  • Наконец, выходной сигнал LSTM передается прямым финальным плотным слоем до размера 33. Таким образом, похоже, что каждый вход сопоставлен с одним из 33 классов в вашем случае.

Простой пример

import numpy as np
from keras.preprocessing.text import one_hot
from keras.preprocessing.sequence import pad_sequences
from keras.models import Sequential
from keras.layers import Dense
from keras.layers import Flatten, LSTM
from keras.layers.embeddings import Embedding
from nltk.lm import Vocabulary
from keras.utils import to_categorical
training_data = [ "it was a good movie".split(), "it was a bad movie".split()]
training_target = [1, 0]
v = Vocabulary([word for s in training_data for word in s])
model = Sequential()
model.add(Embedding(len(v),50,input_length = 5, dropout = 0.2))
model.add(LSTM(10, dropout_U = 0.2, dropout_W = 0.2))
model.add(Dense(2,activation='softmax'))
model.compile(loss = 'categorical_crossentropy', optimizer='adam',metrics = ['accuracy'])
print(model.summary())
x = np.array([list(map(lambda x: v[x], s)) for s in training_data])
y = to_categorical(training_target)
model.fit(x,y)

0
ответ дан mujjiga 8 March 2019 в 09:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: