如何解决Pytorch Dataloader-TypeError:没有找到与指定签名匹配的循环和ufunc true_divide的转换
我抛出了此错误,但不幸的是,找不到任何建议可以解决我的问题。 该错误来自我的pytorch数据加载器,当我手动运行其内容时,没有问题。
这是错误:
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-30-f7e6029a4c31> in <module>
----> 1 x = runmodel(epochs=20)
<ipython-input-29-3bb7c79f0006> in runmodel(epochs)
14 print("Epoch = "+str(epoch))
15 with torch.set_grad_enabled(True):
---> 16 epoch_train_loss = training(model=model)
17 print("Train Loss: ",epoch_train_loss)
18 track_epoch_train_loss.append(epoch_train_loss)
<ipython-input-28-626c82187ad7> in training(model)
3 current_loss = 0
4 current_correct = 0
----> 5 for t,(train,y_train) in enumerate(training_generator):
6 model.train()
7 train = train.to(device=device,dtype=dtype)
~/anaconda3/lib/python3.7/site-packages/torch/utils/data/dataloader.py in __next__(self)
343
344 def __next__(self):
--> 345 data = self._next_data()
346 self._num_yielded += 1
347 if self._dataset_kind == _DatasetKind.Iterable and \
~/anaconda3/lib/python3.7/site-packages/torch/utils/data/dataloader.py in _next_data(self)
383 def _next_data(self):
384 index = self._next_index() # may raise StopIteration
--> 385 data = self._dataset_fetcher.fetch(index) # may raise StopIteration
386 if self._pin_memory:
387 data = _utils.pin_memory.pin_memory(data)
~/anaconda3/lib/python3.7/site-packages/torch/utils/data/_utils/fetch.py in fetch(self,possibly_batched_index)
42 def fetch(self,possibly_batched_index):
43 if self.auto_collation:
---> 44 data = [self.dataset[idx] for idx in possibly_batched_index]
45 else:
46 data = self.dataset[possibly_batched_index]
~/anaconda3/lib/python3.7/site-packages/torch/utils/data/_utils/fetch.py in <listcomp>(.0)
42 def fetch(self,possibly_batched_index):
43 if self.auto_collation:
---> 44 data = [self.dataset[idx] for idx in possibly_batched_index]
45 else:
46 data = self.dataset[possibly_batched_index]
<ipython-input-8-4711e033b45e> in __getitem__(self,index)
12
13 ID = self.ids[index]
---> 14 X = np.array(plt.imread('train/' + ID + '.png' ),dtype = np.float32)
15 X = np.repeat(X[:,:,np.newaxis],3,axis=2)
16 X = np.transpose(X)
~/anaconda3/lib/python3.7/site-packages/matplotlib/pyplot.py in imread(fname,format)
2228 @_copy_docstring_and_deprecators(matplotlib.image.imread)
2229 def imread(fname,format=None):
-> 2230 return matplotlib.image.imread(fname,format)
2231
2232
~/anaconda3/lib/python3.7/site-packages/matplotlib/image.py in imread(fname,format)
1486 with img_open(fname) as image:
1487 return (_pil_png_to_float_array(image)
-> 1488 if isinstance(image,PIL.PngImagePlugin.PngImageFile) else
1489 pil_to_array(image))
1490
~/anaconda3/lib/python3.7/site-packages/matplotlib/image.py in _pil_png_to_float_array(pil_png)
1653 return np.divide(pil_png,2**4 - 1,dtype=np.float32)
1654 if rawmode == "L": # Grayscale.
-> 1655 return np.divide(pil_png,2**8 - 1,dtype=np.float32)
1656 if rawmode == "I;16B": # Grayscale.
1657 return np.divide(pil_png,2**16 - 1,dtype=np.float32)
TypeError: No loop matching the specified signature and casting
was found for ufunc true_divide
还有我的数据加载器:
class Dataset(Dataset):
def __init__(self,ids):
'Initialization'
self.ids = ids
def __len__(self):
'Denotes the total number of samples'
return len(self.ids)
def __getitem__(self,index):
'Generates one sample of data'
ID = self.ids[index]
X = np.array(plt.imread('train/' + ID + '.png' ),dtype = np.float32)
X = np.repeat(X[:,axis=2)
X = np.transpose(X)
y = np.array(plt.imread('masks/' + ID + '.png'),dtype = np.float32)
return X,y
我尝试确保dtype为float,对numpy / matplotlib进行升级和降级。 预先感谢任何人都可以提供的帮助
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。