【问题标题】:Tensorflow tf.train.Saver saves suspiciously large .ckpt files?Tensorflow tf.train.Saver 保存可疑的大 .ckpt 文件?
【发布时间】:2016-02-11 06:42:52
【问题描述】:

我正在使用一个大小合理的网络(1 个卷积层,2 个全连接层)。每次我使用tf.train.Saver 保存变量时,.ckpt 文件的每个磁盘空间都是半 GB(准确地说是 512 MB)。这是正常的吗?我有一个架构相同的 Caffe 网络,只需要一个 7MB .caffemodel 文件。 Tensorflow 保存如此大的文件有什么特别的原因吗?

非常感谢。

【问题讨论】:

  • 您能否分享您的模型架构的更多细节,最好是以一组tf.Variable 声明的形式?

标签: neural-network tensorflow conv-neural-network


【解决方案1】:

根据您的描述很难判断您的网络有多大 - 两个完全连接的层之间的连接数量与每层的大小成二次方相关,因此您的网络可能非常大,具体取决于你的全连接层。

如果你想节省检查点文件的空间,你可以替换这一行:

saver = tf.train.Saver()

以下内容:

saver = tf.train.Saver(tf.trainable_variables())

默认情况下,tf.train.Saver() 将所有变量保存在图表中——包括优化器创建的用于累积梯度信息的变量。告诉它只保存 可训练 变量意味着它将只保存网络的权重和偏差,并丢弃累积的优化器状态。您的检查点可能会小很多,但在您恢复训练后,您可能会在前几个训练批次中经历较慢的训练,而优化器会重新累积梯度信息。恢复速度并不需要很长时间,根据我的经验,就我个人而言,我认为对于较小的检查站来说,这种折衷是值得的。

【讨论】:

  • 你好,我想知道,如果网络包含BN层,我该怎么办?因为均值和方差是变量,但它们是不可训练的。如果我只保存tf.tf.trainable_variables(),当我恢复模型时,tensorflow找不到BN均值参数……
【解决方案2】:

也许你可以试试(在 Tensorflow 1.0 中):

saver.save(sess, filename, write_meta_graph=False)

不保存元图信息。 看: https://www.tensorflow.org/versions/master/api_docs/python/tf/train/Saver https://www.tensorflow.org/programmers_guide/meta_graph

【讨论】:

  • 但缺点是您必须先手动创建变量,然后才能恢复它们。否则会报错,因为找不到合适的变量。
  • 你的意思是tensorflow1.0保存模型小吗?因为我用的是tensorflow 1.3,能不能模型大小比我保存的tensorflow1.0大……
【解决方案3】:

通常您只保存tf.global_variables()(这是tf.get_collection(tf.GraphKeys.GLOBAL_VARIABLES) 的简写,即全局变量的集合)。该集合旨在包括恢复模型状态所必需的变量,例如用于批量标准化的当前移动平均值、全局步骤、优化器的状态,当然还有tf.GraphKeys.TRAINABLE_VARIABLES 集合.更临时性质的变量,例如渐变,收集在LOCAL_VARIABLES 中,通常不需要存储它们,它们可能会占用大量磁盘空间。

【讨论】:

    猜你喜欢
    • 2016-10-20
    • 2018-12-03
    • 2019-12-05
    • 1970-01-01
    • 2018-01-11
    • 2020-05-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多