2017-01-18 8 views
0

私はTensorflow seq2seq tutorialを使用して機械翻訳を再生しています。私はしばらくモデルを訓練し、元のボキャブに新しい言葉を補足してモデルの品質を向上させたいと決めているとします。トレーニングを一時停止したり、単語を語彙に追加したり、最新のチェックポイントからトレーニングを再開する方法はありますか?私はそうしようとしましたが、私は再びトレーニングを始めたとき、私はこのエラーを得た:Tensorflow seq2seq実行中にvocabに追加

Traceback (most recent call last): 
File "execute.py", line 405, in <module> 
train() 
File "execute.py", line 127, in train 
model = create_model(sess, False) 
File "execute.py", line 108, in create_model 
model.saver.restore(session, ckpt.model_checkpoint_path) 
File "/home/jrthom18/.local/lib/python2.7/site- packages/tensorflow/python/training/saver.py", line 1388, in restore 
{self.saver_def.filename_tensor_name: save_path}) 
File "/home/jrthom18/.local/lib/python2.7/site-packages/tensorflow/python/client/session.py", line 766, in run 
run_metadata_ptr) 
File "/home/jrthom18/.local/lib/python2.7/site-packages/tensorflow/python/client/session.py", line 964, in _run 
feed_dict_string, options, run_metadata) 
File "/home/jrthom18/.local/lib/python2.7/site-packages/tensorflow/python/client/session.py", line 1014, in _do_run 
target_list, options, run_metadata) 
File "/home/jrthom18/.local/lib/python2.7/site-packages/tensorflow/python/client/session.py", line 1034, in _do_call 
raise type(e)(node_def, op, message) 
tensorflow.python.framework.errors_impl.InvalidArgumentError: Assign requires shapes of both tensors to match. lhs shape= [384633] rhs shape= [384617] 
[[Node: save/Assign_82 = Assign[T=DT_FLOAT, _class=["loc:@proj_b"], use_locking=true, validate_shape=true, _device="/job:localhost/replica:0/task:0/cpu:0"](proj_b, save/RestoreV2_82)]] 

Caused by op u'save/Assign_82', defined at: 
File "execute.py", line 405, in <module> 
train() 
File "execute.py", line 127, in train 
model = create_model(sess, False) 
File "execute.py", line 99, in create_model 
model = seq2seq_model.Seq2SeqModel(gConfig['enc_vocab_size'], gConfig['dec_vocab_size'], _buckets, gConfig['layer_size'], gConfig['num_layers'], gConfig['max_gradient_norm'], gConfig['batch_size'], gConfig['learning_rate'], gConfig['learning_rate_decay_factor'], forward_only=forward_only) 
File "/home/jrthom18/data/3x256_bs32/easy_seq2seq/seq2seq_model.py", line 166, in __init__ 
self.saver = tf.train.Saver(tf.global_variables(), keep_checkpoint_every_n_hours=2.0) 
File "/home/jrthom18/.local/lib/python2.7/site-packages/tensorflow/python/training/saver.py", line 1000, in __init__ 
self.build() 
File "/home/jrthom18/.local/lib/python2.7/site-packages/tensorflow/python/training/saver.py", line 1030, in build 
restore_sequentially=self._restore_sequentially) 
File "/home/jrthom18/.local/lib/python2.7/site-packages/tensorflow/python/training/saver.py", line 624, in build 
restore_sequentially, reshape) 
File "/home/jrthom18/.local/lib/python2.7/site-packages/tensorflow/python/training/saver.py", line 373, in _AddRestoreOps 
assign_ops.append(saveable.restore(tensors, shapes)) 
File "/home/jrthom18/.local/lib/python2.7/site-packages/tensorflow/python/training/saver.py", line 130, in restore 
self.op.get_shape().is_fully_defined()) 
File "/home/jrthom18/.local/lib/python2.7/site-packages/tensorflow/python/ops/gen_state_ops.py", line 47, in assign 
use_locking=use_locking, name=name) 
File "/home/jrthom18/.local/lib/python2.7/site-packages/tensorflow/python/framework/op_def_library.py", line 759, in apply_op 
op_def=op_def) 
File "/home/jrthom18/.local/lib/python2.7/site-packages/tensorflow/python/framework/ops.py", line 2240, in create_op 
original_op=self._default_original_op, op_def=op_def) 
File "/home/jrthom18/.local/lib/python2.7/site-packages/tensorflow/python/framework/ops.py", line 1128, in __init__ 
self._traceback = _extract_stack() 

InvalidArgumentError (see above for traceback): Assign requires shapes of both tensors to match. lhs shape= [384633] rhs shape= [384617] 
[[Node: save/Assign_82 = Assign[T=DT_FLOAT, _class=["loc:@proj_b"], use_locking=true, validate_shape=true, _device="/job:localhost/replica:0/task:0/cpu:0"](proj_b, save/RestoreV2_82)]] 

は明らかに新しい単語が大きいので、テンソルのサイズが一致していません。これを回避する方法はありますか?

+0

私はあなたがシーケンスモデルがどのように動作するのかを理解する必要があると思います。 NMTのオープンボキャブラリーを扱う際にまだ開いている問題がある理由の辞書を単に置き換えることはできません。http://nlp.stanford.edu/projects/nmt/Luong-Cho-Manning-NMT-ACL2016- v4.pdf – alvas

+0

トレーニング中に辞書や語彙を途中で変更する方法についての講演や考えがありますが、実証済みの具体的な方法はまだありません。オープンボキャブラリの最先端技術は、トレーニングの前に特別な「ワードピースモデル」や「バイトペアエンコード」を行うことです。しかし、いったん語彙が設定されると、単語を交換したりリストに簡単に追加することはできません。 – alvas

答えて

0

あなたのボキャブを一度更新することはできませんが、共有ワードピースモデルはいつでも使用できます。それはあなたが直接ソースからターゲット出力にボキャブ・ワードをコピーするのに役立ちます。

関連する問題