Последовательный конвейер ввода сериализованной строки Neural Network терпит неудачу во второй эпохе - PullRequest
0 голосов
/ 08 февраля 2020

Я реализовал нейронную сеть в Python, используя Tensorflow. Нейронная сеть снабжается данными, поступающими из входного конвейера. Для этого данные предварительно сериализуются в строку и сохраняются в файл .tfrecords:

writer = tf.python_io.TFRecordWriter(path + subfolder + '.tfrecords') ... message = tf.train.Example(features=tf.train.Features(feature={'pclRaw': _bytes_feature(clRaw),...}) writer.write(message.SerializeToString())

Во время обучения данные из файла .tfrecords считываются обратно в очередь поездов. как таковой:

train_queue = tf.train.string_input_producer([...], num_epochs=400)

Первая эпоха работает нормально, и у меня нет проблем. Однако во второй эпохе после того, как несколько партий были пропущены через net, я сталкиваюсь со следующей ошибкой:

2020-02-08 04:20:02.611557: W tensorflow/core/kernels/queue_base.cc:277] _0_trainPipe/input_producer: Skipping cancelled enqueue attempt with queue not closed
Traceback (most recent call last):
  File "train.py", line 133, in <module>
    label, learning_rate])
  File "/Users/Matthias/Workspaces/PyCharm/000_Virtual Environments/venv-tensorflow-py2.7.10/lib/python2.7/site-packages/tensorflow/python/client/session.py", line 950, in run
    run_metadata_ptr)
  File "/Users/Matthias/Workspaces/PyCharm/000_Virtual Environments/venv-tensorflow-py2.7.10/lib/python2.7/site-packages/tensorflow/python/client/session.py", line 1173, in _run
    feed_dict_tensor, options, run_metadata)
  File "/Users/Matthias/Workspaces/PyCharm/000_Virtual Environments/venv-tensorflow-py2.7.10/lib/python2.7/site-packages/tensorflow/python/client/session.py", line 1350, in _do_run
    run_metadata)
  File "/Users/Matthias/Workspaces/PyCharm/000_Virtual Environments/venv-tensorflow-py2.7.10/lib/python2.7/site-packages/tensorflow/python/client/session.py", line 1370, in _do_call
    raise type(e)(node_def, op, message)
tensorflow.python.framework.errors_impl.OutOfRangeError: FIFOQueue '_1_testPipe/input_producer' is closed and has insufficient elements (requested 1, current size 0)
     [[node testPipe/ReaderReadV2 (defined at /Users/Matthias/Workspaces/PyCharm/GeneralizedConvolutionalNeuralNetsEdges/input_pipelines.py:36) ]]

Errors may have originated from an input operation.
Input Source operations connected to node testPipe/ReaderReadV2:
 testPipe/TFRecordReaderV2 (defined at /Users/Matthias/Workspaces/PyCharm/GeneralizedConvolutionalNeuralNetsEdges/input_pipelines.py:34)    
 testPipe/input_producer (defined at train.py:22)

Original stack trace for u'testPipe/ReaderReadV2':
  File "train.py", line 23, in <module>
    test_stuff = input_pipelines.tf_input(test_queue, POINT_CLOUD_DIMENSIONS, NUM_NEIGHBORS) #returns cloud, candidates, queries, labels, neighbors, distances, file_name
  File "/Users/Matthias/Workspaces/PyCharm/GeneralizedConvolutionalNeuralNetsEdges/input_pipelines.py", line 36, in tf_input
    _, serialized_example = reader.read(filename_queue)
  File "/Users/Matthias/Workspaces/PyCharm/000_Virtual Environments/venv-tensorflow-py2.7.10/lib/python2.7/site-packages/tensorflow/python/ops/io_ops.py", line 166, in read
    return gen_io_ops.reader_read_v2(self._reader_ref, queue_ref, name=name)
  File "/Users/Matthias/Workspaces/PyCharm/000_Virtual Environments/venv-tensorflow-py2.7.10/lib/python2.7/site-packages/tensorflow/python/ops/gen_io_ops.py", line 1105, in reader_read_v2
    queue_handle=queue_handle, name=name)
  File "/Users/Matthias/Workspaces/PyCharm/000_Virtual Environments/venv-tensorflow-py2.7.10/lib/python2.7/site-packages/tensorflow/python/framework/op_def_library.py", line 788, in _apply_op_helper
    op_def=op_def)
  File "/Users/Matthias/Workspaces/PyCharm/000_Virtual Environments/venv-tensorflow-py2.7.10/lib/python2.7/site-packages/tensorflow/python/util/deprecation.py", line 507, in new_func
    return func(*args, **kwargs)
  File "/Users/Matthias/Workspaces/PyCharm/000_Virtual Environments/venv-tensorflow-py2.7.10/lib/python2.7/site-packages/tensorflow/python/framework/ops.py", line 3616, in create_op
    op_def=op_def)
  File "/Users/Matthias/Workspaces/PyCharm/000_Virtual Environments/venv-tensorflow-py2.7.10/lib/python2.7/site-packages/tensorflow/python/framework/ops.py", line 2005, in __init__
    self._traceback = tf_stack.extract_stack()

Я в недоумении, почему это происходит только во второй эпохе ... что изменилось ? Входные данные должны быть в основном одинаковыми ...? Это действительно связано с операцией ввода, или виновником может быть что-то совершенно другое? Кто-нибудь понял, что может быть причиной? Рад предоставить больше информации, если это необходимо. Пытался сварить его до минимума. Большое спасибо заранее!

...