切换版块
×
基础软件平台
PyTorch开发
TensorFlow开发
编解码及SDK开发
BANG语言与计算库
开发工具链
MagicMind开发
软件栈百科
云平台集成
硬件产品专区
MLU370系列AI加速卡
MLU270系列AI加速卡
MLU220系列AI加速产品
经验方案交流区
经验案例与实践分享
开发者服务
开发者活动
公告与版务
高校支持
《智能计算系统》
签到
版块
社区
文档
SDK下载
370系列
200系列
开发平台
官网首页
注册
登录
全部版块
基础软件平台
硬件产品专区
经验方案交流区
开发者服务
高校支持
发布新帖
登录/注册
LV.1
dyou123
37
积分
0
赞
2
帖子
32
回复
0
收藏
TA的动态
TA的帖子
TA的回复
lstm模型输出结果异常
我的回复:#24zhangyanting回复您好,CNRT的输入和输出默认是NHWC,您需要做相关转置。下方前20个输出结果的mlu和cpu的精度对比,由于您进行了int8量化,因此会对精度造成了一定损失。mlu: 6.890625000000000000e+00 -1.113281250000000000e+00 -5.964843750000000000e+00 -3.063964843750000000e-01 4.343750000000000000e+00 -2.101562500000000000e+00 9.674072265625000000e-02 -1.325195312500000000e+00 -1.450195312500000000e+00 2.435546875000000000e+00 -2.755859375000000000e+00 7.214843750000000000e+00 3.029296875000000000e+00 9.555664062500000000e-01 -5.512695312500000000e-01 2.328125000000000000e+00 9.604492187500000000e-01 6.394531250000000000e+00 -1.645507812500000000e-01 -4.324218750000000000e+0cpu: 9.038786888122558594e+00 -2.188739538192749023e+00 -7.382113933563232422e+00 6.280529499053955078e-02 5.158084392547607422e+00 -2.028887271881103516e+00 -4.253607988357543945e-01 1.081809997558593750e-01 -1.120917081832885742e+00 2.655514478683471680e+00 -3.744379043579101562e+00 9.149456977844238281e+00 3.738803625106811523e+00 -1.252558469772338867e+00 -3.952614068984985352e-01 1.592808723449707031e+00 7.857535481452941895e-01 8.117773056030273438e+00 6.915171146392822266e-01 -5.211871147155761719e+00展开这个并不是转置的问题,您细看我发的代码就知道了
0
lstm模型输出结果异常
我的回复:#24zhangyanting回复您好,CNRT的输入和输出默认是NHWC,您需要做相关转置。下方前20个输出结果的mlu和cpu的精度对比,由于您进行了int8量化,因此会对精度造成了一定损失。mlu: 6.890625000000000000e+00 -1.113281250000000000e+00 -5.964843750000000000e+00 -3.063964843750000000e-01 4.343750000000000000e+00 -2.101562500000000000e+00 9.674072265625000000e-02 -1.325195312500000000e+00 -1.450195312500000000e+00 2.435546875000000000e+00 -2.755859375000000000e+00 7.214843750000000000e+00 3.029296875000000000e+00 9.555664062500000000e-01 -5.512695312500000000e-01 2.328125000000000000e+00 9.604492187500000000e-01 6.394531250000000000e+00 -1.645507812500000000e-01 -4.324218750000000000e+0cpu: 9.038786888122558594e+00 -2.188739538192749023e+00 -7.382113933563232422e+00 6.280529499053955078e-02 5.158084392547607422e+00 -2.028887271881103516e+00 -4.253607988357543945e-01 1.081809997558593750e-01 -1.120917081832885742e+00 2.655514478683471680e+00 -3.744379043579101562e+00 9.149456977844238281e+00 3.738803625106811523e+00 -1.252558469772338867e+00 -3.952614068984985352e-01 1.592808723449707031e+00 7.857535481452941895e-01 8.117773056030273438e+00 6.915171146392822266e-01 -5.211871147155761719e+00展开您这要是解释为量化损失的话,那这个量化损失就太离谱了,我转了七八个模型,只有这个lstm模型存在这种问题。是lstm模型量化损失较大吗?另外我提到的设置mean=[0,0,0], std=1,use_firstconv分别设为0和1的情况,结果大不相同,这似乎也不太合理呀?
0
lstm模型输出结果异常
我的回复:#22zhangyanting回复您好,您可以尝试下把std设为1,看看结果是否符合预期。这个试过了,cpu和mlu代码中统一设置:mean=[0,0,0], std=1cpu结果:[[0]] 10.884485[[0]] 21.488785[[0]] 33.21021[[0]] 33.22379[[0]] 29.092976[[0]] 12.942553[[0]] 28.53116[[0]] 30.393711[[0]] 15.588205[[0]] 21.283323[[0]] 30.011887[[0]] 22.923153[[0]] 17.473858[[0]] 28.751379[[0]] 29.601063[[0]] 25.026934[[0]] 14.760608[[0]] 36.701244[[0]] 34.12405[[0]] 20.486364[[0]] 12.991854[[0]] 37.426823[[0]] 25.84907[[0]] 14.0447035[[0]] 34.449768[[0]] 35.63881[[0]] 30.176765mlu220结果(use_firstconv = 0):0 6.96093842 6.2539060 9.1953120 11.60156214 6.3593756 8.7968756 11.4609386 12.5000006 10.99218842 11.10156242 10.56250042 9.75781242 9.88281242 9.69531242 9.52343842 9.4843756 10.4453126 11.5859386 11.7890626 10.6171886 10.3828126 8.8593750 8.4218750 11.5937500 13.8203120 14.2187500 13.960938mlu220结果(use_firstconv = 1):0 11.4609380 15.7578120 28.2187500 12.9453120 15.0156250 9.1250000 12.8203120 10.7734380 13.7734380 11.5156250 12.0156250 11.6171880 12.1250000 14.2343750 13.3359380 14.8046880 12.6640620 11.7109380 10.7265620 13.7578120 8.2578120 11.7187500 10.8046880 14.0703120 14.1093750 14.4843750 12.187500这是板子上的sdk版本: CNRT: 4.7.12 03ea1d9
0
lstm模型输出结果异常
我的回复:#19zhangyanting回复是的,我们这边为了保持输入严格一致,关闭了use_firstconv,得到的mlu结果和cpu结果是一致的。烦请您把完整的打印结果发出来,我比对下看看
0
lstm模型输出结果异常
我的回复:#18zhangyanting回复根据您的配置文件,您最终需要得到的应该是:= (img - [123.68, 116.78, 103.94]) / 0.0039215686展开额。。。难道我对文档理解有误?这是官方文档(寒武纪Caffe用户手册-v5.3.1.pdf)对std的描述,由于没办法上传图片我就不截图了,直接粘贴过来:std:缩小倍数,默认值为1。像mobilenet中的0.017,实际意义是让输入乘以0.017倍,所以设std为0.017。而对于有些方差是128的网络,实际意义是让输入乘以1/128倍,所以设std为0.0078125。如果量化网络使用frstconv层,就需要在生成的量化网络的第一层卷积处设置std参数。std支持分通道设置。
0
lstm模型输出结果异常
我的回复:#16dyou123回复是这样的,我这里是移植pytorch的写法,表述上可能有点差异,我们推到下看看:(img/255-[0.485, 0.456, 0.406])/[1,1,1]= (img/255-[0.485, 0.456, 0.406])= (img - [123.68, 116.78, 103.94])/255= (img - [123.68, 116.78, 103.94])*0.0039215686展开这是否就与ini文件中的设置一致了呢?
0
lstm模型输出结果异常
我的回复:#14zhangyanting回复您的配置文件是:mean = 123.68, 116.78, 103.94std = 0.0039215686您的推理代码: mean = np.array([0.485, 0.456, 0.406], dtype=np.float32) std = np.array([1, 1, 1], dtype=np.float32) img = (img / 255.0 - mean) / std正确的情况您的std应该使用0.0039215686。展开是这样的,我这里是移植pytorch的写法,表述上可能有点差异,我们推到下看看:(img/255-[0.485, 0.456, 0.406])/[1,1,1]= (img/255-[0.485, 0.456, 0.406])= (img - [123.68, 116.78, 103.94])/255= (img - [123.68, 116.78, 103.94])*0.0039215686
0
lstm模型输出结果异常
我的回复:#12zhangyanting回复您好,在cpu测试时,您所使用的归一化公式“输入=(输入/方差) - 均值”并不正确,您需要使用公式“输入=(输入-均值)/方差”;此外,您在设置量化使用的方差是1/255,但您在计算时使用的方差是1。展开这样,cpu上预处理归一化那些都不要:img_file = '1.jpg'img = cv2.imread(img_file)img = cv2.resize(img, (192,64))img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)img = img.astype(np.float32)img = img.transpose([2, 0, 1])net.blobs['data'].data[0,:,:,:] = img转换设置use_firstconv = 0这样是否就能保证一致了?
0
lstm模型输出结果异常
我的回复:#12zhangyanting回复您好,在cpu测试时,您所使用的归一化公式“输入=(输入/方差) - 均值”并不正确,您需要使用公式“输入=(输入-均值)/方差”;此外,您在设置量化使用的方差是1/255,但您在计算时使用的方差是1。展开您仔细看一下,cpu代码里是先归一化(1/255)再减均值除方差,计算结果是一样的。最后您说我在计算时使用的方差是1是指哪里?
0
lstm模型输出结果异常
我的回复:#10zhangyanting回复您好,非常抱歉,目前并没有220/270系列的lstm模型使用示例。在没有相关github和测试代码的情况下,我们无法复现您的问题,您可以尝试关闭first conv,在确保输入数据一致的情况下,对比cpu和mlu的输出结果。展开您好,由于论坛今天不能上传文件,我把测试代码放到网盘了,包括cpu和mlu的测试代码,以及模型和转换脚本。链接:https://pan.baidu.com/s/1XzaNa9RlAEwyO86tPMCFog 提取码:7992
0
上一页
1
2
下一页
Github
开发平台
文档中心
新手必读
官方微信
版权所有 © 2024 寒武纪 Cambricon.com 备案/许可证号:
京ICP备17003415号-1
关闭