2017-02-02 7 views
0

訓練されたモデルを評価用に復元しようとしたときにエラーが発生しましたが、テストセットを評価するときにのみエラーが発生します。エラーがある:LHS形状= [2325,11]とRHS形状= [4891,11]はテストセットとトレーニング・セット内の4891枚の画像で2325枚の画像に対応すること評価のために訓練されたモデルを復元するときにTensorflowエラーが発生しました。形状が無効ですか?

InvalidArgumentError: Assign requires shapes of both tensors to match. lhs shape= [2325,11] rhs shape= [4891,11] 

注意。 11は11クラスのワンホットエンコーディングです - これらはおそらくラベルに対応しています。トレーニングセットで評価を実行すると、ディメンションは一致し、エラーは発生しません。助けていただければ幸いです!

以下のフルスタックトレース:

Traceback (most recent call last): 
    File "eval.py", line 75, in <module> 
    main() 
    File "eval.py", line 70, in main 
    acc_annotation, acc_retrieval = evaluate(partition="test") 
    File "eval.py", line 34, in evaluate 
    restorer.restore(sess, tf.train.latest_checkpoint(SAVED_MODEL_DIR)) 
    File "/usr/local/lib/python2.7/site-packages/tensorflow/python/training/saver.py", line 1388, in restore 
    {self.saver_def.filename_tensor_name: save_path}) 
    File "/usr/local/lib/python2.7/site-packages/tensorflow/python/client/session.py", line 766, in run 
    run_metadata_ptr) 
    File "/usr/local/lib/python2.7/site-packages/tensorflow/python/client/session.py", line 964, in _run 
    feed_dict_string, options, run_metadata) 
    File "/usr/local/lib/python2.7/site-packages/tensorflow/python/client/session.py", line 1014, in _do_run 
    target_list, options, run_metadata) 
    File "/usr/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= [2325,11] rhs shape= [4891,11] 
    [[Node: save/Assign_5 = Assign[T=DT_FLOAT, _class=["loc:@input/Variable_1"], use_locking=true, validate_shape=true, _device="/job:localhost/replica:0/task:0/cpu:0"](input/Variable_1, save/RestoreV2_5)]] 

Caused by op u'save/Assign_5', defined at: 
    File "eval.py", line 75, in <module> 
    main() 
    File "eval.py", line 70, in main 
    acc_annotation, acc_retrieval = evaluate(partition="test") 
    File "eval.py", line 25, in evaluate 
    restorer = tf.train.Saver() # For saving the model 
    File "/usr/local/lib/python2.7/site-packages/tensorflow/python/training/saver.py", line 1000, in __init__ 
    self.build() 
    File "/usr/local/lib/python2.7/site-packages/tensorflow/python/training/saver.py", line 1030, in build 
    restore_sequentially=self._restore_sequentially) 
    File "/usr/local/lib/python2.7/site-packages/tensorflow/python/training/saver.py", line 624, in build 
    restore_sequentially, reshape) 
    File "/usr/local/lib/python2.7/site-packages/tensorflow/python/training/saver.py", line 373, in _AddRestoreOps 
    assign_ops.append(saveable.restore(tensors, shapes)) 
    File "/usr/local/lib/python2.7/site-packages/tensorflow/python/training/saver.py", line 130, in restore 
    self.op.get_shape().is_fully_defined()) 
    File "/usr/local/lib/python2.7/site-packages/tensorflow/python/ops/gen_state_ops.py", line 47, in assign 
    use_locking=use_locking, name=name) 
    File "/usr/local/lib/python2.7/site-packages/tensorflow/python/framework/op_def_library.py", line 759, in apply_op 
    op_def=op_def) 
    File "/usr/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 "/usr/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= [2325,11] rhs shape= [4891,11] 
    [[Node: save/Assign_5 = Assign[T=DT_FLOAT, _class=["loc:@input/Variable_1"], use_locking=true, validate_shape=true, _device="/job:localhost/replica:0/task:0/cpu:0"](input/Variable_1, save/RestoreV2_5)]] 

更新

私は、チェックポイントファイルからテンソル形状に見て、セーバーがモデルにしても入力を保存していたように見えます。チェックポイントからのモデル入力(ラベルや画像を)排除するためにどのように私は私のトレーニングのコードを再設定するか、そうでなければ把握する必要があります:

('tensor_name: ', 'conv2-layer/bias/Adam_1') 
(512,) 
('tensor_name: ', 'input/Variable_1') 
(4891, 11) 
('tensor_name: ', 'conv2-layer/weights_1/Adam') 
(5, 1, 64, 512) 
('tensor_name: ', 'conv1-layer/weights_1') 
(5, 23, 1, 64) 
('tensor_name: ', 'conv2-layer/weights_1') 
(5, 1, 64, 512) 
('tensor_name: ', 'conv2-layer/weights_1/Adam_1') 
(5, 1, 64, 512) 
('tensor_name: ', 'input/Variable') 
(4891, 100, 23, 1) 
('tensor_name: ', 'conv1-layer/weights_1/Adam_1') 
(5, 23, 1, 64) 
('tensor_name: ', 'conv1-layer/bias/Adam') 
(64,) 
('tensor_name: ', 'beta2_power') 
() 
('tensor_name: ', 'conv2-layer/bias/Adam') 
(512,) 
('tensor_name: ', 'conv1-layer/bias/Adam_1') 
(64,) 
('tensor_name: ', 'conv2-layer/bias') 
(512,) 
('tensor_name: ', 'conv1-layer/bias') 
(64,) 
('tensor_name: ', 'beta1_power') 
() 
('tensor_name: ', 'conv1-layer/weights_1/Adam') 
(5, 23, 1, 64) 
('tensor_name: ', 'Variable') 
() 

答えて

1

それはあなたのモデルを定義するコードを見ることが有用であろう。しかし、あなたが入力をtf.Variableとして定義したように見えるからです。変数は、損失関数を最小限に抑えるためにオプティマイザが変更できる値です。変数はモデルの学習重みです.Tensorflowは後で復元できるようにそれらを保存しています。

tf.Placeholderを使用して入力データをグラフに入力する必要があります。

+0

はい、それはまさにそれでした。あなたがhttp://stackoverflow.com/questions/37091899/how-to-actually-read-csv-data-in-tensorflowから手順に従うことで、私はそれを修正しました。 – kashkar

関連する問題