Darkflow: InvalidArgumentError:形状変更への入力は84500値のテンソルですが、要求された形状には5070の倍数が必要です

作成日 2017年12月07日  ·  6コメント  ·  ソース: thtrieu/darkflow

tiny-yolo-vocを再トレーニングして、 personオブジェクトのみを取得しようとしています。 GTX 750Tiを搭載したWindowsで使用しています。 ResourceExhaustedErrorを取得していましたが、 --gpu 0.7--batch 4を使用したため、エラーはなくなりました。 今、私はリシェイプ関数に関連してこのエラーが発生しています。

Statistics:
person: 5227
Dataset size: 4952
Dataset of 4952 instance(s)
Training statistics:
        Learning rate : 1e-05
        Batch size    : 4
        Epoch number  : 1000
        Backup every  : 2000
2017-12-07 10:04:29.378250: W C:\tf_jenkins\home\workspace\rel-win\M\windows-gpu
\PY\35\tensorflow\core\common_runtime\bfc_allocator.cc:217] Allocator (GPU_0_bfc
) ran out of memory trying to allocate 1.15GiB. The caller indicates that this i
s not a failure, but may mean that there could be performance gains if more memo
ry is available.
2017-12-07 10:04:29.444254: W C:\tf_jenkins\home\workspace\rel-win\M\windows-gpu
\PY\35\tensorflow\core\common_runtime\bfc_allocator.cc:217] Allocator (GPU_0_bfc
) ran out of memory trying to allocate 2.29GiB. The caller indicates that this i
s not a failure, but may mean that there could be performance gains if more memo
ry is available.
Traceback (most recent call last):
  File "C:\Users\Lucas\Anaconda3\envs\tensorflow\lib\site-packages\tensorflow\py
thon\client\session.py", line 1323, in _do_call
    return fn(*args)
  File "C:\Users\Lucas\Anaconda3\envs\tensorflow\lib\site-packages\tensorflow\py
thon\client\session.py", line 1302, in _run_fn
    status, run_metadata)
  File "C:\Users\Lucas\Anaconda3\envs\tensorflow\lib\site-packages\tensorflow\py
thon\framework\errors_impl.py", line 473, in __exit__
    c_api.TF_GetCode(self.status.status))
tensorflow.python.framework.errors_impl.InvalidArgumentError: Input to reshape i
s a tensor with 84500 values, but the requested shape requires a multiple of 507
0
         [[Node: Reshape = Reshape[T=DT_FLOAT, Tshape=DT_INT32, _device="/job:lo
calhost/replica:0/task:0/device:GPU:0"](BiasAdd_8, Reshape/shape)]]
         [[Node: mul_17/_57 = _Recv[client_terminated=false, recv_device="/job:l
ocalhost/replica:0/task:0/device:CPU:0", send_device="/job:localhost/replica:0/t
ask:0/device:GPU:0", send_device_incarnation=1, tensor_name="edge_972_mul_17", t
ensor_type=DT_FLOAT, _device="/job:localhost/replica:0/task:0/device:CPU:0"]()]]


During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "flow", line 6, in <module>
    cliHandler(sys.argv)
  File "C:\tandera\yolo\darkflow\cli.py", line 29, in cliHandler
    print('Enter training ...'); tfnet.train()
  File "C:\tandera\yolo\darkflow\net\flow.py", line 52, in train
    fetched = self.sess.run(fetches, feed_dict)
  File "C:\Users\Lucas\Anaconda3\envs\tensorflow\lib\site-packages\tensorflow\py
thon\client\session.py", line 889, in run
    run_metadata_ptr)
  File "C:\Users\Lucas\Anaconda3\envs\tensorflow\lib\site-packages\tensorflow\py
thon\client\session.py", line 1120, in _run
    feed_dict_tensor, options, run_metadata)
  File "C:\Users\Lucas\Anaconda3\envs\tensorflow\lib\site-packages\tensorflow\py
thon\client\session.py", line 1317, in _do_run
    options, run_metadata)
  File "C:\Users\Lucas\Anaconda3\envs\tensorflow\lib\site-packages\tensorflow\py
thon\client\session.py", line 1336, in _do_call
    raise type(e)(node_def, op, message)
tensorflow.python.framework.errors_impl.InvalidArgumentError: Input to reshape i
s a tensor with 84500 values, but the requested shape requires a multiple of 507
0
         [[Node: Reshape = Reshape[T=DT_FLOAT, Tshape=DT_INT32, _device="/job:lo
calhost/replica:0/task:0/device:GPU:0"](BiasAdd_8, Reshape/shape)]]
         [[Node: mul_17/_57 = _Recv[client_terminated=false, recv_device="/job:l
ocalhost/replica:0/task:0/device:CPU:0", send_device="/job:localhost/replica:0/t
ask:0/device:GPU:0", send_device_incarnation=1, tensor_name="edge_972_mul_17", t
ensor_type=DT_FLOAT, _device="/job:localhost/replica:0/task:0/device:CPU:0"]()]]


Caused by op 'Reshape', defined at:
  File "flow", line 6, in <module>
    cliHandler(sys.argv)
  File "C:\tandera\yolo\darkflow\cli.py", line 22, in cliHandler
    tfnet = TFNet(FLAGS)
  File "C:\tandera\yolo\darkflow\net\build.py", line 76, in __init__
    self.setup_meta_ops()
  File "C:\tandera\yolo\darkflow\net\build.py", line 139, in setup_meta_ops
    if self.FLAGS.train: self.build_train_op()
  File "C:\tandera\yolo\darkflow\net\help.py", line 15, in build_train_op
    self.framework.loss(self.out)
  File "C:\tandera\yolo\darkflow\net\yolov2\train.py", line 56, in loss
    net_out_reshape = tf.reshape(net_out, [-1, H, W, B, (4 + 1 + C)])
  File "C:\Users\Lucas\Anaconda3\envs\tensorflow\lib\site-packages\tensorflow\py
thon\ops\gen_array_ops.py", line 3937, in reshape
    "Reshape", tensor=tensor, shape=shape, name=name)
  File "C:\Users\Lucas\Anaconda3\envs\tensorflow\lib\site-packages\tensorflow\py
thon\framework\op_def_library.py", line 787, in _apply_op_helper
    op_def=op_def)
  File "C:\Users\Lucas\Anaconda3\envs\tensorflow\lib\site-packages\tensorflow\py
thon\framework\ops.py", line 2956, in create_op
    op_def=op_def)
  File "C:\Users\Lucas\Anaconda3\envs\tensorflow\lib\site-packages\tensorflow\py
thon\framework\ops.py", line 1470, in __init__
    self._traceback = self._graph._extract_stack()  # pylint: disable=protected-
access

InvalidArgumentError (see above for traceback): Input to reshape is a tensor wit
h 84500 values, but the requested shape requires a multiple of 5070
         [[Node: Reshape = Reshape[T=DT_FLOAT, Tshape=DT_INT32, _device="/job:lo
calhost/replica:0/task:0/device:GPU:0"](BiasAdd_8, Reshape/shape)]]
         [[Node: mul_17/_57 = _Recv[client_terminated=false, recv_device="/job:l
ocalhost/replica:0/task:0/device:CPU:0", send_device="/job:localhost/replica:0/t
ask:0/device:GPU:0", send_device_incarnation=1, tensor_name="edge_972_mul_17", t
ensor_type=DT_FLOAT, _device="/job:localhost/replica:0/task:0/device:CPU:0"]()]]

どうすればこれを修正できますか?

最も参考になるコメント

仕事に取り掛かりました! 式 `filters = num *(#classes + 5)を使用して、最後のレイヤーのフィルターの数を変更する必要があります。

全てのコメント6件

私の記憶が正しければ、形状変更エラーは、.weightsファイルと.cfgファイルが正しく整列されていない場合です。 prografas行の読み取り方法では、このエラーが返されます。

私の提案:自分のデータセットでトレーニングしているときにフィルターをいじっていない限り、これは使用している.weightsファイルと.cfgファイルに問題がある可能性があります。 便利な.cfgファイルはすべてすでに.cfgフォルダーにあるので、新しいウェイトをダウンロードして再試行してください。最終的に機能したのは、単にyolo.weightsとyolo.cfgでした。

仕事に取り掛かりました! 式 `filters = num *(#classes + 5)を使用して、最後のレイヤーのフィルターの数を変更する必要があります。

@lucasharadaフィルターのnumとは= num *(#classes + 5)。?

それを解決する方法を見つけました。 私の場合、間違った畳み込み層のフィルターを変更していることに気づきませんでした。 独自のデータでトレーニングするには、クラスの数を変更するだけでなく、構成ファイルの最後の畳み込み層を変更する必要があります。
@Estapraq numは、構成ファイルの最後のレイヤーである[region]レイヤーの属性num

numは、yolo @ Estapraqの以前のアンカーの数です。

@Estapraqそのステートメントのnumは、構成ファイルの最後の[region]セクションにあります。 私の場合、これはyolo.cfgの246行目にあり、num = 5でした。

このページは役に立ちましたか?
0 / 5 - 0 評価