使用 tf.set_random_seed 在 Tensorflow 中重现结果

2023-12-12

我正在尝试生成 N 组独立的随机数。我有一个简单的代码,显示了 3 组 10 个随机数的问题。我注意到即使我使用tf.set_random_seed设置种子,不同运行的结果看起来并不相似。非常感谢任何帮助或意见。

(py3p6) bash-3.2$ cat test.py 
import tensorflow as tf
for i in range(3):
  tf.set_random_seed(1234)
  generate = tf.random_uniform((10,), 0, 10)
  with tf.Session() as sess:
    b = sess.run(generate)
    print(b)

这是代码的输出:

# output :
[9.604688  5.811516  6.4159    9.621765  0.5434954 4.1893444 5.8865128
 7.9785547 8.296125  8.388672 ]
[8.559105  3.2390785 6.447526  8.316823  1.6297233 1.4103293 2.647568
 2.954973  6.5975866 7.494894 ]
[2.0277488 6.6134906 0.7579422 4.6359386 6.97507   3.3192968 2.866236
 2.2205782 6.7940736 7.2391043]

我想要类似的东西

[9.604688  5.811516  6.4159    9.621765  0.5434954 4.1893444 5.8865128
 7.9785547 8.296125  8.388672 ]
[9.604688  5.811516  6.4159    9.621765  0.5434954 4.1893444 5.8865128
 7.9785547 8.296125  8.388672 ]
[9.604688  5.811516  6.4159    9.621765  0.5434954 4.1893444 5.8865128
 7.9785547 8.296125  8.388672 ]

更新1:事实上,我将种子初始值设定项放入 for 循环中的原因是因为我想以不同的方式设置它们(例如,将其视为不同的 MCMC 运行)。这是我的代码,可以完成这项工作,但我不确定它是否有效。基本上,我生成一些 0 到 2^32-1 之间的随机种子,并在每次运行中更改种子。任何有助于提高内存/RAM 效率的帮助或评论将不胜感激。

import numpy as np
import tensorflow as tf
global_seed = 42
N_chains = 5
np.random.seed(global_seed)
seeds = np.random.randint(0, 4294967295, size=N_chains)

for i in range(N_chains):
    tf.set_random_seed(seeds[i])
    .... some stuff ....
    kernel_initializer = tf.random_normal_initializer(seed=seeds[i])
    .... some stuff
    with tf.Session() as sess:
         .... some stuff .....
 .
 .
 .

在张量流中,随机操作依赖于两个不同的种子:全局种子,由下式设置tf.set_random_seed,以及一个操作种子,作为操作的参数提供。您将找到有关它们如何关联的更多详细信息在文档中.

每个随机操作都有不同的种子,因为每个随机操作都会维护自己的内部状态以生成伪随机数。让每个随机生成器保持自己的状态的原因是为了能够鲁棒地改变:如果它们共享相同的状态,那么在图中的某个位置添加一个新的随机生成器将改变所有其他生成器生成的值,从而违背了使用种子。

现在,为什么我们有这个全球的双轨制?and每次操作种子?嗯,实际上全局种子并不是必需的。它的存在是为了方便:它允许一次将所有随机操作种子设置为不同的确定性(如果未知)值,而不必详尽地遍历所有这些值。

现在,根据文档,当设置了全局种子而不是操作种子时,

系统确定性地选择操作种子和图级种子,以便获得唯一的随机序列。

更准确地说,提供的种子是当前图中创建的最后一个操作的 id。因此,全局种子随机操作对图中的变化极其敏感,特别是对其之前创建的变化。

例如,

import tensorflow as tf
tf.set_random_seed(1234)
generate = tf.random_uniform(())
with tf.Session() as sess:
  print(generate.eval())
  # 0.96046877

现在如果我们之前创建一个节点,结果就会改变:

import tensorflow as tf
tf.set_random_seed(1234)
tf.zeros(()) # new op added before 
generate = tf.random_uniform(())
with tf.Session() as sess:
  print(generate.eval())
  # 0.29252338

但是,如果在此之后创建节点,则不会影响操作种子:

import tensorflow as tf
tf.set_random_seed(1234)
generate = tf.random_uniform(())
tf.zeros(()) # new op added after
with tf.Session() as sess:
  print(generate.eval())
  # 0.96046877

显然,就像您的情况一样,如果您生成多个操作,它们将具有不同的种子:

import tensorflow as tf
tf.set_random_seed(1234)
gen1 = tf.random_uniform(())
gen2 = tf.random_uniform(())
with tf.Session() as sess:
  print(gen1.eval())
  print(gen2.eval())
  # 0.96046877
  # 0.85591054

出于好奇,为了验证种子只是图中最后使用的 id 这一事实,您可以对齐种子gen2 to gen1 with

import tensorflow as tf
tf.set_random_seed(1234)
gen1 = tf.random_uniform(())
# 4 operations seems to be created after seed has been picked
seed = tf.get_default_graph()._last_id - 4
gen2 = tf.random_uniform((), seed=seed)
with tf.Session() as sess:
  print(gen1.eval())
  print(gen2.eval())
  # 0.96046877
  # 0.96046877

但显然,这不应该通过代码审查。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 tf.set_random_seed 在 Tensorflow 中重现结果 的相关文章

  • Python 子进程(ffmpeg)仅在我按 Ctrl-C 程序时启动?

    我正在尝试使用 Cygwin 和 Python 2 7 并行运行一些 ffmpeg 命令 这大概是我所拥有的 import subprocess processes set commands ffmpeg i input mp4 outpu
  • pandas Wide_to_long 后缀参数

    我对在 pandas 中使用 Wide to long 时的参数有疑问 有一个参数叫suffix我不明白 在文档中它说 后缀 str 默认 d 捕获所需后缀的正则表达式 d 捕获数字后缀 没有数字的后缀可以用否定字符类 D 指定 您还可以进
  • 使用应用程序脚本将 MS Word 文件(保存在云端硬盘中)转换为 Google 文档

    我被某些事情困住了 找不到解决办法 有没有办法使用文件 url 或 id 将存储在 Google Drive 中的 MS Word 文件转换为 Google 文档 我目前有一个电子表格 其中包含文件的网址 或者 也可以使用 python 脚
  • 如何在 Google App Engine 的 Python 中获取 StringProperty 的值?

    如何获取 nbd Model 的值 我想返回由多个字段组成的描述 但我无法让它工作 这是我的班级代码 class User ndb Model name ndb StringProperty email ndb StringProperty
  • Python GTK + webkit - 在 gtk.main() 之后插入 JavaScript

    我在终端中尝试了这个 一切正常 但是如果我在脚本内运行这个 我无法在 gtk main 之后插入 JavaScript import gtk import webkit w gtk Window b webkit WebView w add
  • 最小二乘法拟合直线 python 代码

    我有一个由 X 和 Y 坐标组成的散点图 我想使用直线的最小二乘拟合来获得最佳拟合线 直线最小二乘拟合是指 如果 x 1 y 1 x n y n 是测量数据对 则最佳直线是y A Bx 这是我的Python代码 number of poin
  • Tipfy:如何在模板中显示blob?

    鉴于在 gae 上使用tipfy http www tipfy org python 以下模型 greeting avatar db Blob avatar 显示 blob 此处为图像 的模板标签是什么 在这种情况下 斑点是一个图像 这很棒
  • Paramiko SSHException 通道已关闭

    我一直在使用 Paramiko 在 Linux Windows 机器上发送命令 它可以很好地在 Ubuntu 机器上远程执行测试 但是 它不适用于 Windows 7 主机 以下是我收到的错误 def unit for event self
  • numpy:大量线段/点的快速规则间隔平均值

    我沿着一维线有许多 约 100 万个 不规则间隔的点 P 这些标记线段 这样 如果点是 0 x a x b x c x d 则线段从 0 gt x a x a gt x b x b gt x c x c gt x d 等 我还有每个段的 y
  • 如何在Python代码中查找列号

    简短问题 当按上述方式调用函数时 我可以找到行号here https stackoverflow com questions 3056048 filename and line number of python script 同样 如何找到
  • 如何使用 Celery 多工作人员启用自动缩放?

    命令celery worker A proj autoscale 10 1 loglevel info启动具有自动缩放功能的工作人员 当创建多个工人时 me mypc projects x celery multi start mywork
  • python dicttoxml 多次使用相同的键

    我正在尝试做如下所示的 xml
  • Python 导入非常慢 - Anaconda python 2.7

    我的 python import 语句变得非常慢 我使用 Anaconda 包在本地运行 python 2 7 导入模块后 我编写的代码运行得非常快 似乎只是导入需要很长时间 例如 我使用以下代码运行了一个 tester py 文件 imp
  • 如何使用 os.chdir 转到减去最后一步的路径?

    例如 一个方法传递了一个路径作为参数 这个路径可能是 C a b c d 如果我想使用 os chdir 更改为 C a b 怎么办 c 没有最后一个文件夹 os chdir 可以接受 命令吗 os chdir 可以采取 作为论点 是的 然
  • Python:无法使用 os.system() 打开文件

    我正在编写一个使用该应用程序的 Python 脚本pdftk http www pdflabs com tools pdftk the pdf toolkit 几次来执行某些操作 例如 我可以在 Windows 命令行 shell 中使用
  • 更新 SQLAlchemy 中的特定行

    我将 SQLAlchemy 与 python 一起使用 我想更新表中等于此查询的特定行 UPDATE User SET name user WHERE id 3 我通过 sql alchemy 编写了这段代码 但它不起作用 session
  • Streamlabs API 405 响应代码

    我正在尝试使用Streamlabs API https dev streamlabs com Streamlabs API 使用 Oauth2 来创建应用程序 因此 首先我将使用我的应用程序的用户发送到一个授权链接 其中包含我的应用程序的客
  • 在父类中访问子类变量

    我有一个父类和一个继承的子类 我想知道如何访问我的父类中的子类变量 我尝试了这个但失败了 class Parent object def init self print x class Child Parent x 1 x Child Er
  • 使用 SERVER_NAME 时出现 Flask 404

    在我的 Flask 配置中 我将 SERVER NAME 设置为 app example com 之类的域 我这样做是因为我需要使用url for with external网址 如果未设置 SERVER NAME Flask 会认为服务器
  • 在python中对列表列表执行行总和和列总和

    我想用python计算矩阵的行和和列和 但是 由于信息安全要求 我无法使用任何外部库 因此 为了创建矩阵 我使用了列表列表 如下所示 matrix 0 for x in range 5 for y in range 5 for pos in

随机推荐

  • Java 球衣 RESTful Web 服务请求

    我一直在关注有关宁静服务的教程 效果很好 不过 有些事情我还不太明白 它看起来是这样的 Path hello public class Hello This method is called if TEXT PLAIN is request
  • ftell/fseek 与 /sys/class 文件中实际可读数据长度不同

    嵌入式Linux系统 ls al sys class xxxx r r r 4096 ftell lstat st size 返回 4096 fread fp 1 4096 buf 返回 3 实际上 使用vi打开文件只有3个字节 有什么问题
  • [NSManagedObjectContext删除:]:无法识别的选择器发送到实例

    核心数据让我心烦意乱 我正在删除旧数据并希望插入从服务器收到的新数据 现在删除部分给出了 sigabort NSManagedObjectContext删除 无法识别的选择器发送到实例0x522f550 2013 09 27 14 05 5
  • 使用Sinon的假定时器时setTimeout未触发

    我有一个类似于下图所示的测试 基本上我想测试特定方法是否被延迟 以下示例按预期工作 即调用解析方法并且测试通过 it should delay execution by 1 second function const clock sandb
  • 类型错误:不可散列的类型

    我正在尝试获取元组列表的列表 类似 1 0 2 0 3 0 1 1 2 1 3 1 我用了这个声明 set a b for a in range 3 for b in range 3 但这给了我一个错误 TypeError unhashab
  • 使用 C#/.Net 时只读如何影响目录?

    我发现我可以写入 例如 将文件复制到 只读目录 也就是说 一个目录 Attributes FileAttributes ReadOnly 我什至可以改变它的名字 我发现唯一不能做的就是删除它 这真的是唯一的事情吗 ReadOnly防止 ED
  • DataGrid 重新定位将新行添加到顶部

    在 DataGridview 中 空白行添加条目很方便 但当列表很大时很快就会丢失 您可以将其默认位置从 DataGrid 视图的底部更改为顶部吗 我很少用过DataGrid并且对其添加行的能力一无所知 但从 WPF MVVM 的角度来看
  • 发现:所需单位:Int - 如何纠正这个问题?

    scala gt class Rectangle Length Int Width Int def getLlength Int println Length def getWidth Int println Width
  • 如何为 ASP.NET MVC 上的 GET 和 POST 操作绑定字典类型参数

    我想定义一个显示标签和复选框列表的视图 用户可以更改复选框 然后发回 我在回传字典时遇到问题 也就是说 post方法的字典参数为null 以下是 GET 和 POST 操作的操作方法 public ActionResult MasterEd
  • MEF WPF - 通过插件取消 Application.Current.Shutdown()

    有什么办法可以取消 Application Current Shutdown 背景 我玩了一下 mef 并将一些插件添加到我的主应用程序中 如果有任何插件调用 Application Current Shutdown 我的主应用程序也关闭了
  • 使用 android TimerTask 和 Timer 防止最终用户操纵计时器

    如何确保一项应在 Android 操作系统上运行 x 时间的任务在该 x 时间段内运行 而无需用户操纵日期和时间 例如 如果我希望这个计时器持续运行 24 小时 然后通知用户 24 小时已经过去 即使手机关闭一小时 用户也会将其重新打开并将
  • MS SQL 时态表更新失败

    我找不到任何东西来解释为什么当调用一个 SP 来根据临时表上是否已存在记录进行插入或更新时 我得到 系统版本表上的数据修改失败 MYDB dbo TemporalExample 因为事务时间早于 受影响记录的周期开始时间 这意味着什么剂量
  • 如何让 Google Apps 脚本服务的剩余每日邮件配额持续工作?

    我做了一个关于谷歌应用程序脚本的项目 用于在发送表单响应后发送自动电子邮件 但是 当我使用以下命令检查剩余电子邮件的每日配额时MailApp getRemainingDailyQuota 方法中 配额响应随每个脚本执行而变化 所以我创建了另
  • 创建通用的 angularjs listController

    Angular ui router 允许我解决可以在控制器中使用的不同注入 我创建了一个简单的通用 ListController 并在 ui router 中注入一个对象 其中包含特定于该特定视图的 CRUD 函数以及模板 举例来说 假设我
  • 更新 Firestore 中数组的映射数据 - Flutter

    我一直在尝试创建一个由 Google 的 Firebase 提供支持的演示 Schedule App 但我在更新特定值时遇到了一些困难具有映射值的数组在 Firestore 的一侧 如下图所示 我们想要实现什么 is onButtonPre
  • 由 Xcode 版本 13 构建的应用程序在 iOS 12 上崩溃

    我的应用程序在 iOS 15 和 14 上运行良好 也许在 13 上也运行良好 但是 当我在使用 iOS 12 的旧设备上运行时 即使在触发 didFinishLaunchingWithOptions 之前 它也会在启动时崩溃 上次我使用
  • 将当前日期时间插入审核表

    我正在实施审核日志来记录brief对数据库更改的描述 我的审核表由自动编号 PK empID 编号 说明 备忘录 和auditDate 日期 时间 组成 我的 empID 和描述已正确插入 不会引发错误 但我的日期 时间未插入 我想这可能不
  • jsTree 在创建节点后获取新节点

    我试图在用户编辑新节点的名称并按 Enter 键后获取新创建节点的文本值 当我这样做时 on create node jstree function e data var id data node id alert id text 我在警报
  • 同时按下鼠标和按键 Java Swing

    使用 Java Swing 我有 20 个JLabels Each JLabel has a MouseListener and a KeyListener 我一直在尝试想出一种方法 没有运气 来知道鼠标已进入 悬停在哪个标签以及何时按下删
  • 使用 tf.set_random_seed 在 Tensorflow 中重现结果

    我正在尝试生成 N 组独立的随机数 我有一个简单的代码 显示了 3 组 10 个随机数的问题 我注意到即使我使用tf set random seed设置种子 不同运行的结果看起来并不相似 非常感谢任何帮助或意见 py3p6 bash 3 2