0

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

1 回答 1

0

请记住,在 TensorFlow 中几乎所有内容都是一个操作。我相信您的代码中的问题是您从未运行分配操作(您只需评估input_data已初始化的张量)。

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

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

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

引用文档字符串:

返回: ATensor将在分配完成后保存 'ref' 的新值。

于 2017-06-20T12:50:17.027 回答