2016-03-07 17 views
6

Mam zmiennej wielkości wsadu, więc wszystkie moje wejścia są postacitensorflow stałe o zmiennej wielkości

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

aby zaakceptować zmianę wielkości partii. Jak jednak utworzyć stałą wartość ze zmiennym rozmiarem partii? Problem jest z tej linii:

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

To daje mi błąd:

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

Jestem pewien, że to jest możliwe, aby zainicjować stałą tensor o zmiennej wielkości partii, w jaki sposób mogę to zrobić ?

Ja również próbowałem następujące:

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

otrzymuję ten błąd:

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

Nie można - "tf.constant" konstruuje tablicę jawnie, więc musi znać wymiary. Jednak wiele programów typu tensorflow obsługuje nadawanie, więc może możesz go użyć? http://docs.scipy.org/doc/numpy-1.10.1/user/basics.broadcasting.html –

Odpowiedz

13

tf.constant() ma stały rozmiar i wartość w czasie budowy wykresu, więc to chyba nie jest odpowiedni op dla twojej aplikacji.

Jeśli próbujesz utworzyć tensor z dynamicznym rozmiarem i taką samą (stałą) wartością dla każdego elementu, możesz użyć tf.fill() i tf.shape(), aby utworzyć odpowiednio napięty tensor. Na przykład, aby utworzyć tensor t, który ma taki sam kształt jak input a wartość 0.5 wszędzie:

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

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

Jak Yaroslav mentions in his comment, może również być w stanie używać (NumPy-style) broadcasting uniknąć materializacji tensora z dynamicznym kształcie. Na przykład, jeśli input ma kształt (None, 32) i t ma kształt (1, 32), to przetwarzanie tf.mul(input, t) spowoduje nadanie t pierwszego wymiaru, aby dopasować kształt input.

+0

Co się stanie, jeśli chcę, aby kształt był zależny od wielkości partii? Powiedzmy, że mam wejściowy tensor kształtu '(batch_size, height, width, num_channels)', gdzie batch_size ma wartość None. Chcę utworzyć tensor kształtu '(batch_size)' wypełniony wartością 'height'. –

+0

Możesz użyć tej samej metody: 'height_vector = tf.fill (tf.shape (input_tensor) [0: 1], tf.shape (input_tensor) [1])'. – mrry

Powiązane problemy