是否有可能在每个训练步骤中获得目标函数值?

2024-05-05

在通常的 TensorFlow 训练循环中,例如

train_op = tf.train.AdamOptimizer().minimize(cross_entropy)

with tf.Session() as sess:
    for i in range(num_steps):
        # ...
        train_op.run(feed_dict = feed_dict)

train_op.run回报None.

但是,有时收集中间结果很有用,例如目标的值或准确性。

添加额外的sess.run调用需要再次进行前向传播,从而增加运行时间:

train_op = tf.train.AdamOptimizer().minimize(cross_entropy)

with tf.Session() as sess:
    for i in range(num_steps):
        # ...
        o, a = sess.run([objective, accuracy], feed_dict = feed_dict)
        train_op.run(feed_dict = feed_dict)

是否可以在 TensorFlow 中一次性完成此操作?


Edit:

人们建议

sess.run([objective, accuracy, train_op], feed_dict = feed_dict)

但结果取决于列表元素的执行顺序:

[objective, accuracy, train_op]

这似乎是未定义的——根据是否使用 CUDA,您会得到不同的结果 https://stackoverflow.com/a/43858891/1937197.


只需添加您train_op到要评估的节点列表。

o, a, _ = sess.run([objective, accuracy, train_op], feed_dict = feed_dict)

关于训练步骤及其在评估中的顺序,我做了以下小实验:

import tensorflow as tf
x = tf.Variable(0, dtype=tf.float32)
loss = tf.nn.l2_loss(x-1)
train_opt = tf.train.GradientDescentOptimizer(1)
train_op = train_opt.minimize(loss)
init_op = tf.global_variables_initializer()

sess = tf.Session()
sess.run(init_op)
x_val, _, loss_val = sess.run([x, train_op, loss])
# returns x_val = 1.0, loss_val = 0.5

情况比我最初想象的还要混乱。似乎已知的是,提取的执行顺序并不取决于它们在列表中各自的位置:x_val and loss_val无论它们在列表中的位置如何,都将相同。

然而,正如 @MaxB 所注意到的,它们的执行顺序并不能得到保证。当上面的代码在GPU上运行时,x_val设置为 0.0,即初始值。然而,当在CPU上运行时,x_val为1.0,即值after更新自train_op.

正如上面的实验所示,这种依赖于配置的行为可能仅限于通过训练操作更新的变量,但不能保证它们来自 tf 的文档。

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

是否有可能在每个训练步骤中获得目标函数值? 的相关文章

随机推荐

  • 如何在 Android 中自定义进度条

    我正在开发一个应用程序 我想在其中展示ProgressBar 但我想替换默认的AndroidProgressBar 那么我该如何定制ProgressBar 我需要一些图形和动画吗 我阅读了以下帖子 但无法让它工作 Android自定义进度条
  • 有没有办法从 ANSI 转义字符创建橙色?

    我正在寻找一个控制代码来使用 ANSI 或其他标准在终端中创建橙色文本 这可能吗 我只看到黄色和红色可用 并且我认为您不能将红色和黄色混合用于同一角色 严格来说 不 ANSI 从未标准化任何被称为 橙色 的东西 对于终端的控制序列 有些终端
  • 为什么 CGPath 和 UIBezierPath 在 SpriteKit 中对“顺时针”的定义不同?

    在 SpriteKit 中 clockwise方向相反UIBezierPath但不是为了CGPath 例如 如果我有 do let path CGPathCreateMutable CGPathAddArc path nil 0 0 10
  • React router 如何点击查看详细组件

    我有两个组件 Car 和 CarDetails 我想用超链接 link 来显示 cars 组件中的所有汽车 当用户单击时 它应该将 carid param s 传递给 CarDetails 组件 App js import React Co
  • Python Pandas - “loc”和“where”之间的区别?

    只是对 where 的行为以及为什么要使用它而不是 loc 感到好奇 如果我创建一个数据框 df pd DataFrame ID 1 2 3 4 5 6 7 8 9 10 Run Distance 234 35 77 787 243 543
  • Visual Studio中设置“目标框架”有什么作用

    在 Visual Studio 中 您可以为项目设置 目标框架 或多或少的常识是 如果将 目标框架 设置为 例如 NET 4 5 2 则应用程序在仅安装了 NET 4 5 1 的计算机上将无法运行 第一个问题 这是真的吗 第二个问题 该设置
  • 该捆绑包在 Mac OS X 上无效

    我在将应用程序上传到应用程序商店时遇到问题 每次我将应用程序上传到苹果时 它都会显示 无效的二进制文件 因此我尝试在 Xcode Organizer 中验证存档的应用程序 但收到此错误 该捆绑包无效 Apple 目前不接受使用此版本 SDK
  • 根据给定的索引集获取参数包的子集

    好吧 这确实是一件困难的事情 我希望能够通过在给定的一组有效索引处选择参数类型来获取参数包的子集 然后使用该参数包作为函数的参数列表 IE template
  • React - Material-UI - 如何在react-hook-form中使用具有多个值的Select

    我正在尝试使用 UI 材质Select里面有多个选项react hook form没有成功 在尝试使用多种选项之前我已经完成了这项工作
  • cudaSetDevice() 对 CUDA 设备的上下文堆栈有何作用?

    假设我有一个与设备关联的活动 CUDA 上下文i 我现在打电话cudaSetDevice i 会发生什么 Nothing 主上下文取代了堆栈顶部 主上下文被压入堆栈 事实上 这似乎是不一致的 我编写了这个程序 在具有单个设备的机器上运行 i
  • java中的简单超时

    谁能指导我如何在java中使用简单的超时 基本上在我的项目中我正在执行一条语句br readLine 它正在读取调制解调器的响应 但有时调制解调器没有响应 为此 我想添加一个超时 我正在寻找类似的代码 try String s br rea
  • 图像增强 - 从书写中清除给定图像

    我需要清理这张照片 删除 清理我 的字样并使其变亮 作为图像处理课程作业的一部分 我可能会使用 matlab 函数 ginput 来查找图像中的特定点 当然 在脚本中您应该对所需的坐标进行硬编码 您可以使用 conv2 fft2 ifft2
  • 无法执行 script.sh:未知错误

    我想使用 DTrace 来查看 我的 shell 脚本进行了哪些系统调用 我做了一个非常简单的shell脚本 shell sh 并赋予它执行权限 bin bash grep 1 lt lt lt 123 I cd进入其目录 并运行这个简单的
  • BigInteger 没有自动装箱吗?

    在修复代码时这个问题 https stackoverflow com q 30938610 4271479 我意识到自动装箱并不适用于所有类型 此代码编译 Integer y 3 但做同样的事情BigInteger不编译 BigIntege
  • 纯 Fortran 过程中的 I/O

    我正在尝试将错误检查合并到我正在编写的纯过程中 我想要这样的东西 pure real function func1 output unit a implicit none integer a output unit if a lt 0 th
  • 如何使用UIPageViewController跳转到特定页面?

    我正在使用 Xcode 8 的默认基于页面的应用程序 并且我一直在尝试跳转到特定页面 而不是左右滑动来转动 我在 StackOverflow 上发现了类似的问题 但答案大多建议使用这种方法 setViewControllers direct
  • 如何在 SQLite 中返回多行插入的 id?

    给定一个表 CREATE TABLE Foo Id INTEGER PRIMARY KEY AUTOINCREMENT Name TEXT 如何使用以下命令返回同时插入的多行的 id INSERT INTO Foo Name VALUES
  • 使用准备好的语句设置表名称

    我正在尝试使用准备好的语句来设置表名以从中选择数据 但在执行查询时不断收到错误 错误和示例代码如下所示 Microsoft ODBC Microsoft Access Driver Parameter Pa RaM000 specified
  • 如何在C#中模拟鼠标点击?

    如何在 C winforms 应用程序中模拟鼠标点击 我结合了多个来源来生成我当前正在使用的下面的代码 我还删除了 Windows Forms 引用 以便我可以从控制台和 WPF 应用程序使用它 而无需其他引用 using System u
  • 是否有可能在每个训练步骤中获得目标函数值?

    在通常的 TensorFlow 训练循环中 例如 train op tf train AdamOptimizer minimize cross entropy with tf Session as sess for i in range n