让我们看看脚本实际上做了什么:
spike = tf.Variable(False)
此行在计算图中创建符号变量或节点,并使用常量初始值设定项.此时,没有为此变量分配任何内容.最重要的是,它甚至还不知道它将放置在哪个设备(CPU或GPU)上.
下一个,
spike.initializer.run()
此行在默认会话中运行spike初始化程序,您已经开始了.
请注意,首先,尽管代码完全有效,但在实际应用中并不常见.更常见的是,职责分离:模型在一个或多个源文件中定义,并在另一个或多个文件中执行.初始化在逻辑上属于后者,因为只有在会话启动时才会分配内存.
其次,const不是初始化变量的唯一选项.例如,Xavier initializer需要具有整个图形结构来计算输入和输出连接的数量,并推导出它们的标准偏差.如果我们在定义期间尝试初始化变量,它将无法工作.
我希望现在的tensorflow设计变得更加清晰:初始化器是一个专用的操作系统.特别是对于您的用例,tensorflow已经发布了eager mode,这是一个命令式的,逐个运行的界面,其中操作在从Python调用时立即执行.
你可以像这样开始:
import tensorflow.contrib.eager as tfe
tfe.enable_eager_execution()
……就像上面一样,它会让你从样板中解脱出来.