2017-06-20 62 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