2017-06-20 12 views
0

タイトルには、私のマシンのソースから構築されたテンソルフローバージョン1.2が使用されていると書かれています。私はそれが私の質問に影響を与えるとは思わない。Tensorflow 1.2変数の割り当て

コードのこれら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]) 

この変数は新しい値と再割り当て動作の両方を保持し、あなたがそれを評価する時はいつでもそう、それが更新されます:あなたは、変数への代入メソッドの戻りを割り当てる必要が

その価値。

戻り値: 割り当てが完了した後に 済の「ref」の新しい値を保持しますTensorドキュメンテーション文字列を引用

+0

私はsess.run(TF、(model.all_data、データ)を割り当てる)を行うときに、なぜそれが、その後動作しますか?また、どちらが「より良い」方法ですか? tf.assignまたはそれを割り当てるだけですか? – ReverseFall

+0

'tf.assign'メソッドの結果を実行するのは、assignオペレーションを保持するopであるためです。答えを編集してより明確にします。 – npf

+0

さて、それは理にかなっています。私はtf.assign呼び出しの結果を代入するように切り替え、それは再び動作します。ありがとう。 – ReverseFall