2016-06-17 2 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의 제곱으로 만 사용할 수 있으며 매우 합리적인 시스템을 얻을 수 있습니다. 너 그거 해봤 니? 어쩌면 다른 이유로 느리게 걸릴 수 있습니까?