путаница с длиной последовательности в динамической версии тензорного потока - PullRequest
0 голосов
/ 04 мая 2018

Я обучаю RNN классифицировать последовательность ввода (13 значений на каждом временном шаге) как определенный класс.
Вот соответствующая часть моего кода (номера строк с префиксом)

 50 data = tf.placeholder(tf.float32, [None, 40,13]) #Number of examples, number of input, dimension of each input
 51 target = tf.placeholder(tf.float32, [None, 3])
 52 num_hidden = 24
 53 cell = tf.nn.rnn_cell.LSTMCell(num_hidden,state_is_tuple=True)
 54 val, _ = tf.nn.dynamic_rnn(cell, data, dtype=tf.float32) 

Здесь мой I дополняется (с префиксом и нулевым значением) для каждой входной последовательности пакета, чтобы сделать его 40x13. (Операция заполнения не показана в вышеприведенном коде)
Таким образом, RNN рассмотрит последние 40 шагов для каждого примера, а затем один горячий вектор цели сообщит ему, к какому классу относится этот пример.
Кроме того, я убедился, что выходной класс каждого примера равен 1 или 2 (никогда не равен нулю).

Я видел https://www.tensorflow.org/api_docs/python/tf/nn/dynamic_rnn, в котором упоминается параметр sequence_length.

Que 1) Можно ли использовать его для каждого примера в пакете или в пакете?
Que 2) Кроме того, можете ли вы предложить мне изменить это значение для каждого пакета или для каждого пакета (в зависимости от того, что уместно), предполагая, что у меня есть целочисленный массив seq_len, в котором хранится требуемое значение для каждого пакета или каждого примера (в зависимости от того, что релевантно)?

[quote] sequence_length: (необязательно) размер вектора int32 / int64 [batch_size]. Используется для копирования состояния и выходов обнуления при превышении длины последовательности элемента пакета. Так что это скорее для правильности, чем для производительности. [/ Quote]

Que 3) Предположим, что я установил его на 14 - означает ли это, что RNN будет учитывать первый 14-кратный шаг и переносить состояние вывода (назовем его O 14 ) после 14-го шага и игнорировать входные данные с 15-го по 40-й шаг (считайте все нули), а затем свяжите O 14 с целевым вектором. Так тогда мне не нужно будет добавлять префикс с нулем?
Спасибо.
Вам нужно больше кода, чтобы понять эту ситуацию?

PS: Моя настройка

$ python
Python 2.7.12 (default, Dec  4 2017, 14:50:18) 
[GCC 5.4.0 20160609] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import tensorflow as tf
>>> tf.__version__
'1.8.0'

1 Ответ

0 голосов
/ 08 мая 2018

1) sequence_length вектор Tensor с длиной, равной размеру вашей партии (поэтому "да")

2) Предполагается, что ваш отступ является суффиксом, а не префиксом (но в остальном звучит именно так, как вы хотите).

Например, я бы проверил модульные тесты .

...