Я пытаюсь переобучить 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"]()]]
Как я могу это исправить?
Если я правильно помню, ошибка изменения формы возникает, когда файлы .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.
Самый полезный комментарий
Должен работать! Требуется изменить количество фильтров для последнего слоя по формуле `Filters = num * (#classes + 5).