在训练深度学习模型的过程中,出现报错:TypeError: unsupported operand type(s) for /: ‘NoneType’ and ‘float’。

报错如下:

libpng error: Read Error
Traceback (most recent call last):
File "/gemini/code/XLSR-main/train.py", line 128, in <module>
File "/gemini/code/XLSR-main/train.py", line 27, in train
File "/usr/local/lib/python3.8/dist-packages/torch/utils/data/dataloader.py", line 521, in __next__
data = self._next_data()
File "/usr/local/lib/python3.8/dist-packages/torch/utils/data/dataloader.py", line 1203, in _next_data
return self._process_data(data)
File "/usr/local/lib/python3.8/dist-packages/torch/utils/data/dataloader.py", line 1229, in _process_data
data.reraise()
File "/usr/local/lib/python3.8/dist-packages/torch/_utils.py", line 425, in reraise
raise self.exc_type(msg)
TypeError: Caught TypeError in DataLoader worker process 0.
Original Traceback (most recent call last):
File "/usr/local/lib/python3.8/dist-packages/torch/utils/data/_utils/worker.py", line 287, in _worker_loop
data = fetcher.fetch(index)
File "/usr/local/lib/python3.8/dist-packages/torch/utils/data/_utils/fetch.py", line 44, in fetch
data = [self.dataset[idx] for idx in possibly_batched_index]
File "/usr/local/lib/python3.8/dist-packages/torch/utils/data/_utils/fetch.py", line 44, in <listcomp>
data = [self.dataset[idx] for idx in possibly_batched_index]
File "/gemini/code/XLSR-main/dataset.py", line 75, in __getitem__
TypeError: unsupported operand type(s) for /: 'NoneType' and 'float'

关键就在TypeError: unsupported operand type(s) for /: 'NoneType' and 'float'这里,读取图片错误,所以出现NoneType

做如下改进即可:

改进前:

path_LR = os.path.join(self.LR_dir, self.img_names[index][:-4] + 'x' + str(self.SR_rate) + '.png')
LR_img = cv2.imread(path_LR)
LR_img = LR_img / 255.
                

改进后:

path_LR = os.path.join(self.LR_dir, self.img_names[index][:-4] + 'x' + str(self.SR_rate) + '.png')
      while True:
          try:
              LR_img = cv2.imread(path_LR)
              LR_img = LR_img / 255.
          except Exception as e:
              print("=====================LR_img read image error=======================")
              print(e)
              print("index:", index)
              print("===================================================================")
          else:
              break

实际就是图片读取失败后再读取,直至成功为止,通常读取第二遍时就会成功。

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐