定义网络如下:
其中attention_3d_block2()定义为:
数据集生成代码:
训练代码为:
调试时发现,运行到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
定义网络如下:
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