2016-04-08 6 views
3

Я пытаюсь реализовать бумаги «сетей памяти End-to-End» (http://arxiv.org/abs/1503.08895)Переменный размер длина в тензором

Каждый учебный пример состоит из нескольких фраз, вопрос и ответ. Количество предложений является переменной, равно как и количество слов в каждом предложении и вопрос. Каждое слово кодируется как целое число. Таким образом, мой ввод будет иметь форму [размер партии, количество предложений, # слов в предложении].

Теперь моя проблема в том, что второе и третье измерение неизвестны для каждой мини-партии. Могу ли я каким-либо образом представить этот вход как единый тензор или мне нужно использовать списки тензоров, так что у меня есть список длины batch_size, а затем подсписчик длины числа предложений, а затем для каждого предложения тензор, размер которого также не известно заранее, что соответствует словам, закодированным как целые числа.

Могу ли я использовать этот второй подход или тензорный поток не сможет вернуться назад, например. У меня есть операция, где я должен вычислить следующую сумму: \ sum_i tf.scalar_mul (p_i, c_i), где p_i - скаляр, а c_i - ранее внедренный вектор вложения. Затем тензоры для значений p и c сохраняются в списке, поэтому мне пришлось бы суммировать элементы в двух списках в цикле. Я предполагаю, что тензорный поток не сможет включить этот цикл в граф вычислений, правильно? Я скептически отношусь к тому, что у theano есть специальная функция сканирования, которая позволяет перебирать входные данные, поэтому я предполагаю, что регулярный цикл вызовет проблемы в графике вычислений. Как это работает с тензорным потоком?

+0

TensorFlow имеет 'сканирование'. Также размеры могут быть динамическими, как в Theano –

+0

Спасибо за ваш ответ. У меня есть еще один вопрос: если я использую динамические измерения на заполнителе формы [None, None, None], и ​​я хочу сгладить его, чтобы я мог вызвать embedding_lookup для каждого элемента в этом тензоре, а затем хочу изменить форму что приводит к исходной форме, как я могу это сделать, если объявить размеры как динамические? – eager2learn

+0

tf.reshape принимает динамические размеры, т. Е. Tf.respon (tf.constant (np.ones ((2,3))), tf.shape (tf.constant (np.ones ((3,2))))) –

ответ

0

Moving комментарий Ярослава к ответу:

TensorFlow имеет tf.scan. Размеры также могут быть динамическими, как в Theano.