使用Model.train()时运行出错
收藏回复举报
使用Model.train()时运行出错
t('forum.solved') 已解决
发表于2024-03-04 22:08:19
0 查看

定义网络如下:

class myModel(nn.Cell):
    def __init__(self, timesteps, features):
        super(myModel, self).__init__()
        # lstm layer
        self.lstm = LSTM(input_size=timesteps*features, hidden_size=8, dropout=0.2, num_layers=2)
        self.flatten = Flatten()
        self.dense = Dense(64, 1)

    def construct(self, x):
        x = self.lstm(x)
        x = attention_3d_block2(x)
        x = self.flatten(x)
        logits = self.dense(x)
        return logits

其中attention_3d_block2()定义为:

def attention_3d_block2(inputs):
    # inputs.shape = (batch_size, time_steps, input_dim)
    a = ms.Tensor(inputs[0], ms.float16)
    input_dim = 8  # 8
    a = a.permute((0, 2, 1))  # a=None,8,1,第三维和第二维转置
    a = Dense(in_channels=1, out_channels=timesteps, activation='softmax', dtype=ms.float32)(ms.Tensor(a, ms.float32))  # 经过一层全连接层
    if SINGLE_ATTENTION_VECTOR:  # SINGLE_ATTENTION_VECTOR=True,则共享一个注意力权重,如果=False则每维特征会单独有一个权重,换而言之,注意力权重也变成多维的了。
        a = mean(a, axis=1)
        a = a.repeat(input_dim)
    a_probs = a.permute((0, 2, 1))
    output_attention_mul = ms.ops.mul(a, a_probs)  # 两个矩阵元素分别相乘
    return output_attention_mul

数据集生成代码:

X_train = values[0:5700, 0:-1]
y_train = values[0:5700, -1]
X_test = values[5700:, 0:-1]
y_test = values[5700:, -1]

# 构造成LSTM需要的输入格式
print(X_train.shape[1])
X_train = X_train.reshape((X_train.shape[0], timesteps, X_train.shape[1]))
X_test = X_test.reshape((X_test.shape[0], timesteps, X_test.shape[1]))


# 构造mindspore模型能够使用的数据集
class IterableDataset():
    # 可迭代数据集
    # 可以通过迭代的方式逐步获取数据样本
    def __init__(self, data, label):
        '''init the class object to hold the data'''
        self.data = data
        self.label = label

        self.start = 0
        self.end = len(data)

    def __iter__(self):
        self.start = 0
        self.end = len(self.data)
        return self

    def __next__(self):
        if self.start >= self.end:
            raise StopIteration
        data = self.data[self.start]
        label = self.label[self.start]
        self.start += 1
        return data, label


def datapipe(dataset, batch_size):
    dataset = dataset.batch(batch_size)
    return dataset


train_dataset = IterableDataset(X_train, y_train)
train_dataset = ds.GeneratorDataset(train_dataset, column_names=["data", "label"])
train_dataset = datapipe(train_dataset, 72)

test_dataset = IterableDataset(X_test, y_test)
test_dataset = ds.GeneratorDataset(test_dataset, column_names=["data", "label"])
test_dataset = datapipe(test_dataset, 72)

训练代码为:

net = myModel(timesteps, features)
opt = nn.Adam(params=net.trainable_params())
model = Model(network=net, loss_fn=nn.MAELoss(), optimizer=opt, metrics={"mae"})
model.train(50, train_dataset)

调试时发现,运行到model.train(epoch=50,train_dataset)时报错如下:

Traceback (most recent call last): 

  File "D:\VRLA1\first\Model\msLSTM.py", line 162, in <module> 

    model.train(50, train_dataset) 

  File "D:\Anaconda\envs\mindspore\lib\site-packages\mindspore\train\model.py", line 1068, in train 

    self._train(epoch, 

  File "D:\Anaconda\envs\mindspore\lib\site-packages\mindspore\train\model.py", line 114, in wrapper 

    func(self, *args, **kwargs) 

  File "D:\Anaconda\envs\mindspore\lib\site-packages\mindspore\train\model.py", line 617, in _train 

    self._train_process(epoch, train_dataset, list_callback, cb_params, initial_epoch, valid_infos) 

  File "D:\Anaconda\envs\mindspore\lib\site-packages\mindspore\train\model.py", line 919, in _train_process 

    outputs = self._train_network(*next_element) 

  File "D:\Anaconda\envs\mindspore\lib\site-packages\mindspore\nn\cell.py", line 705, in __call__ 

    raise err 

  File "D:\Anaconda\envs\mindspore\lib\site-packages\mindspore\nn\cell.py", line 701, in __call__ 

    output = self._run_construct(args, kwargs) 

  File "D:\Anaconda\envs\mindspore\lib\site-packages\mindspore\nn\cell.py", line 482, in _run_construct 

    output = self.construct(*cast_inputs, **kwargs) 

  File "D:\Anaconda\envs\mindspore\lib\site-packages\mindspore\nn\wrap\cell_wrapper.py", line 418, in construct 

    return self._no_sens_impl(*inputs) 

  File "D:\Anaconda\envs\mindspore\lib\site-packages\mindspore\nn\wrap\cell_wrapper.py", line 433, in _no_sens_impl 

    loss = self.network(*inputs) 

  File "D:\Anaconda\envs\mindspore\lib\site-packages\mindspore\nn\cell.py", line 705, in __call__ 

    raise err 

  File "D:\Anaconda\envs\mindspore\lib\site-packages\mindspore\nn\cell.py", line 701, in __call__ 

    output = self._run_construct(args, kwargs) 

  File "D:\Anaconda\envs\mindspore\lib\site-packages\mindspore\nn\cell.py", line 482, in _run_construct 

    output = self.construct(*cast_inputs, **kwargs) 

  File "D:\Anaconda\envs\mindspore\lib\site-packages\mindspore\nn\wrap\cell_wrapper.py", line 122, in construct 

    return self._loss_fn(out, label) 

  File "D:\Anaconda\envs\mindspore\lib\site-packages\mindspore\nn\cell.py", line 704, in __call__ 

    _pynative_executor.clear_res() 

  File "D:\Anaconda\envs\mindspore\lib\site-packages\mindspore\common\api.py", line 1258, in clear_res 

    return self._executor.clear_res() 

RuntimeError: type_id:44 is invalid 

 

---------------------------------------------------- 

- C++ Call Stack: (For framework developers) 

---------------------------------------------------- 

mindspore\ccsrc\plugin\device\cpu\kernel\contiguous_cpu_kernel.cc:51 mindspore::kernel::ContiguousCpuKernel::LaunchContiguous 

mindspore版本:2.6.0 cpu

我要发帖子