如何将cupy数据转换为PyTorch张量?

问题描述

最近我了解到 CuPy 将利用 GPU 来加速深度学习中的计算。但是,在执行以下步骤后,我仍然遇到无法解决错误

  1. 我通过 https://docs.cupy.dev/en/stable/install.html 正确安装了 CuPy。其他软件包也已正确安装。
  2. 原始代码如下所示,在文件 A 中:
import h5py
import torch
import numpy as np
import cupy as cp
from torch.utils.data import Dataset,DataLoader
from torchvision import transforms,utils


class cupy_Dataset(Dataset):

    def __init__(self,file_dir):

        super(cupy_Dataset,self).__init__()
        data = h5py.File(file_dir)

            self.ms = cp.array(data.get("ms"))
            self.lms = cp.array(data.get("lms"))
            self.pan = cp.array(data.get("pan"))
            self.gt = cp.array(data.get("gt"))

            self.ms = (self.ms[0:10,:,:])
            self.lms = (self.lms[0:10,:])
            self.pan = (self.pan[0:10,:])
            self.gt = (self.gt[0:10,:])

            self.ms = torch.utils.dlpack.from_dlpack(self.ms.toDLpack()).float()
            self.lms = torch.utils.dlpack.from_dlpack(self.lms.toDLpack()).float()
            self.pan = torch.utils.dlpack.from_dlpack(self.pan.toDLpack()).float()
            self.gt = torch.utils.dlpack.from_dlpack(self.gt.toDLpack()).float()

    def __len__(self):
        return len(self.gt.shape[0])

    def __getitem__(self,idx):

        ms = self.ms[idx,:]
        lms = self.lms[idx,:]
        pan = self.pan[idx,:]
        gt = self.gt[idx,:]

        return ms,lms,pan,gt

if __name__ == '__main__':
    train_dataset = cupy_WorldView3_Dataset(file_dir='./training_data/train.mat')
    print(train_dataset.gt.shape)

文件 B 中:

import torch
import cupy
from {file_A} import cupy_Dataset

train_dataset = cupy_Dataset(file_dir='./training_data/train.mat')
gt = train_dataset.gt
pan = train_dataset.pan
lms = train_dataset.lms
ms = train_dataset.ms

print(type(gt))
  1. 文件 A 中的结果显示为:
Traceback (most recent call last):
  File "{file path}",line 94,in <module>
    train_dataset = cupy_WorldView3_Dataset(file_dir='./training_data/train.mat')
  File "{file path}",line 76,in __init__
    self.ms = torch.utils.dlpack.from_dlpack(self.ms.toDLpack()).float()
AttributeError: module 'torch.utils' has no attribute 'dlpack'

文件B中的结果显示为:

Using backend: pytorch
Traceback (most recent call last):
  File "/home/office-desktop/.pycharm_helpers/pydev/pydevd.py",line 1477,in _exec
    pydev_imports.execfile(file,globals,locals)  # execute the script
  File "/home/office-desktop/.pycharm_helpers/pydev/_pydev_imps/_pydev_execfile.py",line 18,in execfile
    exec(compile(contents+"\n",file,'exec'),glob,loc)
  File "{file path}",line 6,in <module>
    train_dataset = cupy_Dataset(file_dir='./training_data/train.mat')
  File "{file path}",in __init__
    self.ms = torch.utils.dlpack.from_dlpack(self.ms.toDLpack()).float()
AttributeError: 'cupy.core.core.ndarray' object has no attribute 'toDLpack'

Process finished with exit code 1

仅供参考,我的基本想法是使用 DLpack 作为 CuPy 和 PyTorch 张量之间的互连。初始用法和语法可以在 https://docs.cupy.dev/en/stable/reference/interoperability.htmlhttps://pytorch.org/docs/stable/dlpack.html 中找到。

这是为什么?先感谢您。如果您需要任何其他信息,我愿意提供:)

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)