我主要在R中开发我的模型,目前我正在学习TensorFlow。 我正在阅读以下代码的教程
raw_data = [1., 2., 8., -1., 0., 5.5, 6., 13]
spike = tf.Variable(False)
spike.initializer.run()
for i in range(1, len(raw_data)):
if raw_data[i] - raw_data[i-1] > 5:
updater = tf.assign(spike, True)
updater.eval()
else:
tf.assign(spike, False).eval()
print("Spike", spike.eval())
sess.close()
从外行人的角度来看,为什么我需要在TensorFlow中初始化和Variabalize?我知道这可能是一个基本问题,但它是R中没有解决的问题。
答案 0 :(得分:3)
让我们看看脚本实际上做了什么:
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()
...它会使你从样板文件中解脱出来,如上所述。