我正在尝试使用来自IPython笔记本的TensorFlow。我创建了一个定义占位符和变量的函数。因为我是TensorFlow新手,所以我没有正确初始化变量,并且错误地说我没有初始化占位符。
我有两个单元格,一个带有函数,另一个带有函数调用。无论我修复了多少函数(并且当然重新运行了两个单元格),即使我修复了错误,我仍然会遇到初始化错误。
让它工作的唯一方法是重新启动内核,这几乎击败了笔记本的目的,我只能编写一个Python脚本。
答案 0 :(得分:1)
主要是在没有看到你的代码的情况下进行推测,但从我读到的内容来看,我相信你知道自己做错了什么。
在笔记本中使用Tensorflow时,必须特别注意不要将图形构建代码与评估代码混淆。您只需要并且应该在开始时定义计算图。执行再次定义图形的函数只会构建另一个子图(这可能也适用于定义占位符和变量的函数)。 tf.global_variables_initializer操作也应该只执行一次。
至关重要的是要理解Tensorflow图不能由笔记本动态处理,因为python实际上并不控制Tensorflow变量。在这种情况下,Python只是一种用于定义图形和启动计算的元语言。
因此,在初始化图形完全一次之后的笔记本中,您只能调用包含Tensorflow图形评估代码的函数,而不是动态地构建代码而不重置内核。仅评估现有图表的此类方法的示例包括session.run,其他tf.Session方法或类似tensor.eval等评估方法。
所以,要说清楚,没有办法在没有重建的情况下更改已经构建的图形,在这种情况下需要重置内核,除非你只是一遍又一遍地构建新的子图(并初始化新的变量)但是这会在某些时候耗尽所有可用的内存。