Darkflow: InvalidArgumentError: входные данные для изменения формы - это тензор с 84500 значениями, но запрошенная форма требует кратного 5070

Созданный на 7 дек. 2017  ·  6Комментарии  ·  Источник: thtrieu/darkflow

Я пытаюсь переобучить tiny-yolo-voice, чтобы получить только объект person . Я использую в Windows с GTX 750 Ti. Я получал 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 не совпадают правильно. Способ чтения строк программы возвращает эту ошибку.

Мое предложение: если вы не возились с фильтрами во время обучения на собственном наборе данных, это, скорее всего, проблема с файлами .weights и .cfg, которые вы используете. Все полезные файлы .cfg уже находятся в папке .cfg, так что продолжайте загружать новые веса и повторять попытки. Те, которые, наконец, сработали для меня, были просто yolo.weights и yolo.cfg.

Должен работать! Требуется изменить количество фильтров для последнего слоя по формуле `Filters = num * (#classes + 5).

@lucasharada, что такое число в фильтрах = число * (# классы + 5).?

Нашел способ решить эту проблему. В моем случае я не заметил, что меняю фильтры не в том сверточном слое. Для обучения на собственных данных, помимо изменения количества классов, вам необходимо изменить ПОСЛЕДНИЙ сверточный слой в файле конфигурации.
@Estapraq num относится к атрибуту num в последнем слое конфигурационного файла: слое [регион]. Надеюсь это поможет

num - количество предшествующих якорей в yolo @Estapraq

@Estapraq Число в этом операторе можно найти в разделе [регион] в конце файла конфигурации. Для меня это было в строке 246 в yolo.cfg, где я видел, что num = 5.

Была ли эта страница полезной?
0 / 5 - 0 рейтинги