pytorch读取tfrecord内存报错

[0/21][564520/564581] Loss: 54.766731 time elapsed 0
[0/21][564530/564581] Loss: 64.998718 time elapsed 0
[0/21][564540/564581] Loss: 50.452267 time elapsed 0
[0/21][564550/564581] Loss: 66.096046 time elapsed 0
[0/21][564560/564581] Loss: 41.591263 time elapsed 0
[0/21][564570/564581] Loss: 60.138813 time elapsed 0
[0/21][564580/564581] Loss: 47.567059 time elapsed 0
Start val
SystemError: deallocated bytearray object has exported buffers
Traceback (most recent call last):
  File "/home/fuyining/Ocr/train.py", line 371, in <module>
    main()
  File "/home/fuyining/Ocr/train.py", line 367, in main
    train(opt, train_loader, test_dataset, image, converter, encoder, encoder_optimizer, decoder, decoder_optimizer, criterion, loss_avg)
  File "/home/fuyining/Ocr/train.py", line 173, in train
    val(opt, image, converter, encoder, decoder, criterion, 1, dataset=test_dataset, teach_forcing=False)  # batchsize:1
  File "/home/fuyining/Ocr/train.py", line 53, in val
    data = val_iter.next()
  File "/home/fuyining/miniconda3/envs/torch/lib/python3.8/site-packages/torch/utils/data/dataloader.py", line 521, in __next__
    data = self._next_data()
  File "/home/fuyining/miniconda3/envs/torch/lib/python3.8/site-packages/torch/utils/data/dataloader.py", line 1203, in _next_data
    return self._process_data(data)
  File "/home/fuyining/miniconda3/envs/torch/lib/python3.8/site-packages/torch/utils/data/dataloader.py", line 1229, in _process_data
    data.reraise()
  File "/home/fuyining/miniconda3/envs/torch/lib/python3.8/site-packages/torch/_utils.py", line 425, in reraise
    raise self.exc_type(msg)
MemoryError: Caught MemoryError in DataLoader worker process 1.
Original Traceback (most recent call last):
  File "/home/fuyining/miniconda3/envs/torch/lib/python3.8/site-packages/torch/utils/data/_utils/worker.py", line 287, in _worker_loop
    data = fetcher.fetch(index)
  File "/home/fuyining/miniconda3/envs/torch/lib/python3.8/site-packages/torch/utils/data/_utils/fetch.py", line 28, in fetch
    data.append(next(self.dataset_iter))
  File "/home/fuyining/miniconda3/envs/torch/lib/python3.8/site-packages/tfrecord/reader.py", line 219, in example_loader
    for record in record_iterator:
  File "/home/fuyining/miniconda3/envs/torch/lib/python3.8/site-packages/tfrecord/reader.py", line 94, in tfrecord_iterator
    yield from read_records(start_byte, end_byte)
  File "/home/fuyining/miniconda3/envs/torch/lib/python3.8/site-packages/tfrecord/reader.py", line 71, in read_records
    datum_bytes = datum_bytes.zfill(int(length * 1.5))
MemoryError

Process finished with exit code 1

其中报错的部位代码是使用pytroch的TFrecord包:

            length_bytes = bytearray(8)
            crc_bytes = bytearray(4)
            datum_bytes = bytearray(1024 * 1024)
            length, = struct.unpack("<Q", length_bytes)
            if length > len(datum_bytes):
                datum_bytes = datum_bytes.zfill(int(length * 1.5))

这里内存溢出?请问应该如何处理?

你好,我是有问必答小助手,非常抱歉,本次您提出的有问必答问题,技术专家团超时未为您做出解答

本次提问扣除的有问必答次数,将会以问答VIP体验卡(1次有问必答机会、商城购买实体图书享受95折优惠)的形式为您补发到账户。

​​​​因为有问必答VIP体验卡有效期仅有1天,您在需要使用的时候【私信】联系我,我会为您补发。