运行交叉验证时,Tensorflow保存的模型会变大

运行交叉验证时,Tensorflow保存的模型会变大,tensorflow,Tensorflow,在Tensorflow上运行交叉验证的正确方法是什么? 下面是我的代码片段: class TextCNN: ... def train(self): saver = tf.train.Saver(tf.all_variables()) with tf.Session() as sess: ... # training loop ... # training finished path = saver.save(s

在Tensorflow上运行交叉验证的正确方法是什么? 下面是我的代码片段:

class TextCNN:
  ...
  def train(self):
    saver = tf.train.Saver(tf.all_variables())
    with tf.Session() as sess:
      ...
      # training loop
      ...
      # training finished
      path = saver.save(sess, "{:s}/model.{:d}".format(self.checkpoint_dir, self.test_fold))

if __name__ == "__main__":
  for i in range(CV_SIZE):
    cnn = TextCNN(i)
    cnn.train()

折叠0的保存模型大小约为2M。但对于4米左右的折叠1,6米左右的折叠2,依此类推。

我的猜测是
TextCNN
构造函数和
train()
方法正在将节点添加到默认图()中,保存的模型包括所有以前的图,因此它是“意外二次型”的,并且随着
\uuuuu主循环的每次迭代而增长

幸运的是,解决方案很简单。只需按如下方式重写主循环:

if __name__ == "__main__":
  for i in range(CV_SIZE):
    with tf.Graph().as_default():  # Performs training in a new, empty graph.
      cnn = TextCNN(i)
      cnn.train()
这将为循环的每次迭代创建一个新的空图。因此,保存的模型将不包含来自上一次迭代的节点(和变量),并且模型大小应保持不变


请注意,如果可能,您应该尝试在所有迭代中重用相同的图。但是,我意识到,如果图的结构从一次迭代到下一次迭代,这可能是不可能的。

我猜
TextCNN
构造函数和
train()
方法正在向默认图()添加节点,并且保存的模型包含所有以前的图,因此它是“意外二次型”的并且随着
\uuuu主循环的每次迭代而增长

幸运的是,解决方案很简单。只需按如下方式重写主循环:

if __name__ == "__main__":
  for i in range(CV_SIZE):
    with tf.Graph().as_default():  # Performs training in a new, empty graph.
      cnn = TextCNN(i)
      cnn.train()
这将为循环的每次迭代创建一个新的空图。因此,保存的模型将不包含来自上一次迭代的节点(和变量),并且模型大小应保持不变

请注意,如果可能,您应该尝试在所有迭代中重用相同的图。然而,我意识到,如果图的结构从一个迭代到下一个迭代发生变化,这可能是不可能的