维度数错误引起模型输入错误:For primitive[Conv2D], the x shape size must be equal to 4, but got 3.
硬件环境(Ascend/GPU/CPU): GPU软件环境:– MindSpore 版本: 1.7.0执行模式: 静态图(GRAPH) – Python 版本: 3.7.6– 操作系统平台: linux。
1.系统环境
硬件环境(Ascend/GPU/CPU): GPU
软件环境:
– MindSpore 版本: 1.7.0
执行模式: 静态图(GRAPH) – Python 版本: 3.7.6
– 操作系统平台: linux
2.报错信息
2.1 问题描述
将处理好的图像tensor向量输入到模型,由于tensor的维度数未和模型的输入设置匹配导致运行错误。
2.2 报错信息
ValueError: mindspore/core/utils/check_convert_utils.cc:397 CheckInteger] For primitive[Conv2D], the x shape size must be equal to 4, but got 3.
2.3 脚本代码
if __name__ == '__main__':
inputs = AFR.load_data('opencv_photo/input/')
targets = AFR.load_data('opencv_photo/target/')
adversarial = AFR.Attack(inputs[0], targets[0])
复制
class Attack(object):
if (seed != None): np.random.seed(seed)
self.MEAN = Tensor([0.485, 0.456, 0.406])
self.STD = Tensor([0.229, 0.224, 0.225])
self.LOSS = Tensor(0)
self.imageize = ToPILImage()
self.tensorize = ToTensor()
self.normalize = P.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])
self.resnet = get_net()
self.input_tensor = Tensor(self.normalize(self.tensorize(input_img)))
self.target_tensor Tensor(self.normalize(self.tensorize(target_img)))
self.input_emb = self.resnet(self.input_tensor)
复制
3.根因分析

看报错信息the x shape size must be equal to 4, but got 3. 意思是x形状的大小必须等于4,但得到了3。

调试发现self.input_tensor的维度数为3,需要增加一维。
4.解决方案
解决方案说明:对self.input_tensor的维度数进行扩充,来匹配模型的输入。增加的一维就是batch数。利用mindspore.ops.ExpandDims()来进行维度的扩充。
修改后代码:
class Attack(object):
if (seed != None): np.random.seed(seed)
self.MEAN = Tensor([0.485, 0.456, 0.406])
self.STD = Tensor([0.229, 0.224, 0.225])
self.LOSS = Tensor(0)
self.expand_dims = mindspore.ops.ExpandDims()
self.imageize = ToPILImage()
self.tensorize = ToTensor()
self.normalize = P.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])
self.resnet = get_net()
self.input_tensor = Tensor(self.normalize(self.tensorize(input_img)))
self.target_tensor Tensor(self.normalize(self.tensorize(target_img)))
self.input_emb = self.resnet(self.expand_dims(self.input_tensor,0))
复制
正常执行结self.input_tensor可以输入到模型得到正确的输出结果。
鲲鹏昇腾开发者社区是面向全社会开放的“联接全球计算开发者,聚合华为+生态”的社区,内容涵盖鲲鹏、昇腾资源,帮助开发者快速获取所需的知识、经验、软件、工具、算力,支撑开发者易学、好用、成功,成为核心开发者。
更多推荐



所有评论(0)