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.
正如标题所说,我正在为我的机器使用从源代码构建的 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.