当前位置: 首页 > 知识库问答 >
问题:

在Tensorflow估计器中,如何获得列车损失并评估每个全局步骤的损失?

充小云
2023-03-14

我每一步都能得到训练损失。但我确实想在tensorboard中的图'lossxx'中添加评估损失。怎么做?

  class MyHook(tf.train.SessionRunHook):
    def after_run(self,run_context,run_value):
      _session = run_context.session
      _session.run(_session.graph.get_operation_by_name('acc_op'))

  def my_model(features, labels, mode):
    ...
    logits = tf.layers.dense(net, 3, activation=None)
    predicted_classes = tf.argmax(logits, 1)
    if mode == tf.estimator.ModeKeys.PREDICT:
      predictions = {
        'class': predicted_classes,
        'prob': tf.nn.softmax(logits)
      }
      return tf.estimator.EstimatorSpec(mode, predictions=predictions)

    # Compute loss.
    loss = tf.losses.sparse_softmax_cross_entropy(labels=labels, logits=logits)
    acc, acc_op = tf.metrics.accuracy(labels=labels,   predictions=predicted_classes)
    tf.identity(acc_op,'acc_op')
    loss_sum = tf.summary.scalar('lossxx',loss)
    accuracy_sum = tf.summary.scalar('accuracyxx',acc)
    merg = tf.summary.merge_all()

    # Create training op.
    if mode == tf.estimator.ModeKeys.TRAIN:
      optimizer = tf.train.AdagradOptimizer(learning_rate=0.1)
      train_op = optimizer.minimize(loss,  global_step=tf.train.get_global_step())
      return tf.estimator.EstimatorSpec(mode, loss=loss, train_op=train_op,
                                      training_chief_hooks=[
                                            tf.train.SummarySaverHook(save_steps=10, output_dir='./model', summary_op=merg)])

    return tf.estimator.EstimatorSpec(
        mode, loss=loss, eval_metric_ops={'accuracy': (acc, acc_op)}
    )


  classifier.train(input_fn=train_input_fn, steps=1000,hooks=[ MyHook()])

共有2个答案

越星晖
2023-03-14

您需要通过使用tf.estimator.train_and_evaluate将评估数据与训练数据一起传递给模型

唐运诚
2023-03-14

实际上,您不需要自己创建一个SummarySaverHook,因为它已经包含在tf中。估计员。估计器。只需使用tf创建您想要的所有摘要。总结xxx并且每个n步骤都将对其进行评估。(请参见tf.estimator.RunConfig)。

此外,您无需为最终损失创建摘要损失。这也将自动为您创建。如果您这样做,那么培训和评估摘要将显示在TensorBoard上的相同图表中。估计器在您当前的model\u dir中创建一个子目录eval,以实现此目的。

还有一个小提示:直接在摘要中使用acc_op来更新度量值并获取它的值。但是,tf.metrics函数相当难处理;-)

 类似资料:
  • 我有一个ResNet-8网络,我正在用于图像上的域适应项目,基本上我已经在数据集上训练了网络,现在我想在另一个模拟实时环境的数据集上评估它,我试图一次预测一个图像,但有趣的部分来了: 我想对目标数据集进行评估的方法是,对每幅图像,在训练模式下向前传递,以便更新批次规范层统计信息(使用torch.no\u grad(),因为我不想更新网络参数,而只想“适应”批次规范层),然后在评估模式下进行另一次前

  • 我想在每个n批次之后输出它,而不是在每个纪元打印评估损失。 我每个时代大约有15万批。我想每50000批输出一次评估损失。 这可能吗?我正在使用pytorch和huggingface的预训练bert模型。 我的列车循环:

  • 问题内容: 我正在尝试从Rhino书中学习JavaScript。我试图执行本书中有关的以下代码。我正在使用node.js(v0.10.29)执行示例。 但是,当尝试使用别名时,我在函数内部得到了提示: 据我了解,当我别名为,通过在字符串中的代码在全球范围内按ES5进行评估。但是,我遇到了,无法理解原因。 尽管我不认为这是关键功能,但我绝对想了解为什么我会遇到这种行为。 PS:当我尝试在Google

  • 本文向大家介绍TensorFlow如何用于定义损失函数,优化器,训练模型并在Python中的IMDB数据集上对其进行评估?,包括了TensorFlow如何用于定义损失函数,优化器,训练模型并在Python中的IMDB数据集上对其进行评估?的使用技巧和注意事项,需要的朋友参考一下 Tensorflow是Google提供的一种机器学习框架。它是一个开放源代码框架,可与Python结合使用,以实现算法,

  • 我正在谷歌 colab 环境中的 tensorflow 中训练一个 DNN,代码直到昨天都运行良好,但现在当我运行代码的估计器训练部分时,它给出了一个错误。 我不知道到底是什么原因,谷歌colab是否使用任何更新版本的tensorflow,其中某些函数与旧版本不兼容?因为我之前的代码没有问题,我没有改变它。似乎其他代码也存在此问题,例如,斯坦福大学的此示例代码之前运行没有任何错误,https://

  • 问题内容: 假设我具有以下参数的网络: 全卷积网络的语义分割 损失=加权二进制交叉熵(但可以是任何损失函数,都没有关系) 5类-输入是图像,地面真理是二进制掩码 批次大小= 16 现在,我知道损耗是通过以下方式计算的:关于每个类别,将二进制交叉熵应用于图像中的每个像素。因此,基本上每个像素都有5个损耗值 此步骤后会发生什么? 当我训练我的网络时,它只显示一个时期的单个损失值。产生单个值需要发生许多