2016-03-16 23 views
10

Hãy nói rằng tôi có một placeholderTensorFlow concat một placeholder biến có kích thước bằng một vector

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

và một vector

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

Trong ví dụ này h được làm đầy với số không vì đơn giản nhưng trong trường hợp thực tế nó sẽ bị thay đổi bởi các biến khác và sẽ có các giá trị khác nhau.

Tôi muốn thực hiện một cách hiệu quả concat trên ph_inputh trên kích thước 1 và lấy bộ căng mới có hình dạng [None, 1+2]. Thật không may concat cần tất cả các thiết bị đầu vào có cùng hình dạng ngoại trừ concat_dim, ví dụ của tôi không đáp ứng được.

Tôi đã xem xét mở rộng h thành hình dạng giống như dữ liệu cung cấp cho ph_input nhưng tôi không chắc chắn chính xác cách thực hiện điều đó với trình giữ chỗ. Nếu tôi nhận được hình dạng từ dữ liệu đầu vào trực tiếp thì tôi đoán không cần thiết phải sử dụng trình giữ chỗ.

Trả lời

12

Các giải pháp chung nhất là sử dụng tf.shape() op để có được kích thước thời gian chạy của placeholder, và tf.tile() op để mở rộng h với kích thước thích hợp:

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. Làm việc cho tôi với tf 10 và 11. –

+1

gói đã được đổi tên thành ngăn xếp! – Rahul

Các vấn đề liên quan