Tensorflow 1.0训练模型使用指数级更多的空间

时间:2017-04-18 06:55:19

标签: python tensorflow

我使用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)

3 个答案:

答案 0 :(得分:0)

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

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

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

答案 1 :(得分:0)

为了防止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文件的代码部分就可以了。

答案 2 :(得分:0)

那是因为新生成的用于张量板的Graph文件。

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

注释掉这些行(如果在代码中找到它们的话,它将消失)。