Neural network Tensorflow tf.train.Saver是否保存可疑的大.ckpt文件?

Neural network Tensorflow tf.train.Saver是否保存可疑的大.ckpt文件?,neural-network,tensorflow,conv-neural-network,Neural Network,Tensorflow,Conv Neural Network,我正在使用一个大小合理的网络(1个卷积层,2个完全连接的层)。每次我使用tf.train.Saver保存变量时,.ckpt文件的每个磁盘空间为半GB(确切地说是512 MB)。这正常吗?我有一个具有相同体系结构的Caffe网络,它只需要一个7MB的.caffemodel文件。Tensorflow保存如此大的文件大小有什么特别的原因吗 非常感谢。根据您所描述的,很难判断您的网络有多大——两个完全连接的层之间的连接数量随每层的大小呈二次方增长,因此,根据完全连接的层的大小,您的网络可能相当大 如果要

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


非常感谢。

根据您所描述的,很难判断您的网络有多大——两个完全连接的层之间的连接数量随每层的大小呈二次方增长,因此,根据完全连接的层的大小,您的网络可能相当大

如果要在检查点文件中节省空间,可以替换此行:

saver=tf.train.saver()

以下是:

saver=tf.train.saver(tf.trainable\u variables())

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

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

它不保存元图信息。 见:

通常只保存
tf.global\u variables()
(这是
tf.get\u集合(tf.GraphKeys.global\u variables)的缩写)
,即全局变量的集合)。此集合旨在包含恢复模型状态所需的变量,因此,诸如批次标准化的当前移动平均值、全局步骤、优化器的状态,当然还有
tf.GraphKeys.TRAINABLE_变量
集合。更具临时性的变量(如梯度)收集在
局部变量中,通常不需要存储它们,它们可能会占用大量磁盘空间。

您能否分享模型体系结构的更多细节,理想情况下,以一组
tf.Variable
声明的形式出现?但缺点是您必须首先手动创建变量,然后才能恢复它们。否则它将报告错误,因为它找不到合适的变量。您是说tensorflow1.0将模型保存为小型吗?因为我使用的是tensorflow 1.3,所以模型的大小能比我保存的tensorflow 1.0大吗……嗨,我想知道,如果网络包含BN层,我该怎么办?因为均值和方差是变量,但它们是不可训练的。如果我只保存tf.tf.trainable_variables(),当我恢复模型时,tensorflow找不到BN平均参数。。。。。。
saver.save(sess, filename, write_meta_graph=False)