2015-12-16 5 views
4

Я работаю над учебным пособием по языковой модели LSTM discussed here.TensorFlow LSTM Generative Model

С языковыми моделями обычно используется модель для создания нового предложения с нуля после обучения (т. Е. Образец из модели).

Я новичок в TensorFlow, но я пытаюсь использовать свою обученную модель для генерации новых слов до маркера конца предложения.

Моя первая попытка:

x = tf.zeros_like(m.input_data) 
state = m.initial_state.eval() 
for step in xrange(m.num_steps): 
    state = session.run(m.final_state, 
           {m.input_data: x, 
           m.initial_state: state}) 
    x = state 

Он с ошибкой:

ValueError: setting an array element with a sequence.

ответ

7

Проблема здесь, кажется, m.input_data: x отображение в feed_dict прошло session.run(). В этом случае TensorFlow ожидает, что x представляет собой массив numpy (или некоторый объект, который может быть неявно преобразован в массив numpy), но это значение TensorFlow Tensor (результат tf.zeros_like()).

К счастью, решение прост. Заменить x = tf.zeros_like(m.input_data) следующим:

x = tf.zeros_like(m.input_data).eval() 

... который гарантирует, что x преобразуется в Numpy массив.

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

+0

Спасибо! это имеет большой смысл. – Shazam

+0

Выполнение другой ошибки: W tensorflow/core/common_runtime/executor.cc: 1076] 0x7fcc3575bc70 Вычисление статуса: недопустимый аргумент: вы должны указать значение для тензодателя-заполнителя 'model_1/Placeholder_2' с dtype int32 и формой dim {size: 1 } dim {size: 1} – Shazam

+0

Похоже, что вам не хватает фида. Я не уверен на 100%, но также может быть зависимость от 'm.targets', и в этом случае вам может понадобиться немного реорганизовать код (или указать фиктивное значение для' m.targets'). – mrry

Смежные вопросы