使用MindSpore报错RuntimeError: Exception thrown from user defined Python function in dataset.
收藏回复举报
使用MindSpore报错RuntimeError: Exception thrown from user defined Python function in dataset.
发表于2024-05-23 14:45:39
0 查看

系统环境

硬件环境(Ascend/GPU/CPU): CPU

操作系统:Windows11

MindSpore版本: 2.2.14

Python版本:3.8.18

执行模式(PyNative/ Graph): 不限

报错信息

2.1 问题描述

使用如下脚本运行出现报错RuntimeError: Exception thrown from user defined Python function in dataset. 

2.2 脚本信息

创建数据集脚本

class Mydataset(): 
    def __init__(self,types): 
        self.data,self.label = loaddata(types) 
        self.data_shape = self.data.shape 
        self.label_shape = self.label.shape 
        self.type = type(self.data) 

    def __getitem__(self, index): 
        index = int(index) 
        return self.data[index],self.label[index] 

    def __len__(self): 
        return len(self.data) 

def loaddata(type): 
    # 载入数据集 
    if(type == "train"): 
        length = 150 
        num_classes = 6 
        uav_data = [] 
        labels = [] 

        for i in range(num_classes): 
            data = np.load(f"./dataset_6class/UAV{i}.npy")[0:length] 
            uav_data.append(data) 
            labels.append(np.full((data.shape[0],), i, dtype=np.int32)) 

         # 合并所有类的数据和标签 
        uav_data = np.vstack(uav_data) 
        labels = np.concatenate(labels) 

        # 分实部虚部[18000,2048,2] 
        temp_data = np.zeros([length * num_classes, 2, 2048], dtype=np.float32) 
        temp_data[:, 0, :] = np.real(uav_data) 
        temp_data[:, 1, :] = np.imag(uav_data) 

        uav_dataset = Tensor(temp_data, dtype=mindspore.float32) 
        labels = Tensor(labels, dtype=mindspore.int32) 
        label_onehot = one_hot(labels, depth=num_classes, on_value=1.0, off_value=0.0) 

        return uav_dataset, label_onehot 
def read_dataset(type): 
    dataset = ds.GeneratorDataset(source=Mydataset(type),column_names=["data", "label"],shuffle=False) 
    return dataset

 网络模型脚本

class CLDNN(nn.Cell): 
    def __init__(self): 
        # CNN 
        super(CLDNN,self).__init__() 
        self.model = SequentialCell( 
            Conv1d(in_channels=2, out_channels=64, kernel_size=3, stride=1, pad_mode='same'), 
            ReLU(), 
            MaxPool1d(kernel_size=2, stride=2), 

            Conv1d(in_channels=64, out_channels=128, kernel_size=3, stride=1, pad_mode='same'), 
            ReLU(), 
            MaxPool1d(kernel_size=2, stride=2), 

            Conv1d(in_channels=128, out_channels=256, kernel_size=3, stride=1, pad_mode='same'), 
            ReLU(), 
            MaxPool1d(kernel_size=2, stride=2), 

            Conv1d(in_channels=256, out_channels=512, kernel_size=3, stride=1, pad_mode='same'), 
            ReLU(), 
            MaxPool1d(kernel_size=2, stride=2), 

            Conv1d(in_channels=512, out_channels=512, kernel_size=3, stride=1, pad_mode='same'), 
            ReLU(), 
            MaxPool1d(kernel_size=2, stride=2), 

            # LSTM(input_size=64, hidden_size=50, num_layers=2), 
            Flatten(), 

            Dense(in_channels=32768, out_channels=5120), 
            ReLU(), 
            Dropout(p=0.5), 
            Dense(in_channels=5120, out_channels=1000), 
            ReLU(), 
            Dropout(p=0.5), 
            Dense(in_channels=1000, out_channels=6) 
        ) 

    def construct(self,inputs): 
        for layer in self.model: 
            print(f"第{i}层输入数据类型",type(inputs)) 
            inputs = layer(inputs) 
            print(inputs.shape) 
        output = inputs 
        return output

主函数脚本

learning_rate= 0.1 
Epoch = 10 
batch_size = 15 
train_dataset = read_dataset("train") 
train_dataset = train_dataset.batch(batch_size) 
network = my_models.CLDNN() 
loss = SoftmaxCrossEntropyWithLogits() 
optim = Momentum(params=network.trainable_params(), learning_rate=learning_rate, momentum=0.9) 
model = Model(network, loss_fn=loss, optimizer=optim, metrics={'accuracy'}) 
print("------训练") 
model.train(Epoch,train_dataset,callbacks=[LossMonitor(10)])

2.3 报错信息

Traceback (most recent call last): 
  File "D:\pycharm\UAV_recognition_mindspore\test.py", line 35, in <module> 
    model.train(Epoch,train_dataset,callbacks=[LossMonitor(10)]) 
  File "D:\Anaconda\conda\envs\mindspore_py38\lib\site-packages\mindspore\train\model.py", line 1080, in train 
    self._train(epoch, 
  File "D:\Anaconda\conda\envs\mindspore_py38\lib\site-packages\mindspore\train\model.py", line 115, in wrapper 
    func(self, *args, **kwargs) 
  File "D:\Anaconda\conda\envs\mindspore_py38\lib\site-packages\mindspore\train\model.py", line 628, in _train 
    self._train_process(epoch, train_dataset, list_callback, cb_params, initial_epoch, valid_infos) 
  File "D:\Anaconda\conda\envs\mindspore_py38\lib\site-packages\mindspore\train\model.py", line 917, in _train_process 
    for next_element in dataset_helper: 
  File "D:\Anaconda\conda\envs\mindspore_py38\lib\site-packages\mindspore\train\dataset_helper.py", line 645, in __next__ 
    data = self.iter.__next__() 
  File "D:\Anaconda\conda\envs\mindspore_py38\lib\site-packages\mindspore\dataset\engine\iterators.py", line 152, in __next__ 
    data = self._get_next() 
  File "D:\Anaconda\conda\envs\mindspore_py38\lib\site-packages\mindspore\dataset\engine\iterators.py", line 301, in _get_next 
    return [self._transform_md_to_output(t) for t in self._iterator.GetNextAsList()] 
RuntimeError: Exception thrown from user defined Python function in dataset.  

------------------------------------------------------------------ 
- Python Call Stack:  
------------------------------------------------------------------ 
Traceback (most recent call last): 
  File "D:\Anaconda\conda\envs\mindspore_py38\lib\site-packages\mindspore\dataset\engine\datasets_user_defined.py", line 103, in _cpp_sampler_fn 
    yield _convert_row(val) 
  File "D:\Anaconda\conda\envs\mindspore_py38\lib\site-packages\mindspore\dataset\engine\datasets_user_defined.py", line 173, in _convert_row 
    value.append(x.asnumpy()) 
  File "D:\Anaconda\conda\envs\mindspore_py38\lib\site-packages\mindspore\common\_stub_tensor.py", line 49, in fun 
    return method(*arg, **kwargs) 
  File "D:\Anaconda\conda\envs\mindspore_py38\lib\site-packages\mindspore\common\tensor.py", line 962, in asnumpy 
    return Tensor_.asnumpy(self) 
RuntimeError: The pointer[auto_grad_cell_ptr_] is null. 

---------------------------------------------------- 
- Framework Unexpected Exception Raised: 
---------------------------------------------------- 
This exception is caused by framework's unexpected error. Please create an issue at https://gitee.com/mindspore/mindspore/issues to get help. 
---------------------------------------------------- 
- C++ Call Stack: (For framework developers) 
---------------------------------------------------- 
mindspore\ccsrc\pipeline/pynative/grad/top_cell.h:122 mindspore::pynative::TopCellInfo::auto_grad_cell_ptr 
------------------------------------------------------------------ 
- Dataset Pipeline Error Message:  
------------------------------------------------------------------ 
[ERROR] Execute user Python code failed, check 'Python Call Stack' above. 
------------------------------------------------------------------ 
- C++ Call Stack: (For framework developers)  
------------------------------------------------------------------ 
mindspore\ccsrc\minddata\dataset\engine\datasetops\source\generator_op.cc(259).

根因分析

******此处由用户填写******

解决方案

******此处由用户填写******

包含文字方案和最终脚本代码

我要发帖子