2016-10-14 57 views
2

我嘗試使用動態形狀創建tf.Variable。以下概述了這個問題。Tensorflow無法初始化動態批量大小的tf.Variable

這樣做有效。

init_bias = tf.random_uniform(shape=[self.config.hidden_layer_size, tf.shape(self.question_inputs)[0]]) 

然而,當我嘗試這樣做:

init_bias = tf.Variable(init_bias) 

它引發錯誤ValueError異常:initial_value必須指定的形狀:張量( 「random_uniform:0」,形狀=(?,? ),D型細胞= FLOAT32)

剛出來上下文(問題輸入是一個佔位符,其動態批次):

self.question_inputs = tf.placeholder(tf.int32, shape=[None, self.config.qmax]) 

似乎將動態值放入隨機均勻區域給出的形狀=(?,?),這會給tf.Variable帶來誤差。

謝謝,感謝任何幫助!

回答

0

這應該工作:

init_bias = tf.Variable(init_bias,validate_shape=False) 

如果validate_shape是假,tensorflow允許變量與未知形狀的值進行初始化。

但是,你對我的做法似乎有點奇怪。在張量流中,變量通常用於存儲神經網絡的權重,其形狀保持固定,與批量大小無關。通過將可變長度張量傳遞給圖形(並將其與固定形狀偏差變量相乘/相加)來處理變量批量大小。

+1

我在預加載數據時發現了一個用例:https://www.tensorflow.org/programmers_guide/reading_data#preloaded_data。您可能想要提供不同大小的不同數據集。 –

+0

我仍然收到一個錯誤'InvalidArgumentError(請參閱上面的回溯):您必須爲佔位符張量提供一個值,使用dtype int32 [[節點:佔位符=佔位符[dtype = DT_INT32,shape = [],device =「/作業:本地主機/副本:0 /任務:0 /設備:CPU:0「]()]] ' –