2017-06-20 61 views
0

正如標題所示,我正在使用從我的機器源代碼構建的tensorflow 1.2版。我不相信這會影響我的問題。Tensorflow 1.2分配變量

這兩個代碼塊有什麼區別? 最重要的一個原因是我從來沒有在訓練時得到分配的值,但底部的確是這樣。我將我的所有時代數據複製到GPU中,然後根據需要抓取每批次的數據,因此此代碼在同一會話中每批次的開始處運行。

代碼是在Python中,所有這些都是在我的模型類中定義的。 所有self.data對象都是3D float32張量。

## the index i.e the current step in the epoch 
    index = tf.to_int32(self.step, name="step_to_int") 

    ## code that doesn't work 
    tf.assign(self.input_data, self.all_input_data[index]) 
    tf.assign(self.targets, self.all_target_data[index]) 

    ## code that works 
    self.input_data = self.all_input_data[index] 
    self.targets = self.all_target_data[index] 

回答

0

請記住,幾乎所有東西都是TensorFlow中的操作。我相信你的代碼中的問題是,你永遠不會運行賦值操作(因爲它已經被初始化了,所以你只需要計算input_data張量)。

然後你需要分配的分配方法的一個變量返回:

self.input_data = tf.assign(self.input_data, self.all_input_data[index]) 

這個變量將舉行兩個新的價值和再分配運行,所以每當你將評估它,它就會更新它的價值。

報價doc字符串:

返回: 一個Tensor 分配後,將舉行「裁判」的新值已完成。

+0

爲什麼它工作,然後當我做一個sess.run(TF,分配(model.all_data,數據))?另外,哪種「更好」的方法可以使用?分配還是隻分配它? – ReverseFall

+0

它的工作原理是因爲你運行'tf.assign'方法的結果,這是一個持有賦值操作的op。我會編輯答案,使其更清晰。 – npf

+0

好的,這是有道理的。我切換它分配tf.assign調用的結果,它再次工作。謝謝。 – ReverseFall