【问题标题】:`tf.set_random_seed()` equivalent for operations seed?`tf.set_random_seed()` 等同于操作种子?
【发布时间】:2025-12-13 09:50:01
【问题描述】:

标题几乎解释了一切。你知道 tensorflow 中的操作种子是否存在等同于 tf.set_random_seed() 的变量。我正在尝试在定义为两个不同图形的两个精确 NN 处初始化完全相同的权重,所以我想知道是否有一种方法可以为所有操作全局设置操作种子,而不必为每个操作一个一个地定义种子(在我的例子中,在 NN 每一层的内核初始化器上 --> tf.glorot_uniform_initializer(seed=777))。

我一直在寻找它,但我的搜索失败了。有谁知道如何一次为图中的所有操作设置操作种子?感谢您的帮助!

【问题讨论】:

    标签: python python-3.x tensorflow


    【解决方案1】:

    根据tf.set_random_seed() 的文档,只有图形级别的种子才能达到您的要求:

    如果设置了图级种子,但未设置操作种子:系统确定性地选择操作种子和图级种子,从而获得唯一的随机序列。

    要使所有操作生成的随机序列在会话中可重复,请设置图级种子

    但您必须记住为具有相同种子的两个图分别调用tf.set_random_seed()

    但这可能仍然行不通,尤其是当图表在不同的设备上执行时(我不确定)。确保两个图表使用相同初始化的安全选项可能是简单地初始化两个图表中的一个,然后将第二个图表中的变量设置为第一个图表的值。

    【讨论】:

    • 感谢您的回答!我已经使用了tf.set_random_seed(),但它没有实现。问题是,尽管我定义了相同的 NN 图,但 tensorflow 会根据手头的完整图确定性地选择一个操作种子,并且我在每个图上都有两个不同的输入管道。因此,操作种子是确定性定义的,但在每个图上都不同。这就是为什么我要问是否存在全局操作种子设置器。
    • 是的,我认为可能是这样。这就是我写最后一段的原因。没有其他方法可以设置随机种子(据我所知),所以我会通过简单地将值从一个图形复制到另一个图形来解决这个问题。
    • 好吧,这应该可以确保两个 NN 具有相同的权重。但是,我已经可以通过在我的 NN 的每个可训练层上设置操作种子来解决这个问题。问题更集中于是否存在一种简单的方法来为图中定义的所有操作设置操作种子。我编辑我的问题以使其清楚。