Получение ValueError: установка элемента массива с последовательностью при передаче gensim.word2vec в feed_dict - PullRequest
0 голосов
/ 28 апреля 2019

Я создаю модель seq2seq с тензорным потоком (не Keras), а ввод / вывод - предложения. Что-то вроде чата или переводчика.

Но когда я бегу

for epoch in range(total_epoch):
    _, loss = sess.run([optimizer, cost],
                       feed_dict={enc_input: input_batch,
                                  dec_input: output_batch,
                                  targets: target_batch})

Я получаю

ValueError: setting an array element with a sequence.

input_batch / output_batch - это массивы gensim.word2vec.wv.vectors предложений. Я пробовал другие вещи в качестве ввода, но я все еще получаю ту же ошибку. Для цели это массив массивов (каждый внутренний массив представляет собой список чисел, сопоставленных со словом для предложения).

target_batch, который получает ошибку, выглядит следующим образом: [[297, 242, 430, 451, 507, 507, 505, 506, 506, 506, 506, 506], [297, 242, 430, 451, 507, 507, 505, 506, 506, 506, 506, 506], ...]

а для input_batch / output_batch я все перепробовал.

Я использую gensim word2vec, а для inputbatch.append(input_data) input_data делается для каждого предложения, используя gensim word2vec следующим образом:

model=Word2Vec(input_sentence.split(), size=5, window=10, min_count=1, workers=4, sg=1)

Я сделал все, от сохранения его в bin и извлечения до использования model.wv.vectors. Я получаю эту ошибку для всех 3 из enc_input, dec_input и targets

enc_input = tf.placeholder(tf.float32, [None, None, n_input])

Спасибо.

1 Ответ

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

Похоже, вы должны сопоставить форму вашей целевой партии векторного тензора с ключами в словаре каналов enc_input, dec_input, targets. Из документации по тензорному потоку Session.py:

Необязательный аргумент feed_dict позволяет вызывающей стороне переопределять значение тензоров в графе. Каждый ключ в feed_dict может быть одним из следующие типы: Если ключом является tf.Tensor, значением может быть скаляр Python, строка, список или пустой массив ndarray, которые могут быть преобразованы в один и тот же dtype. как этот тензор. Кроме того, если ключ является tf.placeholder, Форма значения будет проверена на совместимость с заполнитель.

Заполнитель должен иметь форму, совместимую с входным тензором. Возможно, будет проще использовать массив NumPy для целевого пакета и использовать его для задания размеров заполнителя, например:

import numpy as np

target_batch = np.array([[297, 242, 430, 451, 507, 507, 505, 506, 506, 506, 506, 506], [297, 242, 430, 451, 507, 507, 505, 506, 506, 506, 506, 506], ...]) #full list of lists

enc_input = tf.placeholder(dtype = tf.float32, shape=target_batch.shape, name=None)

Я не могу проверить это без дополнительной информации, но надеюсь, что это поможет.

...