• [问题求助] 出错了!json报错,什么情况啊
  • [问题求助] 在线部署传入数据格式问题
    在线部署时候按照要求使用Json格式但是报错查看log,好象是传入之后变成词典类型但是在预测左边加了引号就发送失败了,必须JSON格式
  • [技术干货] App Engine平台体验优化之JSON Schema
  • [问题求助] 导入模型部署线上服务的时候,如何编写模型配置的json文件以及自定义推理代码中的_postprocess函数传回一张图片
  • [问题求助] VUE模版中没有package.json文件
    用We码开发工具,VUE模版中没有package.json文件,怎么添加项目依赖的模块列表
  • [问题求助] 用We码开发工具,VUE模版中没有package.json文件,怎么添加项目依赖的模块列表
    用We码开发工具,VUE模版中没有package.json文件,怎么添加项目依赖的模块列表
  • [问题求助] 关于模型导入过程中config.json文件配置问题
    我想从线下将模型导入到modelarts中,要求需要配置一个config.json文件。其中最重要的是配置apis参数,目前我的问题是不知道如何配置apis。先说一下我的模型情况。使用的算法是xgboost算法,训练过程,输入数为9,输入数为1import xgboost as xgbmodel = xgb.XGBRegressor()model.fit(x_train, y_train)    #x_train, y_train 都是array类型,x_train有9列的数组,即x_train.shape=(n,9)。joblib.dump(model,'name.m')我配置了config.json文件,见附1。1.模型能够成功导入,并且成功部署2.部署后无法成功预测,预测代码见附2。3.报错见附3。因此,我具体是哪个步骤错误,导致了报错。感谢您的回答。附1 我配置的config.json文件配置如下:{"model_type": "XGBoost","model_algorithm": "predict_analysis","metrics": {"R2": xxx},"apis": [{"protocol": "https","url": "/","method": "post","request": {"Content-type": "application/json","data": {            "type": "object",            "properties": {                "data": {                    "type": "object",                    "properties": {                        "req_data": {                            "items": [                                {                                    "type": "object",                                    "properties": {                                        "attr_2": {                                            "type": "string"                                        },                                        "attr_3": {                                            "type": "string"                                        },                                        "attr_1": {                                            "type": "string"                                        },                                        "attr_6": {                                            "type": "string"                                        },                                        "attr_7": {                                            "type": "string"                                        },                                        "attr_4": {                                            "type": "string"                                        },                                        "attr_5": {                                            "type": "string"                                        },                                        "attr_8": {                                            "type": "string"                                        },                                        "attr_9": {                                            "type": "string"                                        }                                    }                                }                            ],                            "type": "array"                        }                    }                }            }        }        },        "response": {            "Content-type": "application/json",            "data": {            "type": "object",            "properties": {                "resp_data": {                    "items": [                        {                            "type": "object",                            "properties": {                                "predictresult": {                                    "type": "number"                                }                            }                        }                    ],                    "type": "array"                }            }        }    }}]}附2 预测代码如下{  "data":   {    "count": 1,    "req_data": [      {        "attr_1": "2",        "attr_2": "2",        "attr_3": "10",        "attr_4": "10",        "attr_5": "10",        "attr_6": "10","attr_7": "10","attr_8": "10","attr_9": "10"      }    ]  }}附3  报错{    "erno": "PY.0105",    "msg": "Predict failed",    "error_info": "Traceback (most recent call last):\n  File \"/home/ma-user/predict/flaskTask.py\", line 40, in predict_model\n    res_data = model_service.inference(request_data)\n  File \"/home/ma-user/predict/model_service/model_service.py\", line 31, in inference\n    pre_result = self._inference(list_data)\n  File \"/home/ma-user/predict/model_service/python_model_service.py\", line 32, in _inference\n    pre_result = predict(self.model_path, pre_data)\n  File \"/home/ma-user/predict/model_service/python_model_service.py\", line 51, in predict\n    load_model = xgb.Booster(model_file=model_path)\n  File \"/home/ma-user/anaconda2/lib/python2.7/site-packages/xgboost/core.py\", line 865, in __init__\n    self.load_model(model_file)\n  File \"/home/ma-user/anaconda2/lib/python2.7/site-packages/xgboost/core.py\", line 1276, in load_model\n    _check_call(_LIB.XGBoosterLoadModel(self.handle, c_str(fname)))\n  File \"/home/ma-user/anaconda2/lib/python2.7/site-packages/xgboost/core.py\", line 151, in _check_call\n    raise XGBoostError(_LIB.XGBGetLastError())\nXGBoostError: [15:22:54] /workspace/src/learner.cc:295: Check failed: fi->Read(&name_obj_[0], len) == len (456531 vs. 1481508721) BoostLearner: wrong model format\n\nStack trace returned 10 entries:\n[bt] (0) /home/ma-user/anaconda2/xgboost/libxgboost.so(dmlc::StackTrace()+0x42) [0x7f2ffe1ff4a2]\n[bt] (1) /home/ma-user/anaconda2/xgboost/libxgboost.so(dmlc::LogMessageFatal::~LogMessageFatal()+0x18) [0x7f2ffe1ffb08]\n[bt] (2) /home/ma-user/anaconda2/xgboost/libxgboost.so(xgboost::LearnerImpl::Load(dmlc::Stream*)+0x434) [0x7f2ffe2b32c4]\n[bt] (3) /home/ma-user/anaconda2/xgboost/libxgboost.so(XGBoosterLoadModel+0x37) [0x7f2ffe240107]\n[bt] (4) /home/ma-user/anaconda2/lib/python2.7/lib-dynload/../../libffi.so.6(ffi_call_unix64+0x4c) [0x7f301a6d0ec0]\n[bt] (5) /home/ma-user/anaconda2/lib/python2.7/lib-dynload/../../libffi.so.6(ffi_call+0x22d) [0x7f301a6d087d]\n[bt] (6) /home/ma-user/anaconda2/lib/python2.7/lib-dynload/_ctypes.so(_ctypes_callproc+0x4d6) [0x7f301a8e6736]\n[bt] (7) /home/ma-user/anaconda2/lib/python2.7/lib-dynload/_ctypes.so(+0x8a61) [0x7f301a8dca61]\n[bt] (8) /home/ma-user/anaconda2/bin/../lib/libpython2.7.so.1.0(PyObject_Call+0x43) [0x7f301f7c7773]\n[bt] (9) /home/ma-user/anaconda2/bin/../lib/libpython2.7.so.1.0(PyEval_EvalFrameEx+0x190b) [0x7f301f85b53b]\n\n\n"}
  • [问题求助] 第三个作业,读取JSON格式错误,哪里搞错了?
  • [问题求助] 第三个作业,不能生成 details.json 文件,怎么回事呢?
  • [技术干货] 云平台中继位置服务开发指南
    1. 开发概述第三方位置服务应用与华为云平台实现云平台中继数据对接需要实现以下4点功能:1. 对云平台配置的validator的匹配校验;2. 对终端位置数据中secret的匹配校验;3. 对终端数据的解析,计算终端位置;4. 对终端数据实现增值功能:地图编辑,客流分析,用户画像,位置热图,室内导航等。2. 开发实现的业务流程2.1 validator校验validator是华为云平台随机生成的校验码,UUID格式,用于华为云平台对位置应用的安全校验。对接时,开发者在华为云平台上生成validator,或者向云平台管理员申请validator;并将目标URL和secret配置在云平台上。在发送数据前,云平台会校验第三方位置服务应用返回的validator是否匹配。如果不匹配则不会发送终端数据。校验方式是云平台向目标URL发起GET请求,校验返回值。假设生成的UUID为" xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",那GET方法返回的应该是一个JSON体,内容为:{"validator":"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"}。开发者开发结束后可以进行自校验:2.2 secret校验secret是第三方位置应用提供的校验字,16进制字段,长度最长32,用于第三方位置应用对云平台数据的校验。对接时,开发者要在华为云平台配置secret,或将URL和secret告知云平台管理员。若第三方位置应用收到的数据secret不匹配,说明云平台身份存在问题,应用可选择丢弃此数据。校验方式是对云平台上报JSON数据中secret字段进行检查。2.3 数据解析通过validator的校验后,若AP开启位置信息上报功能且有终端在线,则进入终端位置数据发送和解析阶段。 若第三方位置应用收到的数据secret不匹配,说明云平台身份存在问题,应用可选择丢弃此数据。云平台通过HTTPS POST方式向目标URL发送定位数据;第三方应用将JSON数据解析并计算定位结果。请求体中的终端位置数据采用如下JSON格式:{"data": [{"apMac": "4C:FA:CA:D8:23:A0","terminalList": [{"terminalMac": "88:19:08:F1:88:45","rssi": -68,"timestamp": 1557460789000},{"terminalMac": "90:2E:1C:6A:2A:57","rssi": -57,"timestamp": 1557460789000}]}],"secret": "Test@1234","type": "ApLocation"}上述请求示例中的字段说明如下:2.4 增值业务开发者按业务需求实现地图编辑,客流分析,用户画像,位置热图,室内导航等功能。具体功能由开发者实现。3. 对接常见数据3.1 终端上报数据少AP会对多个信道进行扫描,且扫描时间过长会影响正常WIFI业务体验。解决办法:1、增加终端的活跃性(播放视频,长Ping等)。2、提高AP的扫描时长,减少扫描新倒数。在“站点配置-AP-射频-高级配置”下修改配置:3.2 无终端信息上报解决办法:1. 勾选上报终端位置信息。2. SSID信号可以连接公网。3. 云平台与位置应用互通。
  • [热门活动] 星云精准测试对安卓底层驱动代码的测试案例分析
    Android原生底层驱动应用面极广,但一直没有很好的办法进行质量追踪。本文借助星云精准测试的高可靠性的测试技术手段,针对Android原生底层驱动进行分析、插桩、编译、采集数据、数据分析等,逐步讲解精准测试是如何实现android原生底层驱动的对接。 在本文中,我们可以清晰地查看到如何进行技术对接的每一步,比如如何使用星云精准测试进行代码插桩、实现测试用例与采集底层驱动运行代码的数据追溯、对最终采集的数据进行一系列分析等。 ## 一、安卓源码精准测试流程概述 经分析android源码的编译主要依靠Android.bp为纽带连接起来;在编译时,只需要在想要编译的模块目录下执行mm命令即可自动的根据当前目录下的Android.bp文件对其所包含的模块进行编译。 ![](https://upload-images.jianshu.io/upload_images/13279626-c47f4b53e8ec7489.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) 主要流程大致为:先将ZOA通信库源码复制进去并加入某一层次的Android.bp中,再通过对包含所有Android.bp编译信息的ninja文件的解析可以得到Shell认可的插桩json文件,Shell通过json文件对对应目录的代码进行插桩,插桩完成后,把对ZOA通信库的引用加入该模块的Android.bp中再放入ZoaInstru.h头文件后就可以正常编译出插桩程序了。 ## 二、对安卓源码进行精准测试的准备工具 1.安卓原生8.1.0系统源码,放于/data/source2/目录下 2.shell.tar.gz插桩工具包放于/data/目录下 3.ZOAMQLib通信库源码放于/data/source2/ frameworks/av/目录下 4.谷歌官方装有原生8.1.0系统手机一部 本例是对/data/source2/ frameworks/av/camera模块进行插桩编译,首先source build/envsetup.sh配置环境变量,再lunch后输入2选择aosp_arm64-eng,再mm编译模块 ## 三、精准测试插桩工具部署 在存放精准测试插桩工具包的/data/目录下执行命令 `tar -zxvf shell.tar.gz` 将精准测试插桩工具包解压 `cd /data/shell/bin` 进入shell包bin目录下打开并修改Server.cfg的[SERVER]字段的ip为星云精准测试服务端ip,对[LOCAL]字段的ip,客户端若与服务端在同一主机则保持127.0.0.1,若在不同主机则写明客户端ip。 ## 四、ZOA通信库加入安卓体系 本次选择av模块进行精准测试的插桩编译验证模块,在对av模块进行深入了解后,解析出其Android,bp的连接其结构大致如此,每一个最终节点就代表会生成一个动态库或者静态库。 av大致结构与ZOA通信库加入安卓体系示意图: ![](https://upload-images.jianshu.io/upload_images/13279626-4a69a659abf0f1e5.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) 注:由于第二层mediadrm模块库目录过多不便展开,但原理又是相同,所以仅对该模块展示骨架信息;绿色部分代表会产生一个库文件,mediadrm只是骨架结构所以未标识。 本次是将写好对应的Android.bp文件的ZOA通信库源代码目录整个复制到av目录下,并在av目录下的Android.bp文件中加入ZOA通信库的目录。 `cd /data/source2/frameworks/av/` 进入av模块 `vi Android.bp` 打开av模块的Android.bp文件,并将ZOAMQLib目录加入其中 ZOA通信库加入av模块的Android.bp图示: ![](https://upload-images.jianshu.io/upload_images/13279626-3600fb2bd0493e87.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) 然后在ZOAMQLib目录下直接执行mm命令,编译出安卓体系下的ZOA通信库。 ## 五、插桩编译流程 ### 1.生成json文件 android源码在进行编译时他会将所有的Android.bp中的信息提取出来并添加一些编译信息来生成一个build.ninja文件。该文件中含有编译的模块、源代码和编译参数等信息。 通过android自带的ninja工具可以将该build.ninja文件转化为包含源代码路径、源代码名字和编译参数信息的json文件;再通过工具可以将要插桩模块的部分提取出来生成该模块的插桩json文件 生成json文件的命令: `/data/source2/prebuilts/build-tools/linux-x86/bin/ninja -t compdb g.cc.cc > compile_commands.json` 其中/data/source2/为安卓源代码路径 ### 2.插桩代码 shell编译器可以通过该json文件对该模块进行插桩或还原操作。 插桩代码命令 shell的路径/shell -p json文件的路径/ compile_commands.json 还原代码命令 shell的路径/shell -r json文件的路径/ compile_commands.json 本次插桩与还原命令: ``` /data/shell/bin/shell -p /data/source2/compile_commands.json /data/shell/bin/shell -r /data/source2/compile_commands.json ``` 插桩成功后在客户端重新加载版本数据: ![](https://upload-images.jianshu.io/upload_images/13279626-e1446112f3fb3e18.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) ### 3.编译链接 #### 链接通信库 `cd /data/source2/frameworks/av/camera` 进入camera目录下 `vi Android.bp` 打开camera模块的Android.bp文件并在shared_libs中加入ZOA通信库的名字 camera的Android.bp加入ZOA通信库链接图示: ![](https://upload-images.jianshu.io/upload_images/13279626-fb7c76d8024f7e18.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) #### 加入头文件 `cp /data/shell/include/ZoaInstru.h /data/source2/frameworks/av/camera/include/` 将ZOA的头文件加入插桩的camera的头文件夹中 然后就可以按照正常的编译流程来进行编译,执行mm编译该模块。 #### 插桩编译图示: ![](https://upload-images.jianshu.io/upload_images/13279626-39e719412589806d.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) ## 六、测试方式 本例是将安卓原生8.1.0代码进行插桩后,放入谷歌官方8.1.0系统并获得root权限的手机中进行测试 本次插桩的是av模块的camera部分,所以我们将 camera模块库: `/data/source2/out/soong/.intermediates/frameworks/av/camera/libcamera_client/android_arm64_armv8-a_shared_core/libcamera_client.so` ZOA通信库: `/data/source2/out/soong/.intermediates/frameworks/av/ZOAMQLib/libZOAMQLib/android_arm64_armv8-a_shared_core /libZOAMQLib.so` 这两个库放进手机的/system/lib64/目录中开机进行相机测试。 测试概念图: ![](https://upload-images.jianshu.io/upload_images/13279626-3de1f8bdefc9acfb.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) 将被测手机开机后用usb线连接到电脑上,采用adb端口映射的方法将程序运行时产生的动态数据传输到星云精准测试工具上,再通过示波器进行波形展示。 数据传输图: ![](https://upload-images.jianshu.io/upload_images/13279626-e3e8778533cef921.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) 在星云精准测试工具客户端打开示波器界面,建立测试用例并选择测试用例后点击 开始 并对手机进行相机功能的操作就可以在接收到动态数据并示波器看到波形了。 示波器接收数据图: ![](https://upload-images.jianshu.io/upload_images/13279626-efff5bfab6ee85d2.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) ## 七、精准测试-基础功能 ### 1.覆盖率 在对测试用例录制完成后就可以在主界面看到覆盖率等相关信息。 在函数列表中随便点开一个函数就可以查看该函数的各项覆盖率。 1.SCO覆盖率 SCO覆盖率即为语句块覆盖率,在函数内顺序执行遇见if、for、while等就算为一个语句块。 SC0覆盖率图示: ![](https://upload-images.jianshu.io/upload_images/13279626-bb3b2c51b808a6a1.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) 2.MCDC覆盖率 MCDC 修订条件判定覆盖,精准测试中对mcdc做了量化展示,分别统计单一条件个数,针对每一个条件判断是否满足mcdc覆盖如果满足如上图绿色表示条件满足mcdc覆盖,蓝色表示不满足。并对MCDC做了详细信息的展示(选择MCDC覆盖,点击判定,显示MCDC的详细信息) MCDC覆盖率图示: ![](https://upload-images.jianshu.io/upload_images/13279626-95decb3d233a8fa9.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) 注: 1.覆盖率信息一共有七种,分别为SCO语句块覆率、True、Flase、Both等条件覆盖率、Branch条件分支覆盖率、CDC条件判定覆盖率、MCDC修正条件判定。 2.精准测试默认是不关联源码的,如需要关联源代码使用,请将源码复制到客户端本地,在版本上右键选择修改源码路径,然后添加源码路径来关联源码。 ### 2.函数调用关系图 函数调用图,只有函数调用的关系,能够比较清楚地看清函数调用的层次关系。当点击其中的某个函数时,能显示以该函数为中心,调用该函数的上三层和下三层调用(可点击设置层级进行层级的调整)。 当接收过动态数据后还能将各项数据显示在图像界面中。 ![](https://upload-images.jianshu.io/upload_images/13279626-a636d613a887db4d.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) ### 3.程序控制流程图 控制流程图基础功能是展示函数的控制流程,即控制流程图,用于表示函数的控制流程、显示测试覆盖率结果、实现半自动高效率测试用例设计,进行逻辑流程查错,以及源码、测试用例和相关文档之间的双向自动追溯等。 ![](https://upload-images.jianshu.io/upload_images/13279626-a40dd5c2973f1b3c.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) ### 4.简易控制流程图 简易控制流程图功能,以语句块的形式清晰的展示函数内部的控制逻辑,界面上可以直观的看出控制流各节点的测试覆盖情况,在展示中,简易控制流程图还可以通过颜色对每个程序块进行覆盖率标识,在缩略图中整个模块的覆盖率非常直观。(背景色为绿色表示有测试用例覆盖到该块)关联源码后点击语句块可定位到代码具体行。 ![](https://upload-images.jianshu.io/upload_images/13279626-1f891dd5b017cf60.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) ### 5.双向追溯 由于精准测试的测试用例与执行过的函数绑定,可以在测试台通过选择不同的测试用例来正向追溯找到它执行过的函数;或者通过选择不同的函数或代码来反向追溯找到执行过它的测试用例。 正向追溯图示: ![](https://upload-images.jianshu.io/upload_images/13279626-e17a3f6aa189eea6.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) 该正向追溯是通过在左上侧选择测试用例来在下方展示该测试用例运行过的函数 反向追溯图示: ![](https://upload-images.jianshu.io/upload_images/13279626-e9061304eccf1e51.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) 反向追溯既可以通过左下角的函数来追溯运行过该函数的测试用例,还可以通过选择代码块来追溯运行过该块的测试用例。 ## 八、精准测试-高级分析功能 ### 1.智能回归测试用例选取 在第一个版本测试完成后对第二个版本进行插桩后就在星云精准测试工具生成了第二个工程版本。此时我们要做的不是立马对新版本进行测试,而是使用我们星云精准测试的回归功能对新插桩的版本进行回归,它会根据版本之间代码的变化的来分析出与该函数相关的测试用例,然后根据测试用例内函数改变的多少进行回归优先级的排序,智能的推荐出需要重新跑的测试用例,以及显示出不需要跑的测试用例。 智能回归示例: cd /data/source2/frameworks/av/camera进入到camera目录下 vi ICamera.cpp打开该源码进行修改 在getParameters函数中加入if(1==1);条件 ![](https://upload-images.jianshu.io/upload_images/13279626-ebc89c40a107b28e.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) 然后对camera模块进行插桩,再在客户端使用选取回归测试用例功能进行回归 由于getParameters函数内新增条件发生变化,所以运行过该函数的测试用例的回归计数就加一,然后该测试用例就被推荐出来需要重新去跑一遍。 回归图示: ![](https://upload-images.jianshu.io/upload_images/13279626-1836bf2a49e2fb56.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) 对精准测试而言,其是采用在测试阶段,将测试用例和它所执行过的函数绑定的方法。在版本迭代时会将上一个版本的测试用例继承下来,通过回归跟上个版本进行比较,哪个函数有了变化,那么与其相关的测试用例的功能都可能会发生变化,所以在回归时会推荐出要重新测试的测试用例;而当一个测试用例里面关联的所有函数都没发生变化时他的功能也不会发生变化,那么此时再去测试一遍该用例是没有意义的事情。所以,在新版本插桩完毕后和以前的进行回归后就可以看出哪些用例需要重新跑哪些完全不用再跑。 ### 2.最后执行时序 该部分是执行插桩程序进行动态数据接收时保存的最后五十个语句块执行的时序关系图 ![](https://upload-images.jianshu.io/upload_images/13279626-4af19fe12fe9bb17.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) 它可以点击每一步次序查看执行块的代码 ### 3.聚类分析 聚类算法中个数的设置是需要手动设置的,一般看颗粒度的粗细进行设置。聚类算法是通过测试用例的代码相似程度得出结果的,所以可以帮助我们划分出来有哪些测试用例的代码相似程度比较高, 本次共设计7个测试用例,两次拍照、两次录视频、一次随便侧、一次打开相机、一次打开相机后闲置。 选择分类个数为5后,聚类结果为: ![](https://upload-images.jianshu.io/upload_images/13279626-3612565541876b82.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) 切换为图形模式为: ![](https://upload-images.jianshu.io/upload_images/13279626-736b826c0a594527.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) ## 10、Web报表 ### 1.覆盖率按日增长曲线图 使用折线图清晰的展现每天该版本覆盖率的变化情况 ![](https://upload-images.jianshu.io/upload_images/13279626-4cb7cd5a6aeaf55c.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) 左下角雷达图展示了预期的各项覆盖率与实际各项覆盖看的差距 右下角对比了当前版本与最新版本各项覆盖率的差异 ### 2.测试漏洞的智能分析 在一个程序中,往往有成百上千的函数,这些函数有的是关联整个程序核心、有的则是开发人员弃而不用,但一直保留迟迟不肯删除的,针对这些大量的函数,“精准测试”采用通过静态、动态指标的综合分析,在大量的程序函数中,通过计算直接筛选潜在的高危的测试漏洞,通过报表给予展示。 当一个函数复杂度很高但覆盖率却很低的时候其出现风险的概率就可能比较高 ![](https://upload-images.jianshu.io/upload_images/13279626-e904cb065f2288b9.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) 当函数扇入扇出越大时,意味着其关联函数越多,结合其覆盖率信息也可能是风险较高。 ![](https://upload-images.jianshu.io/upload_images/13279626-712db92bd266a138.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
  • [问题求助] pb模型转om模型时StopGradient算子不支持问题
    StopGradient算子在om模型中只是透传数据,并不是必须数据处理步骤。所以当在pb模型转om模型遇到StopGradient算子不支持的问题时,总的思想是在pb模型生成的时候就去掉StopGradient算子。ckpt模型转pb模型时去掉输出无关算子    见 https://blog.csdn.net/u011511601/article/details/80262707   2. keras的h5模型转pb模型去掉输出无关算子   见 https://github.com/amir-abdi/keras_to_tensorflow在h5转pb的时候,如果使用weight和json文件,可能报错:ValueError: No model found in config file.大致是认为keras保存的权重和json文件中没有模型信息。这个和keras的模型保存有关。keras的模型保存网上有很多帖子,例如:https://blog.csdn.net/jclian91/article/details/83038861如果weight和json的保存方式无法转为pb模型,那么我们可以使用model.save()方法保存方法来保存模型。具体做法:找到模型保存为weight和json文件的地方(model.save_weights()和model.to_json()),或者模型加载的地方(model.load_weights())调用mode.save()保存模型。运行应用程序的训练命令,触发模型的保存这样保存的模型使用 https://github.com/amir-abdi/keras_to_tensorflow 中转pb的命令时就不会报错了
  • [热门活动] 关于预处理
    baseline中给的json和custom,是不是只用改动custom的数据预处理部分,json不动就可以了
  • [其他语言] 欧拉OS如何安装php json?
    已经成功安装了php,但缺少JSON扩展。尝试yum install php70u-json,不成功
  • [技术干货] 借用官方demo已经实现北侧应用json解析和BASE64解密
    借用官方demo已经实现北侧应用json解析和BASE64解密;看效果图一、应用接收端:二、设备上报端:需要的加QQ:593021743分享