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可以输入到模型得到正确的输出结果。

Logo

鲲鹏昇腾开发者社区是面向全社会开放的“联接全球计算开发者,聚合华为+生态”的社区,内容涵盖鲲鹏、昇腾资源,帮助开发者快速获取所需的知识、经验、软件、工具、算力,支撑开发者易学、好用、成功,成为核心开发者。

更多推荐