如何在tf-slim中使用evaluation_loop和train_loop

2024-03-24

我正在尝试实现一些不同的模型并在 CIFAR-10 上训练它们,我想使用 TF-slim 来做到这一点。看起来 TF-slim 有两个在训练期间有用的主要循环:train_loop 和 evaluation_loop。

我的问题是:使用这些循环的规范方法是什么? 作为后续:是否可以使用 train_loop 提前停止?

目前我有一个模型,我的训练文件 train.py 看起来像这样

import ...
train_log_dir = ...

with tf.device("/cpu:0"):
  images, labels, dataset = set_up_input_pipeline_with_fancy_prefetching( 
                                                                subset='train', ... )
logits, end_points = set_up_model( images ) // Possibly using many GPUs
total_loss = set_up_loss( logits, labels, dataset )
optimizer, global_step = set_up_optimizer( dataset )
train_tensor = slim.learning.create_train_op( 
                                      total_loss, 
                                      optimizer,
                                      global_step=global_step,
                                      clip_gradient_norm=FLAGS.clip_gradient_norm,
                                      summarize_gradients=True)
slim.learning.train(train_tensor, 
                      logdir=train_log_dir,
                      local_init_op=tf.initialize_local_variables(),
                      save_summaries_secs=FLAGS.save_summaries_secs,
                      save_interval_secs=FLAGS.save_interval_secs)

到目前为止这非常棒——我的模型都训练和收敛得很好。我可以从事件中看到这一点train_log_dir所有指标都朝着正确的方向发展。朝着正确的方向前进让我很高兴。

但我想检查验证集上的指标是否也在改进。我不知道有什么方法可以与训练循环很好地配合 TF-slim,所以我创建了第二个文件,名为eval.py其中包含我的评估循环。

import ...
train_log_dir = ...

with tf.device("/cpu:0"):
  images, labels, dataset = set_up_input_pipeline_with_fancy_prefetching( 
                                                                subset='validation', ... )
logits, end_points = set_up_model( images )
summary_ops, names_to_values, names_to_updates = create_metrics_and_summary_ops( 
                                                                logits,
                                                                labels,
                                                                dataset.num_classes() )

slim.get_or_create_global_step()
slim.evaluation.evaluation_loop(
      '',
      checkpoint_dir=train_log_dir,
      logdir=train_log_dir,
      num_evals=FLAGS.num_eval_batches,
      eval_op=names_to_updates.values(),
      summary_op=tf.merge_summary(summary_ops),
      eval_interval_secs=FLAGS.eval_interval_secs,
      session_config=config)

问题:

1) 我目前有一个用于评估循环的模型,占用了整个 GPU,但很少使用。我认为有更好的方法来分配资源。如果我可以使用相同的评估循环来监视多个不同模型(多个目录中的检查点)的进度,那就太好了。这样的事情可能吗?

2)评估和培训之间没有反馈。我正在训练大量模型,并且希望使用提前停止来停止那些无法学习或无法收敛的模型。有没有办法做到这一点?理想情况下使用验证集中的信息,但如果它必须仅基于训练数据,也可以。

3)我的工作流程是否全部错误,我应该以不同的方式构建它?文档中并不清楚如何将评估与培训结合使用。

Update~~似乎从 TF r0.11 开始,我在调用时也遇到了段错误slim.evaluation.evaluation_loop。它只是有时发生(对我来说,当我将工作分配到集群时)。它发生在sv.managed_session- 具体来说prepare_or_wait_for_session.~~ 这只是由于评估循环(张量流的第二个实例)尝试使用 GPU,而 GPU 已被第一个实例占用。


  1. evaluation_loop 旨在与单个目录一起使用(正如您当前正在使用的那样)。如果您想提高效率,可以使用 slim.evaluation.evaluate_once 并添加适当的逻辑来交换您认为合适的目录。

  2. 您可以通过覆盖 slim.learning.train(..., train_step_fn) 参数来做到这一点。此参数用自定义函数替换“train_step”函数。在这里,您可以提供自定义训练函数,该函数返回您认为合适的“total_loss”和“should_stop”值。

  3. 您的工作流程看起来很棒,这可能是使用 TF-Slim 学习/评估的最常见工作流程。

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

如何在tf-slim中使用evaluation_loop和train_loop 的相关文章

  • 在 keras 中集成采样的 softmax 失败

    基于如何在 Keras 模型中使用 TensorFlow 的采样 softmax 损失函数 https stackoverflow com questions 47892380 how can i use tensorflows sampl
  • 安装tensorflow的正确命令

    当尝试在 Anaconda 上安装 Tensorflow 时 我尝试了两种类型的命令 conda install tensorflow gpu工作得很好 然而 当尝试conda install c anaconda tensorflow g
  • 在 Tensorflow 对象检测 API 中绘制验证损失

    我正在使用 Tensorflow 对象检测 API 来检测和定位图像中的一类对象 为了这些目的 我使用预先训练的faster rcnn resnet50 coco 2018 01 28 model 我想在训练模型后检测拟合不足 过度拟合 我
  • 如何在Tensorflow中保存估计器以供以后使用?

    我按照教程 TF Layers 指南 构建卷积神经网络 以下是代码 https github com tensorflow tensorflow blob r1 1 tensorflow examples tutorials layers
  • 张量流如何处理无法存储在一个盒子中的大变量

    我想通过训练超过十亿特征维度的数据来训练 DNN 模型 因此第一层权重矩阵的形状将为 1 000 000 000 512 这个权重矩阵太大 无法存储在一个盒子中 目前有没有什么解决方案来处理这么大的变量 例如将大的权重矩阵划分为多个框 Up
  • 阻止 TensorFlow 访问 GPU? [复制]

    这个问题在这里已经有答案了 有没有一种方法可以纯粹在CPU上运行TensorFlow 我机器上的所有内存都被运行 TensorFlow 的单独进程占用 我尝试将 per process memory fraction 设置为 0 但未成功
  • 在相同任务上,Keras 比 TensorFlow 慢

    我正在使用 Python 运行斩首 DCNN 本例中为 Inception V3 来获取图像特征 我使用的是 Anaconda Py3 6 和 Windows7 使用 TensorFlow 时 我将会话保存在变量中 感谢 jdehesa 并
  • TensorFlow:在训练时更改变量

    如果我将输入管道从 feed dict 更改为 tf data dataset 如何在每次迭代后的训练期间更改网络内参数的值 澄清一下 旧代码看起来像这样 Define Training Step model is some class t
  • 在张量流中向卷积神经网络提供可变大小的输入

    我正在尝试使用 feed dict 参数将不同大小的 2d numpy 数组列表传递给卷积神经网络 x tf placeholder tf float32 batch size None None None y tf placeholder
  • TensorFlow 无法编译

    尝试从源代码编译 TensorFlow 时出现以下错误 任何想法都会有帮助 bazel out host bin solib local U S Stensorflow Spython Cgen Unn Uops Upy Uwrappers
  • 默认情况下,Keras 自定义层参数是不可训练的吗?

    我在 Keras 中构建了一个简单的自定义层 并惊讶地发现参数默认情况下未设置为可训练 我可以通过显式设置可训练属性来使其工作 我无法通过查看文档或代码来解释为什么会这样 这是应该的样子还是我做错了什么导致默认情况下参数不可训练 代码 im
  • Tensorflow-GPU安装导入错误:DLL加载失败:找不到指定的模块

    好吧 我知道这可能已经回答了问题 但我已经尝试了 stackoverflow 上建议的几乎所有技巧来安装 tensorflow gpu 并在官方文档上建议 但没有运气 我遇到了同样的错误 首先我尝试过this https towardsda
  • 使用 tf.estimator.Estimator 加载检查点和微调

    我们正在尝试将旧的训练代码转换为更符合 tf estimator Estimator 的代码 在初始代码中 我们针对目标数据集微调原始模型 在使用以下组合进行训练之前 仅从检查点加载一些层要恢复的变量 and init fn与监控培训课程
  • MultiHeadAttention Attention_mask [Keras、Tensorflow] 示例

    我正在努力掩盖 MultiHeadAttention 层的输入 我正在使用 Keras 文档中的 Transformer Block 进行自我关注 到目前为止 我在网上找不到任何示例代码 如果有人能给我一个代码片段 我将不胜感激 变压器块来
  • 如何使用tensorFlow C++ API中的fileWrite摘要在Tensorboard中查看它

    无论如何 我是否可以获得与 FileWriter 相对应的张量名称 以便我可以写出我的摘要以在 Tensorboard 中查看它们 我的应用程序是基于C 的 所以我必须使用C 来进行训练 FileWriter 不是张量 import ten
  • 在按顺序读取的多个特征文件上训练 Keras 模型以节省内存

    当我尝试读取大量功能文件时 我遇到了内存问题 见下文 我想我应该分割训练文件并按顺序读取它们 做到这一点的最佳方法是什么 x train np load path features x train npy y train np load p
  • 将 Keras 集成到 SKLearn 管道?

    我有一个 sklearn 管道 对异构数据类型 布尔 分类 数字 文本 执行特征工程 并想尝试使用神经网络作为我的学习算法来拟合模型 我遇到了输入数据形状的一些问题 我想知道我想做的事情是否可能 或者我是否应该尝试不同的方法 我尝试了几种不
  • 在优化器期间保持变量不变

    我有一个损失张量 L 的 TensorFlow 计算图 它取决于 2 个 tf Variables A 和 B 我想在保持 B 固定的同时在变量 A 上运行梯度上升 A L 与 A 的梯度 反之亦然 在 B 上运行梯度上升 B L 与 B
  • “你好,TensorFlow!”使用 C API

    出于学习目的 如何使用 TensorFlow C API 编写此 Python 示例 import tensorflow as tf hello tf constant hello TensorFlow sess tf Session pr
  • 卷积神经网络 (CNN) 输入形状

    我是 CNN 的新手 我有一个关于 CNN 的问题 我对 CNN 特别是 Keras 的输入形状有点困惑 我的数据是不同时隙的二维数据 比方说10X10 因此 我有 3D 数据 我将把这些数据输入到我的模型中来预测即将到来的时间段 所以 我

随机推荐