【问题标题】:Tensorflow Slim debugging during training训练期间的 TensorFlow Slim 调试
【发布时间】:2017-01-26 07:48:45
【问题描述】:

我主要关注 this 的初始模型。假设我想在每个训练循环中打印批处理中使用的图像数据,即我想为每次训练迭代打印“图像”变量的值 “在一组不同的标签上微调模型。”代码,我该怎么做,因为会话实际上是在 slim.training.train 函数中创建的,因此我不能在没有 sess 的情况下执行 sess.run([images]) ?

【问题讨论】:

    标签: python machine-learning tensorflow neural-network deep-learning


    【解决方案1】:

    所以您想可视化训练图像?好吧,您可以在任何可以处理它们的地方添加图像摘要,例如在“在 Flowers 数据集上训练模型”下:

    images, _, labels = load_batch(dataset)
    tf.summary.image("input/images", images)
    

    【讨论】:

    • 这样每次都会覆盖之前的批量图片,如何根据迭代次数动态命名呢?
    • 我们可以追加图片而不是重写吗?
    • 有没有办法在运行时本身的会话期间计算图像时显示图像?问题是 sess 变量在此处无法访问,如您所见。它是在 slim.learning.train 函数中创建的
    【解决方案2】:

    使用以下脚本,您可以查看您的图像: summaries.add(tf.summary.image('image_tensor,max_images=15,name='images'))

    tf.summary.image 是最简单的方法,因为如前所述,会话操作是在slim.learning.train 内部创建的。虽然在代码中间可以使用interactivesession(),但是可能会干扰slim创建的会话!

    【讨论】:

      【解决方案3】:

      这两个先例的答案都非常适合精确地可视化图像。

      但是,如果您有兴趣打印任何其他变量值甚至图像的像素强度,您可以在调用 slim.learning.train 之前使用以下代码:

          variable = tf.get_default_graph().get_tensor_by_name("variable_name")
          train_tensor = tf.Print(train_tensor, [variable], text_to_print_before_value, summarize=number_of_values_to_print_if_array)
      

      第一行通过名称获取变量(例如,您可以通过 tensorboard 或打印 slim.get_model_variables() 来获取它)。

      第二行在计算 train_tensor 时打印它并返回 train_tensor 本身,以便将此 Print 节点添加到图中。

      从 Mobilenet 模型打印变量的示例:

          beta = tf.get_default_graph().get_tensor_by_name("MobilenetV1/Conv2d_12_pointwise/BatchNorm/beta:0")
          train_tensor = tf.Print(train_tensor, [beta], "beta ", summarize=256)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-09-10
        • 2017-06-10
        • 2017-01-19
        • 2017-06-15
        • 1970-01-01
        • 1970-01-01
        • 2017-01-22
        • 2017-01-13
        相关资源
        最近更新 更多