Я пытаюсь преобразовать тензор из [A, B, C, D]
в [A, B, C * D]
и передать его в dynamic_rnn
. Предположим, что я заранее не знаю B, C и D (они являются результатом сверточной сети).
Думаю, в Theano такая переформовка выглядела бы так:
x = x.flatten(ndim=3)
Кажется, в TensorFlow нет простого способа сделать это и пока вот что у меня получилось:
x_shape = tf.shape(x)
x = tf.reshape(x, [batch_size, x_shape[1], tf.reduce_prod(x_shape[2:])]
Даже когда форма x
известна во время построения графика (т.е. print(x.get_shape())
выводит абсолютные значения, например [10, 20, 30, 40]
после изменения формы get_shape()
становится [10, None, None]
. Опять же, предположим, что исходная форма неизвестна, поэтому я не могу работать с абсолютными значениями.
И когда я передаю x
в dynamic_rnn
, это не удается:
ValueError: Input size (depth of inputs) must be accessible via shape inference, but saw value None.
Почему reshape
не может справиться с этим делом? Как правильно воспроизвести flatten(ndim=n)
Theano в TensorFlow с тензорами ранга 4 и выше?