2016-03-07 3 views
6

У меня есть переменный размер партии, поэтому все мои входы имеют видtensorflow константа с переменным размером

tf.placeholder(tf.float32, shape=(None, ...) 

принимать различные размеры партии. Однако как вы можете создать постоянное значение с переменным размером партии? Проблема с этой линией:

log_probs = tf.constant(0.0, dtype=tf.float32, shape=[None, 1]) 

Это дает мне ошибку:

TypeError: unsupported operand type(s) for *: 'NoneType' and 'int' 

Я уверен, что можно инициализировать постоянный тензор с переменным размером партии, как, возможно, я так ?

Я также попытался следующие:

tf.constant(0.0, dtype=tf.float32, shape=[-1, 1]) 

Я получаю эту ошибку:

ValueError: Too many elements provided. Needed at most -1, but received 1 
+1

Вы не можете - «tf.constant» строит массив явно, поэтому ему нужно знать размеры. Однако многие функции tenorflow ops поддерживают вещание, поэтому, возможно, вы можете использовать это вместо этого? http://docs.scipy.org/doc/numpy-1.10.1/user/basics.broadcasting.html –

ответ

13

tf.constant() имеет фиксированный размер и значение во время построения графа, так что, вероятно, не справа для вашего приложения.

Если вы пытаетесь создать тензор с динамическим размером и тем же (постоянным) значением для каждого элемента, вы можете использовать tf.fill() и tf.shape() для создания тензора соответствующей формы. Например, чтобы создать тензор t, который имеет такую ​​же форму, как и input значение 0.5 везде:

input = tf.placeholder(tf.float32, shape=(None, ...)) 

# `tf.shape(input)` takes the dynamic shape of `input`. 
t = tf.fill(tf.shape(input), 0.5) 

Как Yaroslav mentions in his comment, вы также можете быть в состоянии использовать (NumPy-style) broadcasting, чтобы избежать материализации тензор с динамической формой. Например, если input имеет форму (None, 32) и t имеет форму (1, 32), тогда вычисление tf.mul(input, t) будет транслировать t по первому измерению в соответствии с формой input.

+0

Что делать, если я хочу, чтобы форма зависела только от размера партии? Скажем, у меня есть тензор ввода формы '(batch_size, height, width, num_channels)' где batch_size - None. Я хочу создать тензор формы '(batch_size)', заполненный значением 'height'. –

+0

Вы можете использовать тот же метод: 'height_vector = tf.fill (tf.shape (input_tensor) [0: 1], tf.shape (input_tensor) [1])'. – mrry

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