Python 我如何解决InvalidArgumentError:周期长度必须为>;加载TFR记录文件时为0

Python 我如何解决InvalidArgumentError:周期长度必须为>;加载TFR记录文件时为0,python,python-3.x,tensorflow,tfrecord,data-pipeline,Python,Python 3.x,Tensorflow,Tfrecord,Data Pipeline,我首先使用tf.TFRecord和tf.Example构建一个高效的音频文件数据管道。但是当我试图从保存的tfrecords文件加载数据时,我得到一个错误tensorflow.python.framework.errors\u impl.InvalidArgumentError。我一直在为这个问题寻找很多解决方案,但都没有成功 AUTO = tf.data.experimental.AUTOTUNE def _parse_batch(record_batch, sample_rate, du

我首先使用
tf.TFRecord和tf.Example
构建一个高效的音频文件数据管道。但是当我试图从保存的tfrecords文件加载数据时,我得到一个错误
tensorflow.python.framework.errors\u impl.InvalidArgumentError
。我一直在为这个问题寻找很多解决方案,但都没有成功

AUTO = tf.data.experimental.AUTOTUNE


def _parse_batch(record_batch, sample_rate, duration):
    n_sample = sample_rate * duration

    feature_description = {
        'audio': tf.io.FixedLenFeature([n_sample], tf.float32),
        'label': tf.io.VarLenFeature(tf.int64)
    }

    example = tf.io.parse_example(record_batch, feature_description)

    return example['audio'], example['label']


def get_dataset_from_tfrecords(tfrecords_dir='tfrecords', split='train', batch_size=16,
                               sample_rate=44100, duration=4, n_epochs=10):
    if split not in ('train', 'validate'):
        raise ValueError("Split must be either 'train' or 'validate'")

    pattern = os.path.join(tfrecords_dir, '{}*.tfrecord'.format(split))

    ignore_order = tf.data.Options()
    ignore_order.experimental_deterministic = False
    filenames = tf.io.gfile.glob(pattern)

    # Read TFRecord files in an interleaved order
    dataset = tf.data.TFRecordDataset(filenames, compression_type='ZLIB', num_parallel_reads=AUTO)
    dataset = dataset.with_options(ignore_order)
    # Prepare batches
    dataset = dataset.batch(batch_size)

    # Parse a batch into a dataset of [audio, label] pairs
    dataset = dataset.map(lambda x: _parse_batch(x, sample_rate, duration))

    # Repeat the training data for n_epochs. Don't repeat test/validate splits.
    if split == 'train':
        dataset = dataset.repeat(n_epochs)

    return dataset.prefetch(buffer_size=AUTO)
下面是全部错误

Traceback (most recent call last):
  File "train.py", line 25, in <module>
    main()
  File "train.py", line 16, in main
    n_epochs=n_epochs)
  File "D:\Natural Language Processing\speech_to_text\utils\load_tfrecord.py", line 33, in get_dataset_from_tfrecords
    dataset = tf.data.TFRecordDataset(filenames, compression_type='ZLIB', num_parallel_reads=AUTO)
  File "C:\Users\levan\Anaconda3\lib\site-packages\tensorflow_core\python\data\ops\readers.py", line 304, in __init__
    num_parallel_reads)
  File "C:\Users\levan\Anaconda3\lib\site-packages\tensorflow_core\python\data\ops\readers.py", line 85, in _create_dataset_reader
    prefetch_input_elements=None)
  File "C:\Users\levan\Anaconda3\lib\site-packages\tensorflow_core\python\data\ops\readers.py", line 250, in __init__
    **self._flat_structure)
  File "C:\Users\levan\Anaconda3\lib\site-packages\tensorflow_core\python\ops\gen_experimental_dataset_ops.py", line 5977, in parallel_interleave_dataset
    _six.raise_from(_core._status_to_exception(e.code, message), None)
  File "<string>", line 3, in raise_from
tensorflow.python.framework.errors_impl.InvalidArgumentError: `cycle_length` must be > 0 [Op:ParallelInterleaveDataset]
回溯(最近一次呼叫最后一次):
文件“train.py”,第25行,在
main()
文件“train.py”,第16行,在main中
n_时代=n_时代)
文件“D:\Natural Language Processing\speech\u to\u text\utils\load\u tfrecord.py”,第33行,在get\u dataset\u from\u tfrecords中
dataset=tf.data.TFRecordDataset(文件名,压缩类型=ZLIB,num\u并行读取=AUTO)
文件“C:\Users\levan\Anaconda3\lib\site packages\tensorflow\u core\python\data\ops\readers.py”,第304行,在初始化中__
数量(并行读取)
文件“C:\Users\levan\Anaconda3\lib\site packages\tensorflow\u core\python\data\ops\readers.py”,第85行,位于创建数据集读取器中
预取\输入\元素=无)
文件“C:\Users\levan\Anaconda3\lib\site packages\tensorflow\u core\python\data\ops\readers.py”,第250行,在初始化中__
**自身(平面结构)
文件“C:\Users\levan\Anaconda3\lib\site packages\tensorflow\u core\python\ops\gen\u experimental\u dataset\u ops.py”,第5977行,并行交错数据集
_六、从(_核心。_状态_到_异常(例如代码、消息),无)
文件“”,第3行,从
tensorflow.python.framework.errors\u impl.InvalidArgumentError:`cycle\u length`必须大于0[Op:ParallelInterleaveDataset]

有人能帮我吗?

我在tensorflow 2.0上遇到了类似的问题,但是升级到2.1解决了问题

我在tensorflow 2.0上遇到了类似的问题,但是升级到2.1解决了问题