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版本 的相关文章

  • 正则化(Regularization)

    过拟合问题 Overfitting 当我们对一个问题建立线性回归模型或逻辑回归模型时 不恰当的选择特征会导致过拟合问题 过拟合问题是指当我们选择了很多的特征值时 模型对数据集的每一个example都符合的很好 但是对新的example却预测
  • 预测数值型数据:回归

    本文传送机 用线性回归找到最佳拟合直线 局部加权线性回归 通过缩减系数来 理解 数据 岭回归 lasso 前向逐步回归 用线性回归找到最佳拟合直线 线性回归 优点 结果易于理解 计算上不复杂 缺点 对非线性的数据拟合不好 适用数据类型 数值
  • 深度学习系列之ANN

    到此 ANN网络从最基础的单层感知器 到为深度网络作模板延伸的BP网络 将模型结构 参数训练 算法都举例讲解的很透彻 为下面的CNN网络的学习打下坚实的基础 这个在线编辑器 体验太差了 好好写一篇长文章 想知道博客上与大家交流 转换过程太麻
  • 机器学习——深度学习(Deep Learning)

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

    1 聚类方法的选择 1 对于数据量较大的情况 k means 2 对于数据量较一般的情况 最大密度聚类 DBSCAN 3 对于数据量较少的情况 谱聚类 2 类别数目k未知 且数据有噪声 可使用密度聚类 如DBSCAN 最大密度聚类 DBSC
  • 训练模型的3种方法

    公众号后台回复关键字 Pytorch 获取项目github地址 Pytorch没有官方的高阶API 一般通过nn Module来构建模型并编写自定义训练循环 为了更加方便地训练模型 作者编写了仿keras的Pytorch模型接口 torch
  • 基于Levenberg-Marquardt训练算法的BP网络Python实现

    基于Levenberg Marquardt训练算法的BP网络Python实现 分类 统计机器学习算法理论 2013 07 15 23 40 430人阅读 评论 0 收藏 举报 经过一个多月的努力 终于完成了BP网络 参考的资料为 1 Tra
  • 【基于协同过滤算法的电影推荐】

    目录 1 协同过滤算法 1 1 CF与 User Item 推荐算法区别 1 2 UserCF 1 3 ItemCF 2 评价指标 3 基于userCF与itemCF电影推荐 3 1 MovieLens数据集 3 2 userCF代码实现
  • R-squared 和 Adjusted R-squared联系与区别

    原文见 https discuss analyticsvidhya com t difference between r square and adjusted r square 264 8 下面是自己理解的总结 大概意思就是说 R squ
  • pandas中的时间序列

    一 夯实基础 datetime 模块中的数据类型 date 以公历形式存储日历日期 年月日 time 将时间存储为时分秒毫秒 datetime 存储日期和时间 timedelta 表示两个datetime值之间的差 日 秒 毫秒 1 获取当
  • 【CS229 lecture19】微分动态规划

    首先声明一下 这节课基本没听懂 但是还是把课程笔记写下 lecture19 微分动态规划 继续强化学习算法的讨论 Agenda 课程中段我曾讲过调试learning algorithm 今天再来将强化学习的部分 The motivating
  • 基于产品的RFM模型的k-means聚类分析

    首先我们可以看看数据集的数据形态 导入rfm数据 查看数据的统计学参数 df pd read csv rfm csv df describe 在实施Kmeans聚类之前 我们必须检查这些关键k means假设 变量对称分布 不倾斜 具有相同
  • MLOps极致细节:4. MLFlow Projects 案例介绍(Gitee代码链接)

    MLOps极致细节 4 MLFlow Projects 案例介绍 Gitee代码链接 MLFlow Projects允许我们将代码及其依赖项打包为一个可以在其他平台上以可复制 reproducible 和可重用 reusable 的方式运行
  • 各领域机器学习数据集汇总(附下载地址)

    原文地址 大学公开数据集 Stanford 69G大规模无人机 校园 图像数据集 Stanford http cvgl stanford edu projects uav data 人脸素描数据集 CUHK http mmlab ie cu
  • 随机森林详解

    原文链接 机器学习之随机森林 RF 详解 文章目录 一 bagging算法 1 简介 2 bagging算法流程 二 随机森林 1 简介 2 CART分类树的生成 3 总结 常用集成学习包括Bagging Boosting Stacking
  • 感知机分类学习

    感知机 perceptron 是一种二类分类的线性分类模型 也就是说 使用于将数据分成两类的 并且数据要线性可分的情况 线性可分是指存在一个超平面能够将空间分成两部分 每一部分为一类 感知机的目的就在于找这样的一个超平面 假设输入数据形式为
  • 二值分类模型的评价指标

    二值分类模型的评价指标主要有 Precision Recall F Score ROC and AUC ROC Receiver Operating Characteristic ROC曲线的横坐标为false positive rate
  • 【特征工程】特征选择与特征学习

    特征选择与特征学习 在机器学习的具体实践任务中 选择一组具有代表性的特征用于构建模型是非常重要的问题 特征选择通常选择与类别相关性强 且特征彼此间相关性弱的特征子集 具体特征选择算法通过定义合适的子集评价函数来体现 在现实世界中 数据通常是
  • Nvidia GPU 最新计算能力表(CUDA Compute Capability)

    对于深度学习 官方指出在GPU算力高于5 0时 可以用来跑神经网络 Jetson Products GPU Compute Capability Jetson AGX Xavier 7 2 Jetson Nano 5 3 Jetson TX
  • 如何使用 Whisper 和 Spleeter AI 工具制作卡拉 OK 视频

    介绍 人工智能工具可用于处理图像 音频或视频以产生新颖的结果 直到最近 在不使用大量时间和计算能力的情况下 自动编辑图像或音频仍然具有挑战性 即使如此 通常也只能运行交钥匙滤波器来删除声音中的某些频率或更改图像的调色板 较新的方法使用人工智

随机推荐

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

    入门小菜鸟 希望像做笔记记录自己学的东西 也希望能帮助到同样入门的人 更希望大佬们帮忙纠错啦 侵权立删 目录 一 欧拉角 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