【问题标题】:Tensorflow 1.0 training model uses exponentially more spaceTensorflow 1.0 训练模型使用成倍增加的空间
【发布时间】:2017-09-13 21:38:48
【问题描述】:

我正在使用 tensorflow 1.0 来训练 DNNRegressor。大多数训练已经由新的 tensorflow 1.0 功能自动处理。模型信息会自动保存在文件夹中。我使用 for 循环使用不同的训练文件反复调用 train(filepath, isAuthentic) 函数。

问题是 events.out.tfevents 文件越来越大,占用空间。我已经通过在生成这些文件时删除它们来解决这个问题,但是 CPU 仍然会逐渐浪费更多时间来尝试生成这些文件。这些不会影响训练或预测的结果。有没有办法阻止这些 events.out.tfevents 文件的生成?

我注意到,当我长时间运行 python 程序时,events.out.tfevents 文件大小开始变小,然后变大,但如果我运行几个较短间隔的训练,文件大小保持小。

picture of model folder, contents ordered by size

当我让训练运行足够长的时间时,events.out.tfevents 达到 200 MB 以上,浪费了大量时间和空间。我已经尝试更改传递给 DNNRegressor 的 RunConfig 对象中的检查点和摘要参数。

def getRegressor():
  feature_cols = [tf.contrib.layers.real_valued_column(k) for k in networkSetup.FEATURES]
  # Build 2 layer fully connected DNN with 8, 8 units respectively.
  regressor = tf.contrib.learn.DNNRegressor(feature_columns=feature_cols,
                                            hidden_units=[8, 8],
                                            model_dir=networkSetup.MODEL_DIR,
                                            activation_fn=tf.nn.sigmoid,
                                            optimizer=tf.train.GradientDescentOptimizer(
                                              learning_rate=0.001
                                            )
                                            )
  return regressor

def train(filepath, isAuthentic):
  regressor = getRegressor()
  # training on training set
  regressor.fit(input_fn=lambda: input_fn(filepath, isAuthentic), steps=1)

【问题讨论】:

    标签: python tensorflow


    【解决方案1】:

    .tfevents 文件包含由 fit 方法写入的事件。 DNNRegressor 为每个隐藏层至少保存直方图和零部分。您可以使用Tensorboard 来查看它们。

    Tensorflow 不会覆盖事件文件,而是附加到它们,因此更大的文件大小并不意味着更多的 CPU 周期。

    您可以将config 参数传递给DNNRegressor 构造函数(RunConfig 实例),并使用其save_summary_steps 属性指定您希望保存摘要的频率。默认是每100 步骤保存摘要。

    【讨论】:

      【解决方案2】:

      为防止 tensorflow 创建 events.out 文件,您只需在每次新用户训练模型时注释写入此文件的那部分代码。

      在所有模型中,主类中都有编写器来创建这些摘要/日志以进一步分析数据,尽管在许多情况下它没有用处。

      Tensorflow Inception 的“retrain.py”中的示例代码行:

      train_writer = tf.summary.FileWriter(FLAGS.summaries_dir + '/train',sess.graph)
      validation_writer = tf.summary.FileWriter(FLAGS.summaries_dir + '/validation')
      

      只需注释掉创建 events.out 文件的代码部分即可。

      【讨论】:

        【解决方案3】:

        这是因为 tensorboard 新生成了 Graph 文件。

        tfFileWriter = tf.summary.FileWriter(os.getcwd())
        tfFileWriter.add_graph(sess.graph)
        tfFileWriter.close()
        

        如果您在代码中找到这些行,请将它们注释掉,它会消失。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-08-16
          • 1970-01-01
          • 1970-01-01
          • 2017-05-15
          • 2022-01-22
          相关资源
          最近更新 更多