Keras: добавление массива предложений в качестве входных данных - PullRequest
0 голосов
/ 03 июля 2018

Я новичок в Керас. Я пытаюсь создать нейронную сеть со встроенным слоем в качестве входного слоя. Насколько я понимаю, сейчас структура выглядит следующим образом:

model.add(Embedding(word_count,embedding_size,input_length=sentence_length).

Это работает с набором данных с помеченными предложениями.

Теперь я хочу изменить структуру моего набора данных. Я буду помечать наборы предложений (массивы предложений).

Насколько я знаю, я больше не могу использовать слой Embedding в качестве входного слоя. Это потому, что он ожидает предложение как ввод, а не массив предложений. Могу ли я что-то изменить, чтобы я все еще мог использовать слой внедрения в моей модели, но иметь в качестве входных данных массивы предложений?

Длина массива моих массивов предложений всегда одинакова, так как длина моего предложения остается неизменной.

1 Ответ

0 голосов
/ 04 июля 2018

Допустим, у вас есть массивы предложений фиксированной длины, и, как вы упомянули, количество предложений во всех массивах одинаково. Поэтому, если вы сохраните все свои данные в одном тензорном файле, они будут иметь форму (num_of_arrays, num_of_sentences, length_of_sentence). И каждый массив предложений имеет свою метку. Таким образом, в основном ваша модель должна принимать массив предложений в качестве входных данных и предсказывать метку для нее. Теперь, чтобы использовать слой внедрения, мы сначала изменяем наши данные, затем передаем их слою внедрения, а затем (если необходимо) мы изменяем их обратно. Вот пример:

from keras import models, layers

# the following numbers are just for demonstration
vocab_size = 1000
embed_dim = 50

num_arrays = 100
num_sentences = 200
len_sentence = 300

model = models.Sequential()
model.add(layers.Reshape((num_sentences*len_sentence,), input_shape=(num_sentences, len_sentence)))
model.add(layers.Embedding(vocab_size, embed_dim, input_length=num_sentences*len_sentence))
model.add(layers.Reshape((num_sentences, len_sentence, embed_dim)))
# add whatever layers as you wish to complete your model

model.summary()

Вот краткое описание модели:

_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
reshape_1 (Reshape)          (None, 60000)             0         
_________________________________________________________________
embedding_1 (Embedding)      (None, 60000, 50)         50000     
_________________________________________________________________
reshape_2 (Reshape)          (None, 200, 300, 50)      0         
=================================================================
Total params: 50,000
Trainable params: 50,000
Non-trainable params: 0
_________________________________________________________________

Как видите, каждое из предложений в массиве теперь представлено матрицей формы (sentence_length, embed_dim). Теперь вы можете добавить больше слоев для завершения вашей модели. Я не уверен, что это то, что вы просили. Дайте мне знать в комментариях, если вы имели в виду что-то еще.

...