2016-06-17 8 views
0

Tensorflow seq2seq_model(https://www.tensorflow.org/versions/r0.9/tutorials/seq2seq/index.html)の使い方を学んでいます。私は、バケットが大にそれをリストアップするので、トレーニング中に、Tensorflowのseq2seq_modelに新しいバケットを追加する

seq2seq_model.Seq2SeqModel(..., listOfBuckets, ...)

への呼び出しは永遠にかかるという問題を抱えています。各バケットの境界を延長してリストを小さくしようとすると、model.step(..)への呼び出しには永遠の時間がかかります。

私の解決策は、すべての反復で新しいSeq2SeqModelを作成し、次の反復でSeq2SeqModelを初期化するために使用するファイルにパラメータを保存するループを作成することでした。それはそのようなことになります。

While cond: 
    with tf.Session() as sess: 
     model=seq2seq_model.Seq2SeqModel(..., listOfBuckets, ...) 
     ckpt = tf.train.get_checkpoint_state(training_dir) 
     if ckpt and tf.gfile.Exists(ckpt.model_checkpoint_path): 
      print("Reading model parameters from %s" %ckpt.model_checkpoint_path) 
      model.saver.restore(session, ckpt.model_checkpoint_path) 

     doSomething() 

     checkpoint_path = os.path.join(training_dir, "model.ckpt") 
     model.saver.save(sess, checkpoint_path,global_step=model.global_step) 

    listOfBuckets = someNewlistOfBuckets 

をしかし、これは私の質問は、(それが既に作成された後に)何度もそれを作成することなく、モデルに新しいバケットを追加する方法があるかどうかであるように、貧しいソリューションのようです再び。

ありがとうございました。

答えて

0

実際、バケットの作成にはしばらく時間がかかります。 TensorFlowにはダイナミックグラフが存在するため、基本的にすべてのバケットの単一のグラフを作成できます。しかし、これは大きなAPIの変更であり、まだseq2seqには行っていません。

一方、より大きなバケットを使用すると、ステップが大幅に遅くなるのは不思議です。通常、ステップの時間は線形であるため、2倍の大きさのバケットを使用すると、物事が約2倍遅くなります。次に、2の累乗に対してのみバケットを使用でき、非常に合理的なシステムを得ることができます。それを試しましたか?多分あなたの踏み台は他の理由で遅いですか?

関連する問題