2016-03-16 25 views
10

Powiedzmy mam zastępczyTensorFlow Concat zmiennej wielkości zastępczy z wektorem

ph_input = tf.placeholder(dtype=tf.int32, [None, 1])

i wektor

h = tf.zeros([1,2], dtype=tf.int32)

W tym przykładzie h jest wypełniona zerami dla uproszczenia ale w tym przypadku zostanie zmieniony przez inne zmienne i będzie miał różne wartości.

Chcę skutecznie zrobić concat na ph_input i h na wymiar 1 i dostać nowy tensor z kształtu [None, 1+2]. Niestety, concat potrzebuje wszystkich tensorów wejściowych, aby mieć ten sam kształt z wyjątkiem concat_dim, którego mój przykład nie spełnia.

Rozważałem rozszerzenie h na ten sam kształt, co dane przesyłane do ph_input, ale nie jestem do końca pewien, jak to zrobić z samym symbolem zastępczym. Jeśli otrzymam kształt bezpośrednio z danych wejściowych, to domyślam się, że nie jest konieczne użycie symbolu zastępczego.

Odpowiedz

12

Najbardziej ogólnym rozwiązaniem jest użycie tf.shape() op aby uzyskać rozmiar run-time z zastępczego, a tf.tile() op rozszerzenia h do odpowiedniego rozmiaru:

ph_input = tf.placeholder(dtype=tf.int32, shape=[None, 1]) 
h = tf.zeros([1, 2], dtype=tf.int32) # ...or some other tensor of shape [1, 2] 

# Get the number of rows in the fed value at run-time. 
ph_num_rows = tf.shape(ph_input)[0] 

# Makes a `ph_num_rows x 2` matrix, by tiling `h` along the row dimension. 
h_tiled = tf.tile(h, tf.pack([ph_num_rows, 1])) 

result = tf.concat(1, [ph_input, h_tiled]) 
+0

Perfect. Pracowałem dla mnie z tf 10 i 11. –

+1

paczka została przemianowana na stos! – Rahul