2015-11-14 31 views
7

Vì vậy, giả sử tôi có một tensorTensorFlow khởi tensor của những người thân

X = tf.placeholder("float", [None, 5]) 

Vì vậy mà tôi biết số cột nhưng không phải là số lượng hàng. Tôi cần phải khởi tạo một vector của những người thân của chiều nrows x 1

Bây giờ khối mã sau đây không làm việc,

o = tf.ones(shape=(tf.shape(X)[0], 1)) 
==> TypeError: List of Tensors when single Tensor expected 

Cũng không,

o = tf.ones(shape=(X.get_shape()[0].value, 1)) 
==> TypeError: Input 'dims' of 'Fill' Op has type 
    string that does not match expected type of int32. 

Bây giờ, tôi đã phát hiện ra rằng một trong những cách để thực hiện điều này là thực sự làm cho véc-tơ của tôi trở thành một trình giữ chỗ,

o = tf.placeholder(dtype=tf.float32, shape=[None, 1]) 

Và để vượt qua trong một mảng có kích thước phù hợp với kích thước phù hợp trong số feed_dict của tôi. Nhưng giải pháp này đánh tôi như là không thích hợp và không phải là mục đích sử dụng của một trình giữ chỗ. Tôi có thể sai ở đây, nhưng chắc chắn có một cách tốt hơn.

Trả lời

6

Cách để giải quyết vấn đề của bạn là sử dụng tf.pack hoạt động:

o = tf.ones(shape=tf.pack([tf.shape(X)[0], 1]))

Lý do bạn có lỗi là TensorFlow hình dự kiến ​​sẽ được một danh sách các số nguyên hoặc một tensor link. tf.pack giúp dễ dàng chuyển đổi một danh sách các số nguyên và/hoặc các scalar TensorFlow thành một đối tượng Tensor.

+0

Xin cảm ơn! Giải pháp của bạn đã làm việc – user1936768

+0

tf.pack không còn được hỗ trợ bởi 'tensorflow> = 1.00' –

+0

Bạn có thể sử dụng' stack' mặc dù tôi nghĩ? –

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