Tensorflow 1.2 分配变量

Tensorflow 1.2 assigning variables

正如标题所说,我正在为我的机器使用从源代码构建的 tensorflow 1.2 版。不过,我认为这不会影响我的问题。

这两段代码有什么区别? 最上面的导致我在训练时永远不会分配值,但最下面的会。我正在将我所有的纪元数据复制到 gpu,然后根据需要获取每个批次的数据,因此这段代码在同一 session.

内的每个批次的开头运行

代码在 python 中,所有这些都在我的模型 class 中定义。 所有 self.data objects 都是 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]

请记住,在 TensorFlow 中几乎所有的事情都是一个操作。我相信你的代码中的问题是你从来没有 运行 赋值操作(你只是评估 input_data 张量,因为它已经被初始化)。

然后你需要将赋值方法的return赋值给一个变量:

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

此变量将保存新值和重新分配操作,因此无论何时对其求值,它都会更新其值。

引用文档字符串:

Returns: A Tensor that will hold the new value of 'ref' after the assignment has completed.