Python Pytorch自定义数据集:ValueError:给定numpy数组的某些步长为负值
我编写了一个定制的pytorch数据集,但遇到了一个似乎很难理解的错误 我的自定义数据集 类数据\u来自\u xlsxDataset: 定义初始自我、xlsx fp、路径列、类列列表: self.xlsx\u file=pd.read\u excelxlsx\u fp self.path\u col=path\u col self.class\u cols\u list=class\u cols\u list def___________________________自已: 返回get_xlsx_lengthself.xlsx_文件 定义获取项目自身,索引: file_path=cols_from_xlsxself.xlsx_文件,索引,1,self.path_col 功能=加载文件路径获取三维卷x、y、z 特征=np.展开尺寸特征,轴=0添加通道c,x,y,z label=cols\u从\u xlsxself.xlsx\u文件,索引,1,self.class\u cols\u列表获取标签 返回特性,label.astypenp.bool def主: dataset=data_from_xlsxtrain.xlsx,文件路径[pos,neg],转换,aug=True 数据加载程序=DataLoaderdataset,批量大小=4,随机播放=True 对于数据加载器中的f、l: printf-shape,f.shape 打印形状,打印形状 当我运行main时报告了一个错误Python Pytorch自定义数据集:ValueError:给定numpy数组的某些步长为负值,python,pytorch,Python,Pytorch,我编写了一个定制的pytorch数据集,但遇到了一个似乎很难理解的错误 我的自定义数据集 类数据\u来自\u xlsxDataset: 定义初始自我、xlsx fp、路径列、类列列表: self.xlsx\u file=pd.read\u excelxlsx\u fp self.path\u col=path\u col self.class\u cols\u list=class\u cols\u list def___________________________自已: 返回get_xls
报告的错误对我来说没有意义,所以我用谷歌搜索了一下。起初我认为我没有将feature从numpy.array更改为tensor,所以我尝试了feature=torch.from_arrayfeature.copy,还尝试了transforms.TOTensor,但两次尝试都失败了。多亏@jodag和@UsmanAli的建议,我通过返回torch.from_numpyfeature.copy和torch.tensorlabel.astypenp.bool解决了这个问题 所以整个事情应该是 类数据\u来自\u xlsxDataset: 定义初始自我、xlsx fp、路径列、类列列表: self.xlsx\u file=pd.read\u excelxlsx\u fp self.path\u col=path\u col self.class\u cols\u list=class\u cols\u list def___________________________自已: 返回get_xlsx_lengthself.xlsx_文件 定义获取项目自身,索引: file_path=cols_from_xlsxself.xlsx_文件,索引,1,self.path_col 功能=加载文件路径获取三维卷x、y、z 特征=np.展开尺寸特征,轴=0添加通道c,x,y,z label=cols\u从\u xlsxself.xlsx\u文件,索引,1,self.class\u cols\u列表获取标签 返回torch.from_numpyfeature.copy,torch.tensorlabel.astypenp.bool
在某些情况下,可能需要以内存C顺序返回连续数组ndim>=1。然后,你就可以用火炬了 点击查看更多信息
好运。
为了让你的生活更轻松,你可以考虑从数据集中返回Tror。张量或数字列表,而不是NUMPY数组。尝试处理numpy数组,但显然失败了。collate函数从数据集中获取多个输出的列表,并将它们转换为成批的torch张量。另一种方法是编写自己的collate函数并将其交给数据加载器,例如DataLoader…,collate\u fn=my\u collate\u fn据我所知,此问题已得到解决。但是,您可以返回这个,torch.from_numpyfeature.copy另外,我认为Dataloader不支持Numpy bool类型,您可能还需要将标签转换为张量,torch.tensorlabel.astypenp。bool@UsmanAli哇,太棒了!谢谢但我仍然很困惑我为什么要这样做。据我所知,我需要先把numpy数组转换成torch张量,然后再把它转换成网络。所以我也试着返回像torch.FloatTensorfeature和torch.BoolTensorlabel这样的东西,但它就是不起作用。@UsmanAli所以我只是对何时以及如何进行这个torch tensor转换没有信心。太棒了!我也有同样的问题,浪费了几乎一天的时间,直到我找到了这个解决方案。非常感谢你! File "d:\pytorch\lib\site-packages\torch\utils\data\dataloader.py", line 346, in __next__
data = self.dataset_fetcher.fetch(index) # may raise StopIteration
File "d:\pytorch\lib\site-packages\torch\utils\data\_utils\fetch.py", line 47, in fetch
return self.collate_fn(data)
File "d:\pytorch\lib\site-packages\torch\utils\data\_utils\collate.py", line 80, in default_collate
return [default_collate(samples) for samples in transposed]
File "d:\pytorch\lib\site-packages\torch\utils\data\_utils\collate.py", line 80, in <listcomp>
return [default_collate(samples) for samples in transposed]
File "d:\pytorch\lib\site-packages\torch\utils\data\_utils\collate.py", line 65, in default_collate
return default_collate([torch.as_tensor(b) for b in batch])
File "d:\pytorch\lib\site-packages\torch\utils\data\_utils\collate.py", line 65, in <listcomp>
return default_collate([torch.as_tensor(b) for b in batch])
ValueError: some of the strides of a given numpy array are negative. This is currently not supported, but will be added in future release