2017-04-26 66 views
1

我試圖修改TensorFlow MNIST示例,以便在生成結果之前將佔位符輸入值傳遞給操作變量。Tensorflow - 將佔位符值分配給變量

例如:

import tensorflow as tf 

# create placeholder/weights/biases 
input_x = tf.placeholder(tf.float32, [None, 784]) 
input_W = tf.Variable(tf.zeros([784, 10])) 
input_b = tf.Variable(tf.zeros([10])) 

# Create the new variable 
var_x = tf.Variable(tf.zeros([784]), trainable=False) 

# Perform an arbitrary manipulation on MNIST input, and assign to var_x 
for i in range(0,784): 
    var_x[i].assign(input_x[i]/2) 

input_Y = tf.matmul(var_x, input_W) + input_b 

在上面的例子中,我通過佔位符值input_X成var_X,哪裏可以通過權重相乘,以獲得輸出結果之前,對值執行任意操作,。

,我發現了以下錯誤的tf.matmul:

ValueError: Shape must be rank 2 but is rank 1 for 'MatMul' (op: 'MatMul') with input shapes: [784], [784,10]. 

我很困惑,爲什麼在上面的例子中,這個工程:

tf.matmul(input_x, input_W) + input_b 

但這並不:

tf.matmul(var_x, input_W) _ input_b 

由於input_x和var_x都應該是784長度的向量。

我基本上希望它與正常MNIST示例中的矩陣乘法完全相同,但使用變量而不是佔位符。

這似乎應該是超級直觀,但我是TensorFlow的新手,儘管閱讀了很多教程/ SO問題,但我從未在任何地方見過這種特殊場景。

在此先感謝您的任何建議!

回答

0

由於input_x和var_x都應該是784長度的向量。

這並不完全正確。 Input_x的形狀爲[無,784],var_x的形狀爲[784]。

不幸的是,我完全不明白你正在嘗試做的...

我基本上希望它是完全一樣的矩陣乘法你不得不在正常的MNIST例子,但使用一個變量而不是佔位符。

如果你想使用一個變量,而不是一個佔位符,你可以說

input_x = tf.Variable(tf.float32, preloaded_digits_numpy_array) 

而離開代碼的其餘部分像它...

+0

感謝您的答覆,對不起,如果它不清楚。我想正常地將數字加載到佔位符中,但在計算結果之前對這些值進行一些操作。 – inkbleed

+0

對不起,我的評論去掉了。 我想補充: 所以在上面的例子中,我將佔位符的饋送值減半。同樣,我可能想佔用佔位符值,並將它們合併或平均它們等等。我可能希望最終對多個變量執行此操作,因此input_x需要與更新/ matmul'd變量分開。 希望更清楚!歡呼 – inkbleed

+0

嗯,在這種情況下,爲什麼不用numpy來執行這個操作,然後把它送入圖表? – rmeertens