在跑mindspore模型的预测过程中,我想打印一个包含字符串的list中的单个字符串,但报错。
很奇怪的一点是我如果直接打印这个list,不会报错,但如果我想访问这个list里面的某一个字符串,就会报错,我不知道这是否和mindspore的内部机制有关。
相关代码:
for i, data in tqdm(enumerate(data_loader.create_tuple_iterator()), total=data_loader.get_dataset_size()):
imgs = ops.squeeze(ms.Tensor(data[0]))
names = data[1]
print(names)#不会报错
print(names[0])#会报错
centers = data[2][:,0]
scales = data[2][:,1]
output =pose_estimator.model(imgs)
报错信息:
Traceback (most recent call last):
File "prepare_pose_estimation.py", line 98, in
pose_estimation(**vars(args))
File "prepare_pose_estimation.py", line 58, in pose_estimation
print(names[0])
File "D:\anaconda\envs\gaitRecognition\lib\site-packages\mindspore\common\tensor.py", line 337, in __getitem__
out = tensor_operator_registry.get('__getitem__')(self, index)
File "D:\anaconda\envs\gaitRecognition\lib\site-packages\mindspore\ops\composite\multitype_ops\_compile_utils.py", line 46, in _tensor_getitem
return _tensor_index_by_integer(self, index)
File "D:\anaconda\envs\gaitRecognition\lib\site-packages\mindspore\ops\composite\multitype_ops\_compile_utils.py", line 393, in _tensor_index_by_integer
return P.StridedSlice(begin_mask, end_mask, 0, 0, shrink_axis_mask)(data, begin_strides, end_strides, step_strides)
File "D:\anaconda\envs\gaitRecognition\lib\site-packages\mindspore\ops\primitive.py", line 294, in __call__
return _run_op(self, self.name, args)
File "D:\anaconda\envs\gaitRecognition\lib\site-packages\mindspore\common\api.py", line 98, in wrapper
results = fn(*arg, **kwargs)
File "D:\anaconda\envs\gaitRecognition\lib\site-packages\mindspore\ops\primitive.py", line 748, in _run_op
output = real_run_op(obj, op_name, args)
TypeError: Operator[StridedSlice] input(String) output(String) is not supported. This error means the current input type is not supported, please refer to the MindSpore doc for supported types.
----------------------------------------------------
- C++ Call Stack: (For framework developers)
----------------------------------------------------
mindspore\ccsrc\plugin\device\cpu\hal\hardware\cpu_device_context.cc:258 SetOperatorInfo
****************************************************解答*****************************************************
报错里面说:
Operator[StridedSlice] input(String) output(String) is not supported.
但是这个算子的文档显示:
既然出错在print(names[0]),可能就需要把names改成Tensor才能索引。
但这个算子是切片算子啊,怎么会在索引上出错?你确定去掉了print(names[0])这行也能正常执行?
names类型是Tensor,不支持切片操作
转成numpy就可以了
names.asnumpy()[0]