张量流中的“有状态对象”是什么?

张量流中的“有状态对象”是什么?,第1张

张量流中的“有状态对象”是什么?

正如其他人提到的那样,有状态对象是持有状态的对象。
现在,以TensorFlow术语来说,状态是一些值或数据,该值或数据保存在对的不同调用之间

tf.Session.run
。最常见和最基本的状态对象是变量。您可以调用
run
一次以更新模型的参数(即变量),并且它们将在下一次调用时保持其分配的值
run
。这与大多数 *** 作不同。例如,如果您有一个加法运算,该运算需要两个张量并输出第三个张量,
run
则不会保存它在一次调用中计算的输出值。实际上,即使您的图形仅包含具有恒定值的运算,每次调用时都会评估张量运算
run
,即使结果始终相同。
但是,
当给变量赋值时,它将“粘”
(顺便说一句,占用相应的内存,如果选择这样做,则在检查点上进行序列化)。

数据集迭代器也是有状态的。当您一次运行获得一条数据时,它将被消耗,然后在下一次运行中获得另一条数据。迭代器“记住”运行之间的位置。这就是为什么类似于初始化变量的原因,可以初始化迭代器(在它们支持时),以将其重置为已知状态。

从技术上讲,另一种有状态对象是随机 *** 作。通常,人们将随机 *** 作视为随机 *** 作,但实际上它们拥有一个随机数生成器,该生成器的状态确实在两次运行之间保持,并且如果您提供了种子,那么在开始时它们将处于定义明确的状态会议。但是,据我所知,没有任何方法可以将随机 *** 作重置为同一会话中的初始状态。

请注意,术语“有状态”经常(当不是特别指TensorFlow时)以略有不同的含义或以不同的抽象级别使用。例如,递归神经网络(RNN)一般说来,它们是有状态的,因为从概念上讲,它们的内部状态随收到的每个输入而变化。但是,当您在TensorFlow中创建RNN时,内部状态不一定必须处于有状态对象中!像任何其他类型的神经网络一样,TensorFlow中的RNN原则上将具有一些参数或权重,通常存储在可训练变量中-
因此,以TensorFlow术语而言,无论是否为RNN,所有可训练模型都具有针对训练参数的有状态对象。但是,Rens的内部状态在TensorFlow中用每次运行时获得的输入状态值和输出状态值表示(请参见

tf.nn.dynamic_rnn
),那么您可以在每次运行时从“零”状态开始,而不必理会最终的输出状态。当然,如果需要,您也可以将输入状态作为变量的值,然后将输出状态写回该变量,然后您的RNN内部状态将对TensorFlow处于“有状态”;也就是说,您将能够在一次运行中处理一些数据,并在下一次运行中处理“将数据留在原处”(视情况而定)。我知道这可能会有点混乱,但我希望这是有道理的。



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/4923721.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-12
下一篇 2022-11-13

发表评论

登录后才能评论

评论列表(0条)

保存