2016-03-29 6 views
0

Tensorflowでクロスバリデーションを実行する正しい方法は何ですか?折り目0用
クロスセービングを実行すると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() 

保存されたモデルのサイズは約2Mである: は、以下の私のコードスニペットです。しかし、4M周りの1倍、6M前後の2倍など。

答えて

3

私の推測では、TextCNNコンストラクタとtrain()方法は、(tf.get_default_graph())デフォルトのグラフにノードを追加すると、保存されたモデルは、以前のすべてのグラフで、それが「誤っ二次」と__main__ループの各反復で成長するということです。

解決策は簡単ですが、幸いです。メインループを次のように書き直してください:

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() 

これにより、ループの繰り返しごとに新しい空のグラフが作成されます。したがって、保存されたモデルには以前の反復からのノード(および変数)は含まれず、モデルサイズは一定のままでなければなりません。

可能であれば、すべての反復で同じグラフを再利用するようにしてください。しかし、グラフの構造がある反復から次の反復に変わると、これが可能ではないかもしれないことに気付きました。

関連する問題