Mxnet在Windows10, vs2015平台的编译及开发-CPU版本

2023-11-15

环境:

  • 基础配置:Windows10,cmake3.11.1,vs2015,QT5.11.1
  • mxnet配置:OpenBLAS-v0.2.9-Win64-int32,opencv3.4.1

相关资源百度云链接:https://pan.baidu.com/s/1pkPzm9vVRkHRc6KOkiyX9g 密码:2848

编译成功的项目百度云链接(在基础配置相同的情况下可以直接使用
):https://pan.baidu.com/s/1By5PeiORcvRFSysBGF5UOQ 密码:m87s


Mxnet在Windows10,vs2015平台的编译调试

通过实验证明Mxnet对Windows平台C++ 版本还是很不友好的,官网只给出了vs2015下的编译教程,网上有vs2013版的教程,但是因为mxnet有许多c++ 11的新特性,需要下载专门的CTP文件强化支持,同理vs2012也需要相应支持。但尽管如此,vs2013与vs2012下的编译均未成功,只成功在vs2015环境下搭建了cpu版本。

最好的教程必然是参考官网教程:
http://mxnet.incubator.apache.org/install/build_from_source.html#build-the-c-package

1. cmake:

首先github下载源码

git clone --recursive https://github.com/dmlc/mxnet 

注意一定不要忘记–recursive参数,因为mxnet依赖于DMLC通用工具包,–recursive参数可以自动加载mshadow等依赖。下载好OpenBLAS和opencv,按官网教程设置好环境变量,然后进行cmake,配置如下:
这里写图片描述
只需勾选以下两个:
这里写图片描述
cmake成功界面:
这里写图片描述
这里写图片描述

关于gpu版本:搭好cuda和cudnn,配置好相应的环境变量(可参考网上教程如 https://blog.csdn.net/m0_37638031/article/details/78896818
),然后进行编译。

遇到问题及解决方案

  1. 提示找不到opencv,解决方案:将opencv文件夹手动输入到cmake相关配置中。

  2. 相关报错:

download mklml
[download 0% complete]
[download 1% complete]
[download 2% complete]
CMake Error at cmake/MklDnn.cmake:23 (file):
  file DOWNLOAD HASH mismatch

    for file: [D:/mxnet/test3/mxnet_gpu_vs2015/build/mklml/mklml_win_2018.0.3.20180406.zip]
      expected hash: [8dd73e7d3f19f004551809824c4e8970]
        actual hash: [c537c48196c863652bcce2e894333bac]
             status: [56;"Failure when receiving data from the peer"]

Call Stack (most recent call first):
  CMakeLists.txt:189 (include)

解决方案:此问题在于cmake无法顺利从相应远程服务器下载mklml(网络原因),因此重复进行config,直到能够顺利download相关的库。顺利configure界面见word。

2. vs2015编译

用vs2015打开mxnet\build\mxnet.sln,设置Release x64模式,生成解决方案。成功后就在mxnet\build\Release下得到了我们需要的mxnet.dll(或libmxnet.dll)。
这里写图片描述
遇到问题及解决方案
1. 相关报错:

 fatal error C1083: 无法打开包括文件: “cblas.h”: No such file or directory (编译源文件 D:\mxnet\test3\mxnet\src\resource.cc)

解决方案:原因在于cmake时OpenBLAS配置路径有误,应为D:/mxnet/OpenBLAS-v0.2.19-Win64-int32/include与D:/mxnet/OpenBLAS-v0.2.19-Win64-int32/lib/libopenblas.dll.a

3. c++版本

将我们生成的mxnet.dll拷贝到mxnet\test3\mxnet\cpp-package\scripts下,命令行执行

python OpWrapperGenerator.py mxnet.dll

可在mxnet\cpp-package\include\mxnet-cpp下找到op.h文件,成功。

4. python版本

将mxnet.dll拷到mxnet\python\mxnet下,需要改名为libmxnet.dll(若第二步生成libmxnet.dll则不需要改名),然后在mxnet\python目录下执行:

python setup.py install

安装过程中,python会自动把对应的dll考到安装目录,正常安装完成后,在python中就可以 import mxnet 了。

遇到问题及解决方案
1. import mxnet时相关报错:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "mxnet\__init__.py", line 24, in <module>
    from .context import Context, current_context, cpu, gpu, cpu_pinned
  File "mxnet\context.py", line 24, in <module>
    from .base import classproperty, with_metaclass, _MXClassPropertyMetaClass
  File "mxnet\base.py", line 217, in <module>
    _LIB = _load_lib()
  File "mxnet\base.py", line 208, in _load_lib
    lib = ctypes.CDLL(lib_path[0], ctypes.RTLD_LOCAL)
  File "D:\Python27\lib\ctypes\__init__.py", line 366, in __init__
    self._handle = _dlopen(self._name, mode)
WindowsError: [Error 126]

解决方案:
需在mxnet\python目录下进行setup.py后,在当前目录下import mxnet,或将该目录下的mxnet文件夹设置到环境变量中。

5. 使用C++训练模型

c++工程配置:

  1. 在项目属性-VC++目录-库目录与包含目录中添加mxnet目录。

    • 包含目录:添加 D:\mxnet\test3\mxnet\include;D:\mxnet\test3\mxnet\cpp-package\include;D:\mxnet\test3\mxnet\nnvm\include;D:\mxnet\test3\mxnet\3rdparty\dmlc-core\include;D:\Qt\5.11.1\msvc2015_64\include;
    • 库目录:添加 D:\mxnet\test3\mxnet\build\Release;D:\Qt\5.11.1\msvc2015_64\lib;
  2. 在项目属性-链接器-输入-附加依赖项中添加

    • libmxnet.lib
  3. 将mxnet.dll拷贝到工程目录test\x64\Release下

  4. 实现例子:https://blog.csdn.net/u012234115/article/details/80656030
    (注意实现该文章中的例子时要将相应的model文件夹也拷贝到test\x64\Release下)

配置参考:https://blog.csdn.net/u012234115/article/details/80503086

遇到的问题及解决方案

  1. 相关报错
error MSB8020: The build tools for Visual Studio 2012 (Platform Toolset = 'v110') cannot be found.

解决方案:安装vs2012可以得到v110平台数据集,但因为我们要改为vs2015环境(要用mxnet),因此我设置了vs2015的平台数据集。即在 ‘项目-属性-配置属性-常规-平台数据集’改为Visual Studio 2015(v140)。
2. 相关报错

error C2382: “cbrt”: 重定义;不同的异常规范

解决方案:原因在于vs2015下对重载有不同定义规范,将提示的重定义部分注释掉即可。
3. 相关报错

error C2220: 警告被视为错误 - 没有生成“object”文件

解决方案:这种错误的原因是:原因是该文件的代码页为英文,而我们系统中的代码页为中文。可以点击项目,右击选择属性->配置属性->c/c++->常规,将“警告视为错误”的选项改为“否”。
4. 相关报错

由于找不到xxxxx.dll,无法继续执行代码。重新安装程序可能会解决此问题。

解决方案:将相应ddl文件拷贝到工程目录FEM_Frame\x64\Release下。
5. 相关报错

无法定位程序输入点xxxxx于动态链接库xxxx\xxx.exe上

解决方案:将所有的dll文件(QT及项目下的dll)拷贝到工程目录xxxx\x64\Release中。
6. 相关报错

error LNK2001: 无法解析的外部符号 "__declspec(dllimport) void __cdecl 

解决方案:确认cdecl后面相应的文件在工程项目中且编译生成了相应的obj文件,若还有错误,则设置 属性 -> C,C++ -> 语言 -> 将WChar_t视为内置类型,设置为:否(/Zc:wchar_t-)。
7. 相关报错

1>LINK : warning LNK4098: 默认库“MSVCRT”与其他库的使用冲突;请使用 /NODEFAULTLIB:library

解决方案:在使用多线程调试dll(MDd)模式的时候 <位置:配置属性 - c/c++ -代码生成-运行时库>msvcrtd.lib 与 ibcmt.lib产生冲突

解决方法有2个:
1.右击工程 - 属性 ”配置属性 - 链接器 - 输入 - 忽略特定库“,添加 ”libcmt.lib“
2.右击工程 - 属性 ”配置属性 - 链接器 - 命令行” 添加: /NODEFAULTLIB:”libcmt.lib”
8. 相关报错

error LNK2038: 检测到“RuntimeLibrary”的不匹配项:值“MT_StaticRelease”不匹配值“MD_DynamicRelease”

解决方案:在工程上右键-属性-c/c++-代码生成-运行库改成(release为MT,debug为MTD)即可解决。
9. 相关报错

error LNK2038: 检测到“_ITERATOR_DEBUG_LEVEL”的不匹配项: 值“0”不匹配值“2

解决方案:产生这个问题有两种原因:
1.是当前工程是Debug版本,而引用的库文件时Release版本,只需要把当前的Debug模式改成Release模式就可以了,或者打开解决方案–》属性–》链接器–》输入–》附加依赖项中引用debug版本的lib文件名称。同样,如果检测到“_ITERATOR_DEBUG_LEVEL”的不匹配项: 值“2”不匹配值“0”
则说明是Release模式引用了Debug的库文件。这类问题在引用文件时要注意版本的匹配。
2.工程设置中运行库中设置成了”多线程调试 DLL (/MDd)”。这个是设置应该是在debug下的设置,release下应该设置“多线程 DLL (/MD)”。具体在项目-属性-配置属性C/C++ -代码生成-运行库中设定。
10. 相关报错

error LNK2019: 无法解析的外部符号 "int __cdecl xxxxx"

解决方案:内置类型wchar_t的问题,将WChar_t视为内置类型”置为否,在属性-配置属性- C/C++ -语言 中设置。相关详见 https://bbs.csdn.net/topics/390980385
11. 相关报错

错误C2664 无法将参数1const char*转换为CString

解决方案:字符集的问题,项目-属性-配置属性-常规-字符集,选择”使用Unicode字符集”。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Mxnet在Windows10, vs2015平台的编译及开发-CPU版本 的相关文章

  • Kaggle竞赛题目之——Digit Recognizer

    Classify handwritten digits using the famous MNIST data This competition is the first in a series of tutorial competitio
  • 机器学习实战笔记(Python实现)-02-k近邻算法(kNN)

    k近邻算法 kNN 本博客来源于CSDN http blog csdn net niuwei22007 article details 49703719 本博客源代码下载地址 CSDN免费下载 GitHub下载地址 均带有详细注释和测试数据
  • 预测数值型数据:回归

    本文传送机 用线性回归找到最佳拟合直线 局部加权线性回归 通过缩减系数来 理解 数据 岭回归 lasso 前向逐步回归 用线性回归找到最佳拟合直线 线性回归 优点 结果易于理解 计算上不复杂 缺点 对非线性的数据拟合不好 适用数据类型 数值
  • 如何动态调试Python的第三方库

    注意 本文方法仅限于调试安装时附带py源码的库 如sklearn 引入 用sklearn中的sklearn feature extraction text TfidfTransformer来获取TF特征 但发现sklearn的计算结果与我手
  • 机器学习——深度学习(Deep Learning)

    Deep Learning是机器学习中一个非常接近AI的领域 其动机在于建立 模拟人脑进行分析学习的神经网络 最近研究了机器学习中一些深度学习的相关知识 本文给出一些很有用的资料和心得 Key Words 有监督学习与无监督学习 分类 回归
  • SVM —— 在复杂数据上应用核函数

    对于非线性可分的数据 我们需要使用一种称为核函数 kernel 的工具将数据转换成易于分类器理解的形式 目录 利用核函数将数据映射到高位空间 径向基核函数 利用核函数将数据映射到高位空间 对于非线性可分的数据 我们要将数据从一个特征空间转换
  • 机器学习之梯度提升树(机器学习技法)

    梯度提升树模型 Gradient Boosted Decision Tree 与随机森林的对比 前面提到的随机森林使用Bagging的方式融合起来 也就是使用bootstrapping进行抽样得到不同的样本再加上不同的特征选择训练出不同的决
  • 朴素贝叶斯理论推导与三种常见模型

    朴素贝叶斯 Naive Bayes 是一种简单的分类算法 它的经典应用案例为人所熟知 文本分类 如垃圾邮件过滤 很多教材都从这些案例出发 本文就不重复这些内容了 而把重点放在理论推导 其实很浅显 别被 理论 吓到 三种常用模型及其编码实现
  • OpenCV中SVM的参数具体设置

    CvSVMParams CvSVMParams svm type CvSVM C SVC kernel type CvSVM RBF degree 0 gamma 1 coef0 0 C 1 nu 0 p 0 class weights 0
  • 关于二阶锥优化(SOCP)的学习

    原来 数学不好的时候 真的很难深入下去做研究 最近的两个月时间里 我就边学习SOCP相关的理论知识 一边拿它当工具来分析多视角几何中的问题 包括Triangulation Homography Estimation等 接触到SOCP的起因在
  • pandas中的时间序列

    一 夯实基础 datetime 模块中的数据类型 date 以公历形式存储日历日期 年月日 time 将时间存储为时分秒毫秒 datetime 存储日期和时间 timedelta 表示两个datetime值之间的差 日 秒 毫秒 1 获取当
  • 从零开始的Python机器学习指南(二)——监督学习之OLS回归

    介绍 本博客将结合样例介绍监督学习 Supervised Learning SL下的第一大分支 回归 Regression 开始前的准备 开始前 请先确保你的python环境中有以下包 pandas numpy sklearn 本文的所有代
  • 牛顿法(Newton’s method)

    牛顿法通常都是用来寻找一个根 同时也可以理解为最大化目标函数的局部二次近似 设我们的目标函数为f x 那么一个关于x0的二次近似就有 我们用f进行匹配 可以得到 如果b lt 0 g的最大值为a 得到更新规则 这是牛顿法在最优化方面的表述
  • 异常检测(二)——IsolationForest

    1 简介 孤立森林 Isolation Forest 是另外一种高效的异常检测算法 它和随机森林类似 但每次选择划分属性和划分点 值 时都是随机的 而不是根据信息增益或者基尼指数来选择 在建树过程中 如果一些样本很快就到达了叶子节点 即叶子
  • 深度学习 vs 概率图模型 vs 逻辑学

    深度学习 vs 概率图模型 vs 逻辑学 发表于 2015 04 30 21 55 1359次阅读 来源 quantombone 0 条评论 作者 Tomasz Malisiewicz 深度学习 deep learning 图模型 人工智能
  • 基于产品的RFM模型的k-means聚类分析

    首先我们可以看看数据集的数据形态 导入rfm数据 查看数据的统计学参数 df pd read csv rfm csv df describe 在实施Kmeans聚类之前 我们必须检查这些关键k means假设 变量对称分布 不倾斜 具有相同
  • Structural Time Series modeling in TensorFlow Probability

    在邯郸学步后 想要深入用好Tensorflow中的STS model 还是要静下心来 好好阅读点材料 f t f 1
  • 机器学习简介

    介绍 机器学习是人工智能 AI 的一个子领域 机器学习的目标通常是理解数据的结构并将该数据拟合到人们可以理解和利用的模型中 尽管机器学习是计算机科学的一个领域 但它与传统的计算方法不同 在传统计算中 算法是计算机用来计算或解决问题的显式编程
  • 二值分类模型的评价指标

    二值分类模型的评价指标主要有 Precision Recall F Score ROC and AUC ROC Receiver Operating Characteristic ROC曲线的横坐标为false positive rate
  • 【数据预处理】Pandas缺失的数据处理

    目录 缺少数据基础 何时 为何 数据丢失 被视为 缺失 的值 日期时间 插入缺失数据 缺少数据的计算 Sum Prod of Empties Nans GroupBy中的NA值 清理 填写缺失数据 填充缺失值 fillna 用PandasO

随机推荐

  • 欧拉角,轴角,四元数与旋转矩阵详解

    入门小菜鸟 希望像做笔记记录自己学的东西 也希望能帮助到同样入门的人 更希望大佬们帮忙纠错啦 侵权立删 目录 一 欧拉角 1 静态定义 2 欧拉角的表示 3 欧拉角表示的优缺点 4 欧拉角的万向节死锁 静态不存在万向锁的问题 二 四元数 1
  • Junit单元测试1

    实验五 Junit单元测试1 1 实验目的 学习使用 JUnit4 X 进行单元测试 应用 JUnit4 X 进行单元测试 为工程项目中的类 设计测试类 并且运用白盒测试和黑盒测试方法为类中的方法设计足够充分的测试用例集 从而保证 每一个类
  • myeclipse找不到Deployment Assembly ,报错

    今天tomcat加载maven项目遇到错误 java lang ClassNotFoundException org springframework web context ContextLoaderListener 在网上查到解决方法 出
  • 雷厉风行——开启人工智能教育普及时代

    自二十一世纪伊始 我国一线城市已全面进入老龄化严重的趋势 国家急需聪明睿智 精力充沛的年轻人作为人才储备 要全方位的培养年轻人 必须从少儿时期开始抓起 人工智能教育可以启发少儿天马行空的想象力 抽丝剥茧的思维方式 艰苦奋斗的实干精神 格物斯
  • 【hello git】初识Git

    目录 一 简述Git 二 Linux 下 Git 的安装 CentOS 2 1 基本命令 2 2 示例 三 Linux 下 Git 的安装 ubuntu 3 1 基本命令 3 2 示例 一 简述Git Git 版本控制器 记录每次的修改以及
  • matlab第三章课后答案,matlab程序设计第三章课后习题答案推荐.doc

    matlab程序设计第三章课后习题答案推荐 窗体顶端 1 p138 第6题 在同一坐标轴中绘制下列两条曲线并标注两曲线交叉点 gt gt t 0 0 01 pi gt gt x1 t gt gt y1 2 x1 0 5 gt gt x2 s
  • 桥接路由器总是掉线_tplink路由器桥接掉线怎么办

    tplink是普联技术有限公司旗下的品牌 成立于1996年 是专门从事网络与通信终端设备研发 制造和行销的业内主流厂商 那么你知道tplink路由器桥接掉线的解决方法吗 下面是学习啦小编整理的一些关于tplink路由器桥接掉线的相关资料 供
  • 命令行参数格式介绍

    命令行参数 sys argv 命令行参数列表 getopt getopt argparse argparse例子 import argparse def cmd args argparse ArgumentParser descriptio
  • vue3弃用/deep/深度穿透

    使用css时 如果需要改变孙级样式需要用到 gt gt gt 穿透 scss中增加了 deep 功能来做样式穿透 vue项目中也可以写作 v deep vue3之后之前的穿透语法虽然暂时可以正常使用 但是在编译时会抛出异常 说明在不久的将来
  • SQL NOT EXISTS讲解 (详例助理解)

    首先我们要知道对于exists和not exists 的返回值都是真假 exists 如果子查询查询到了列那么就为假 not exists 如果子查询查询不到结果则返回值为真 下面来举例子来理解not exists 先给出三个表 stude
  • 如何在Linux中查看所有正在运行的进程

    你可以使用ps命令 它能显示当前运行中进程的相关信息 包括进程的PID Linux和UNIX都支持ps命令 显示所有运行中进程的相关信息 ps命令能提供一份当前进程的快照 如果你想状态可以自动刷新 可以使用top命令 ps命令 输入下面的p
  • el search 查询排序

    sort 与query是同级的 来源 https stackoverflow com questions 20974964 python custom scripting in elasticsearch sort score order
  • Android 加载gif图,Glide

    个人中心 DownLoad Android 可以使用 Glide Picasso Fresco 等第三方库来加载 gif 图 以 Glide 为例 可以按照以下步骤加载 gif 图 1 在 build gradle 文件中添加 Glide
  • verilog – 行为,RTL和门级之间的差异

    试图完全理解Verilog的抽象级别之间的差异 我得到了每个级别的描述 但我仍然无法在游戏中得到它 对于这种情况 我将粘贴一些Verilog代码以及我对它们的看法 gt 以下代码位于行为级别 always a or b or sel beg
  • 前端,后端,全栈哪个好找工作?

    职场老油子说说 现在啥岗位不好找工作 啥 想钱多 活少 离家近 最好单位发异性 这得靠实力 运气 如果是刚毕业 啥都不懂但又想从事技术行业 可以到职场上历练 而不是说报个培训机构 他们只能解决你的焦虑问题 而不是实际问题 如果只是混个工作
  • Vue3-自定义轮播图插件(逐步-1)

    1 大致框架建好 在src文件下新建一个文件XX 在XX中建立一个index vue作为主页面 在文件XX里建一个components文件用于存放组件 在components文件中建一个slideBox vue来写我们的轮播图主体 在sli
  • BGP总结

    BGP总结 BGP 边界网关协议 使用范围 BGP范围 在AS之间使用的协议 协议的特点 算法 路径矢量型 没有算法 协议是否传递网络掩码 传递网络掩码 支持VLSM CIDR 协议消息数据包封装 基于TCP封装 端口号 179 AS 自治
  • mybatis中代码复用问题resultMap、sql、include标签

    xml映射文件 对于重复出现的sql 片段可以使用sql标签提取出来 在使用的地方使用include标签引用即可 MyBatis之ResultMap标签 ResultMap标签基本作用 建立SQL查询结果字段与实体属性的映射关系信息 在深入
  • 华为OD机试 - 求符合要求的结对方式(Java )

    题目描述 用一个数组A代表程序员的工作能力 公司想通过结对编程的方式提高员工的能力 假设结对后的能力为两个员工的能力之和 求一共有多少种结对方式使结对后能力为N 输入描述 5 1 2 2 2 3 4 第一行为员工的总人数 取值范围 1 10
  • Mxnet在Windows10, vs2015平台的编译及开发-CPU版本

    环境 基础配置 Windows10 cmake3 11 1 vs2015 QT5 11 1 mxnet配置 OpenBLAS v0 2 9 Win64 int32 opencv3 4 1 相关资源百度云链接 https pan baidu