• [API使用] 【mindspore产品】【numpy功能】使用数学函数时警告内存不足
    运行代码:显示warning:
  • [功能调试] MindSpore数据增强-【TypeError: Invalid with type】错误
    用户在数据增强时会定义Python function来实现自定义的数据增强,其中在操作输入数据时必须要了解输入数据的类型才能实现正确的数据增强。用户尝试定义Python function实现裁剪图片四个角和中间,脚本如下:在py_transform基本上再调用自定义的数据增强,脚本如下:报错如下:原因分析:实际上报错信息中可以一步步定位出具体错误所在位置:1.  错误发生位置在Map操作时传入的pyFunc,即自定义的Python数据增强函数。2. 查看Python的函数调用栈,错误发生在corp_4_corner_1_center 函数调用的np.concatenate函数中。3. 查看numpy.concatenate函数的API,如下: numpy.concatenate((a1, a2, ...), axis=0, out=None, dtype=None, casting="same_kind")其中a1, a2均为numpy.array,除了在axis指示的维度,其他维度的shape必须一致。可以得出报错原因为函数的函数为PIL.Image对象,与期望的Numpy array不符合。解决方法:在np.concatenate函数前,将PIL.Image对象转为Numpy array。总结:1. 遇到报错时,阅读报错日志以及错误堆栈信息可以帮忙定位问题。2. 调用第3方函数时,需要了解期望的入参的数据类型,不符合时需要做合适的转换。
  • [API使用] 【MindSpore】【nn.Dense】Dense 层的计算与numpy不一致
    在测试模型时,发现 MindSpore 中 nn.Dense 层的计算与 Numpy 的手动算 f(x) = xW + b 不一致【操作步骤&问题现象】1、MindSpore 测试代码import numpy as npimport mindspore.nn as nnimport mindspore.common.dtype as mstypefrom mindspore import load_checkpoint, load_param_into_net, Tensor, Parameterfrom mindspore.common.initializer import initializerfrom mindspore.train.model import Modelfrom mindspore.ops import operations as Pclass TestNet(nn.Cell):    def __init__(self):        super(TestNet, self).__init__()        self.print = P.Print()        self.mean = P.ReduceMean(keep_dims=False)        self.max = P.ReduceMax(keep_dims=False)        self.dense = nn.Dense(512,                              512,                              weight_init=initializer(init='normal', shape=[512, 512],                                                      dtype=mstype.float16),                              bias_init=initializer(init='zeros', shape=[512],                                                    dtype=mstype.float16))    def construct(self, x):        self.print("w", self.mean(self.dense.weight), self.max(self.dense.weight))        self.print("b", self.mean(self.dense.bias), self.max(self.dense.bias))        return self.dense(x)def run_mul_2(path):    np_rand = np.random.RandomState(seed=14)    w = np_rand.randn(512, 512).astype("float16")    b = np_rand.randn(512).astype("float16")        new_dict = {        "dense.weight": Parameter(w),        "dense.bias": Parameter(b)    }    net = TestNet()    load_param_into_net(net, new_dict)    inp_ = np_rand.randn(1, 512).astype(np.float16)    print("inp_: ", np.mean(inp_), flush=True)    model_predict = Model(net)    res = model_predict.predict(Tensor(inp_, mstype.float16))    print("out_: ", np.mean(res.asnumpy()), flush=True)    if __name__ == "__main__":    run_mul_2("None")2、Numpy 测试代码import numpy as npdef run_mul_4():    np_rand = np.random.RandomState(seed=14)    w = np_rand.randn(512, 512).astype("float16")    b = np_rand.randn(512).astype("float16")    inp_ = np_rand.randn(1, 512).astype(np.float16)    print("inp_: ", np.mean(inp_), flush=True)    print("w: ", np.mean(w), np.max(w),flush=True)    print("b: ", np.mean(b), np.max(b), flush=True)    res = np.matmul(inp_, w) + b    print("out_: ", np.mean(res), flush=True)【日志信息】如下是 MindSpore 测试代码的运行结果截图:如下是NumPy 测试代码运行截图:两边的输入x,权重w和偏置项bias均值,最大值都一致,我就认为它们是一致的。但最后的输出结果,out_ 的均值不一致,也就是输出结果不一致,不知道原因是啥。
  • [功能调试] MindSpore-GeneratorDataset报错误Unexpected error. Invalid data type
    MindSpore可以自定义Python数据源,通过迭代该数据源构造数据集。有点类似PyTorch的DataLoader。相关的API可以参考:mindspore.dataset.GeneratorDataset在ModelArt + GPU + MindSpore 1.2.0 环境下,使用GeneratorDataset接口加载自定义语音数据集,报出如下错误:Unexpected error. Invalid data type.Line of code : 109File: /home/jenkins/agent-working-dir/workspace/Compile_GPU_x86_Ubuntu_Cuda10/mindspore/mindpore/ccsrc/mindata/dataset/core/tensor.cc原因分析:问题出现的原因可能为,自定义的Datast 或map 操作中返回的是一个dict类型数据等,不是numpy array 或 numpy array 组成的元组(tuple)。因为其他类型(dict、object等)不是一个可控的数据类型同时也不明确其中的数据存储方式,因此报出Invalid type的错误。解决办法:需要确认下自定义的数据处理部分是否返回了dict等,需要返回numpy array或者检查一下自定义加载数据时,__getitem__ 函数需要返回值是 tuple,并且tuple的元素是 numpy类型。这里给出一个例子,标注了几个重要的地方进行numpy 的转换,请确认相关位置的数据类型是否为numpy或tuple[numpy]其他错误相关帖:https://bbs.huaweicloud.com/forum/thread-168965-1-1.htmlhttps://bbs.huaweicloud.com/forum/thread-169504-1-1.htmlhttps://gitee.com/mindspore/mindspore/issues/I4E08V
  • [基础知识] 【MindSpore易点通】数据处理之Numpy数组的广播计算
    简介在之前的分享中,对shape相同的数组进行计算非常方便。如果遇到了两个shape不同的数组,可以怎么计算呢?NumPy自带的一种广播机制可以满足这种需求,本次和大家一起探讨学习下。广播广播机制的意义:广播描述了在算术运算期间NumPy如何处理具有不同形状的数组。受某些约束条件的限制,较小的数组会在较大的数组中“广播”,以便它们具有兼容的形状。在对两个数组进行操作时,NumPy按元素对它们的形状进行比较。下面用两个shape(4,3)的数组计算实例进行演示说明。上面的两个shape(4,3)的数组计算很好理解,就是按照规则把对应位置上的元素进行计算,得到计算结果。下面再进行广播机制下的计算。广播机制是自动的,当满足可广播条件时,就会自动的进行广播计算。所以并不需要提前设置参数。根据结果看出,两次计算是等价的。本次进行计算的两个数组的shape是不一样的,shape(arr1)=(4,3)、shape(arr2)=(3, )。那么广播机制就是用补齐的方法,把两个数组补成shape一致进行计算,用一个可视化图帮助理解,如下图所示。NumPy按元素对它们的形状进行比较。比较的过程是从尾随维度(从内到外)开始的。如上面示例中,shape(arr2)=(3, )满足可广播成然后shape(arr1)=(4,3)的条件,所以arr2就会沿着轴0上进行广播,广播成同一形状后完成计算。广播的方式也不是在固定轴上的,再继续尝试下不同形状的数组,可以比较出效果。这里的arr1的shape(4,3),arr2的shape(4,1),它们都是二维的,但是第二个数组在1轴上的长度为1,所以需要沿着轴1轴方向进行广播。广播可视化效果如下图中所示。当然也适用在更多维的数组中。上面两次的广播计算中使用的两个数组维数仅差1或者0,所以只进行一次广播便可以具有相同形状,那么如果两个数组相差更多维还可以完成广播计算吗,所以创建shape(2,2,3,4)的arr1,shape(4, )的arr2。再看下效果。得出了计算结果,所以相差多维也依然是可行的,再看下这次广播都做了哪些事情。广播计算是以广播维数小的数组以适应维数大的数组进行计算,维数大的数组是这样的。这里arr2进行了3次广播具有了和arr1相同的形状,如上图所示。通过多次的尝试可以发现,任何形状的任意数量的数组可以一起广播的定义:满足其广播后的数组具有相同数量的维度,每个维度的长度是公共长度或1。当然,如果我们进行广播的数组的形状不同,那么广播的顺序也不同。总结本次分享通过示例演示说明了NumPy中的广播机制的计算原理和计算的效果。通过多次的尝试也发现进行广播计算时数组需要满足其广播后的数组具有相同数量的维度,每个维度的长度是公共长度或1的条件。谢谢浏览,文中若有错误之处,还请不吝赐教。
  • [问题求助] 【ModelZoo】【ResNet-50】ResNet-50数据集转换类型失败报numpy相关问题
    【功能模块】模型训练tensorflow数据集处理【操作步骤&问题现象】1、参照此链接里面的步骤执行到转换ImageNet数据集为TFRecord格式时报错https://www.hiascend.com/zh/software/modelzoo/detail/C/d63df55c1f7f4112a97c8a33e6da89fe【截图信息】【日志信息】(可选,上传日志内容或者附件)
  • [问题求助] 【ModelZoo】【ResNet-50】ResNet-50数据集转换类型失败报numpy相关问题
    【功能模块】【操作步骤&问题现象】1、参照此链接里面的步骤执行到转换ImageNet数据集为TFRecord格式时报错https://www.hiascend.com/zh/software/modelzoo/detail/C/d63df55c1f7f4112a97c8a33e6da89fe【截图信息】【日志信息】(可选,上传日志内容或者附件)
  • [API使用] 数据集里使用mindspore.numpy.pad出错
    我在数据集定义时使用了mindspore.numpy.pad对每张图片进行填充,但程序运行时会崩溃。我确定是由mindspore.numpy.pad导致的。请问该如何处理呢,我的需求是对数据集的每张图按不同的尺寸进行pad。
  • [基础知识] 【MindSpore易点通】数据处理之Numpy数组的轴和矢量化
    简介NumPy的基本对象是它的ndarray,这是一个n维数组,它也经常出现在面向数组的语言中。本篇内容将一起了解下n维数组中轴符号和矢量化操作,以便可以充分使用NumPy。这里从形成一个包含36个元素的三维数组开始。在二维中描绘高维数组可能会比较困难。考虑数组形状的一种直观方法是简单地“从左到右读取它”。arr 是一个3乘4乘3的数组。在视觉上,arr可以被认为是三个4x3网格的容器,用图像表示大概是如下图。如果是四维或者更多维,很难用图片展示出结构,可以想象是多个三维的数组组成,套娃式的理解。如果需要构造多维的数组时,也可以按照下面的理解方法。可根据自己需求改变参数即可。如上图中设置reshape(2,3,4,5),表示我们创建了个四维数组。这个四维数组包含2个三维数组;每个三维数组中包含3个二维数组;每个二维数组的行为4,列为5。轴符号在NumPy中,轴代表的一个多维数组的某一个维度,轴的数量是与维度数量相等的,但是需要注意轴是从0开始的。下面再测验下轴的顺序。这里根据结果反推轴的位置,上面分别设置了axis=0,1,2,3。当axis=0,计算作用在第四维,将包含的2个三维数组相加;当axis=1,计算作用在第三维,将包含的2个二维数组相加;当axis=2,计算作用在第二维,将包含的2个列相加;当axis=3,计算作用在第三维,将包含的2个行相加;可以发现axis从小到大的话,作用到数组的顺序是由外向内的。矢量化首先看看什么是矢量,广泛的解释:矢量(英语:Vector)是数学、物理学和工程科学等多个自然科学中的基本概念,指一个同时具有大小和方向的几何对象,因常常以箭头符号标示以区别于其它量而得名。直观上,矢量通常被标示为一个带箭头的线段。线段的长度可以表示矢量的大小,而矢量的方向也就是箭头所指的方向。在数组中进行矢量化操作是什么呢:矢量化是作用在整个数组上而不是在各个元素上发生的。通常,矢量化数组操作通常比其纯Python操作要快,在任何类型的数值计算中都具有最大的影响。在Python中循环数组或任何数据结构时,会涉及很多开销。 NumPy中的矢量化操作将内部循环委托给高度优化的C和Fortran函数,从而实现更清晰,更快速的Python代码。下面用示例展示效果。考虑一个True和False的一维向量,你要为其计算序列中“False to True”转换的数量,首先是用纯Python实现下。上面示例中使用了np.random.seed()函数,使用该函数的主要作用是保证每次生成的数组中的值是一致的,对其中传入的参数也随意,使用不同参数下生成的数组中的值是不同。在保证了每次使用的数组是相同的,这样就能够对比Python原生语法和调用NumPy两种方法的效率对比。第一次对比的时候设置的size比较小,整体运行下来所用时间也很短,这种情况下调用(Python/NumPy)得到的时间比值为2.8。总感觉这样不科学,再次使用祖传的控制变量法,改变size并保持p不变,改变p并保持size不变。经过多次的测试,最终的效率比保持在了65左右,很直观的看出来这两种矢量化操作在效率上差了很多,NumPy胜出很多。总结本次分享首先解释了数组维度和轴,接着用运行结果反推找到了维度和轴的使用顺序。矢量化是作用在整个数组上而不是在各个元素上发生的,通过Python和NumPy两种方法的运行,对比出NumPy在效率上更胜出。谢谢浏览,文中有不正确的地方欢迎指出~
  • [区域初赛赛题问题] python支持numpy库吗
    处理csv起来比较方便,不会不支持吧。。。
  • [问题求助] 【200加速卡】【运行报错】utilmodule没有找到 numpy_contiguous_to_ptr 函数
    【功能模块】200加速卡,CANN版本是5.0.2.alpha003【操作步骤&问题现象&截图信息】这个提示是不是说明acl.so库内没有此函数,但是我acl.so没动过它呀。采用acl.util.numpy_contiguous_to_ptr, 提示acl.util中找不到numpy_contiguous模块采用acl.util.numpy__to_ptr,提示int数据类型不可迭代,这里我也完全不明白报错代码段如下,采用acl.util.numpy_contiguous_to_ptr采用acl.util.numpy_to_ptr【日志信息】(可选,上传日志内容或者附件)
  • [问题求助] 【ATLAS 200DK】【python3.7.5】安装numpy后import报错
    【功能模块】Python3.7.5【操作步骤&问题现象】1、在Atlas200DK上按照下面链接里的教程从源码安装了python3.7.5,之后使用sudo pip3 install numpy安装numpy。安装提示success,但是在import numpy时会报错,报错内容见日志信息。https://gitee.com/lovingascend/quick_start/blob/master/Atlas200DK_catenation_MD/environment.md#%E5%BC%80%E5%8F%91%E8%80%85%E6%9D%BF%E5%AE%89%E8%A3%85%E4%BE%9D%E8%B5%962、cann版本为5.0.4.alpha005【截图信息】【日志信息】(可选,上传日志内容或者附件)Traceback (most recent call last):  File "/usr/local/python3.7.5/lib/python3.7/site-packages/numpy/core/__init__.py", line 22, in    from . import multiarray  File "/usr/local/python3.7.5/lib/python3.7/site-packages/numpy/core/multiarray.py", line 12, in    from . import overrides  File "/usr/local/python3.7.5/lib/python3.7/site-packages/numpy/core/overrides.py", line 7, in    from numpy.core._multiarray_umath import (ImportError: PyCapsule_Import could not import module "datetime"During handling of the above exception, another exception occurred:Traceback (most recent call last):  File "", line 1, in  File "/usr/local/python3.7.5/lib/python3.7/site-packages/numpy/__init__.py", line 150, in    from . import core  File "/usr/local/python3.7.5/lib/python3.7/site-packages/numpy/core/__init__.py", line 48, in    raise ImportError(msg)ImportError:IMPORTANT: PLEASE READ THIS FOR ADVICE ON HOW TO SOLVE THIS ISSUE!Importing the numpy C-extensions failed. This error can happen formany reasons, often due to issues with your setup or how NumPy wasinstalled.We have compiled some common reasons and troubleshooting tips at:    https://numpy.org/devdocs/user/troubleshooting-importerror.htmlPlease note and check the following:  * The Python version is: Python3.7 from "/usr/local/python3.7.5/bin/python3"  * The NumPy version is: "1.21.5"and make sure that they are the versions you expect.Please carefully study the documentation linked above for further help.Original error was: PyCapsule_Import could not import module "datetime"
  • [问题求助] 【ATLAS 200DK】【python3.7.5】安装numpy后import报错
    【功能模块】Python3.7.5【操作步骤&问题现象】1、在Atlas200DK上按照下面链接里的教程从源码安装了python3.7.5,之后使用sudo pip3 install numpy安装numpy。安装提示success,但是在import numpy时会报错,报错内容见日志信息。https://gitee.com/lovingascend/quick_start/blob/master/Atlas200DK_catenation_MD/environment.md#%E5%BC%80%E5%8F%91%E8%80%85%E6%9D%BF%E5%AE%89%E8%A3%85%E4%BE%9D%E8%B5%962、cann版本为5.0.4.alpha005【截图信息】【日志信息】(可选,上传日志内容或者附件)Traceback (most recent call last):  File "/usr/local/python3.7.5/lib/python3.7/site-packages/numpy/core/__init__.py", line 22, in    from . import multiarray  File "/usr/local/python3.7.5/lib/python3.7/site-packages/numpy/core/multiarray.py", line 12, in    from . import overrides  File "/usr/local/python3.7.5/lib/python3.7/site-packages/numpy/core/overrides.py", line 7, in    from numpy.core._multiarray_umath import (ImportError: PyCapsule_Import could not import module "datetime"During handling of the above exception, another exception occurred:Traceback (most recent call last):  File "", line 1, in  File "/usr/local/python3.7.5/lib/python3.7/site-packages/numpy/__init__.py", line 150, in    from . import core  File "/usr/local/python3.7.5/lib/python3.7/site-packages/numpy/core/__init__.py", line 48, in    raise ImportError(msg)ImportError:IMPORTANT: PLEASE READ THIS FOR ADVICE ON HOW TO SOLVE THIS ISSUE!Importing the numpy C-extensions failed. This error can happen formany reasons, often due to issues with your setup or how NumPy wasinstalled.We have compiled some common reasons and troubleshooting tips at:    https://numpy.org/devdocs/user/troubleshooting-importerror.htmlPlease note and check the following:  * The Python version is: Python3.7 from "/usr/local/python3.7.5/bin/python3"  * The NumPy version is: "1.21.5"and make sure that they are the versions you expect.Please carefully study the documentation linked above for further help.Original error was: PyCapsule_Import could not import module "datetime"
  • [基础知识] 【MindSpore易点通】数据处理之Numpy数组的使用
    简介本篇内容是上手NumPy的第二篇,NumPy这个词来源于两个单词-- Numerical和Python,所以两个要一起用才最好。后续内容将使用Python语言操作学习NumPy。NumPy的数组首先了解下NumPy数组的特性,数组是一个值网格,同一个数组内所有值的类型是相同的,并由非负整数元组索引。 维数是数组的排名; 数组的形状是一个整数元组,给出了每个维度的数组大小。这里通过创建一个三维的数组来验证下特性,数组中值的类型是相同的,都是numpy.int32打印出数组的形状也是元组类型,通过该元组可以了解到数组的维度和每个维度的数量。可以通过非负整数索引找到某一个值,也可以修改索引对应的值。上面是最常用的创建数组方法,当然也提供了特殊数组的创建方法,这里简单操作几种试一试,满足特殊使用。上面三种数组的共同点是数组内的值是相同的,但是前面两种只需传入一个元组参数,元组内说明数组的维度和大小,但是不能规定数组的值。第三种比较自由些,更能指定值,根据不同需求可选择不同的函数使用。上面三种函数创建的是可指定值的整数数组,下面再来试一试在0-1之间的随机小数组成数组,使用random.random()函数,效果如下。全都是小数点后有八位的小数,应该和该函数的源码参数有关,想要深入研究的小伙伴可以到仓库查看NumPy。NumPy数组的切片数组切片,这里的切片与Python列表类似,可以对numpy数组进行切片。由于数组可能是多维的,因此必须为数组的每个维指定一个切片。所以如果我们需要原数组中的一部分,可以通过切片的方法取得,例如想要将lc数组中的第一二行中的第二三列,那么操作可以如下,注意下标从0开始。这里是切的二维数组,那么需要传入两个切片范围,在不指定开始范围时,默认是0,且不包括下标为2的行。如果我们仅需要某一行或者某一列,只需传入该行或列的下标。这里的用法是将原数组中需要的值逐个索引出来,组成新的子数组。在传入索引值的时候,需要将所在行的值放在一个列表中,所在列的值放在另一个列表中,它在索引时会逐一配对,所以两个列表内元素数量要相同。得到子数组是一维的。根据上面通过两个列表配置索引位置,再尝试创建一个有序的列表,然后另一个列表提前定义好,最后组合起来使用,也是可行的。再接上面数组,用bool查找符合条件的值,符合为True,不符合为False。数据类型:每个numpy数组都是相同类型元素的网格。Numpy提供了一组可用于构造数组的大量数值数据类型。Numpy在创建数组时尝试猜测数据类型,但构造数组的函数通常还包含一个可选参数来显式指定数据类型。NumPy数组的计算继续尝试下数组和数组之间的计算,基本数学函数在数组上以元素方式运行,既可以作为运算符重载,也可以作为numpy模块中的函数。打印出来的效果是一致的。在上篇内容中介绍的dot()函数是以矩阵为单位计算的。这里的加减乘除运算是以元素为单体的计算,而不是矩阵之间的计算。这里还遇到一个小疑问,在操作数组进行开平方的时候,传入了两个数组x和y,但是只得到一个数组x的计算结果,当把参数位置调换后y和x,得到的结果却不是y的开方结果。还请了解原因的同学不吝赐教。当然除了使用数组计算数学函数外,我们经常需要对数组中的数据进行整形或其他操作。这种操作的最简单的例子是转置一个矩阵;要转置一个矩阵,只需使用一个数组对象的T属性。非常的简单易懂,通过使用得知,转置对一维的数组没有效果。在对二或者更多维数组进行转置的时候是有效的,转置的规则也不难发现,将会对需要转置的原数组从最外层开始,然后依次组成新数组的每一行。 广播机制:它允许numpy在执行算术运算时使用不同形状的数组。通常,我们有一个较小的数组和一个较大的数组,我们希望多次使用较小的数组来对较大的数组执行一些操作。比如如何让一个3×3的数组第一列值加3,第二列值加2,第三列值加1。第一种方法:再创建一个3×3的数组第一列值为3,第二列值为2,第三列值为1,然后两个数组相加,这是最直接有效的办法,但是如果数组每一维很大,就会很麻烦。第二种方法:Numpy广播允许我们在不创建很繁琐的v的情况下执行此计算。考虑这个需求,使用广播。总结本次内容主要对NumP的数组进行了比较详细的使用和介绍,使用中包括数组的特性、索引、切片以及一些特殊运算。介绍的内容是使用NumPy计算时原理的解释。欢迎各位同学留言讨论~这样也可以得到想要的结果。y=x+v行即使x具有形状(3,3)和v具有形状(3, ),但由于广播的关系,该行的工作方式就好像v实际上具有形状(3,3),其中每一行都是v的副本,并且求和是按元素执行的。所以广播机制的使用会让效率更高,代码更简洁。
  • [问题求助] 【200DK产品】AclLiteImage
    昨天查看acllite的说明文档,里面的函数可以将AclLiteImage格式的图片转为numpy array的二进制文件,有没有封装好的函数可以将其转为opencv可以处理的numpy类型,使用cv2.imdecode函数用时过长
总条数:107 到第
上滑加载中