Как указать вход со списком массивов для встраивания слоя в Keras? - PullRequest
1 голос
/ 02 апреля 2019

Я пытаюсь выполнить генерацию текста на уровне слов и застрял в следующей проблеме:

Мой вклад выглядит так:

   tokenized_seq = [[w2v_model.wv.vocab[word].index for word in w2v_data[i]] for i in range(len(w2v_data))]
   x_seq = []
   y_seq = []

   for seq in tokenized_seq:
      x_seq.append(seq[:-1])
      y_seq.append([seq[-1]])

Итак, я иду вдоль последовательности (закодированные слова usnig word2vec) со скользящим окном фиксированного размера (tokenized _seq - список последовательности с фиксированной длиной).

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

Кодовый блок:

print(x_seq[0], '->', y_seq[0])  
print(' '.join([w2v_model.wv.index2word[i] for i in x_seq[0]]), '->', w2v_model.wv.index2word[y_seq[0].pop()]) 

Выход:

[608, 1661, 1, 4260, 1, 3, 2978, 741, 0, 153, 740, 1, 12004] -> [109]
часть первая . i . — eh bien , mon prince . gênes -> et

Итак, я пытаюсь ввести все вышеперечисленное в слой Embedding.

model = Sequential()
model.add(Embedding(input_dim=vocab_size,
                    output_dim=emdedding_size,
                    input_length=avg_sent_len-1,
                    weights=[predtrained_weights]
                    trainable=False))

model.add(Bidirectional(LSTM(units=128)))

model.add(Dense(units=vocab_size, activation='softmax'))

model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])

history = model.fit(x_seq, y_seq,
                   epochs=10,
                   batch_size=128,
                   validation_split=0.2,
                   verbose=2)

Параметры встраивания:

predtrained_weights = w2v_model.wv.vectors
vocab_size, emdedding_size = w2v_model.wv.vectors.shape

avg_sent_len - длина каждой последовательности в x_seq

Модель хорошо компилируется, но при подгонке выдает следующую ошибку:

ValueError: Error when checking target: expected dense_40 to have shape (31412,) but got array with shape (223396,) 

(31412,) vocab_size 223396 имеет длину x_seq или y_seq (количество входных последовательностей) Итак, кто-нибудь может мне помочь?

1 Ответ

0 голосов
/ 02 апреля 2019

Вы вводите x_seq должен быть один массив с массой (batch_size, seq_len). Попробуйте добавить x_seq = np.array(x_seq).

...