深度学习之pytorch(三) C++调用

玩深度学习,个人觉得基于anaconda的python适合开发与测试,C++适合实际的工程部署!而pytorch官方有编译好的libtorch,特别方便,适合于我这样的伸手党和手残党(win10下编译tensorflow编译了好久都没通过,好忧伤!)好了,话不多说进入正题!

工程环境:

1.win10;

2.anaconda+pytorch1.0;

3.vs2015

4.Cmake

 

一、下载libtorch

进入pytorch官方网址https://pytorch.org/get-started/locally/,个人使用的是cpu版本,选择如下图所示:

下载好了放在无中文路径的文件夹下(个人使用的是release版本)

二、Cmake配置

首先创建一个文件夹,存放主程序example.cpp还有CMakeLists.txt,然后再创建一个build的空文件夹,之后编译好的文件都存放在build文件夹里头(照着教程来的,但是发现build文件夹内实际没有工程文件,反而是根目录文件夹内是编译好的文件,即CMakeLists.txt所在文件夹,有知道的大佬烦请告知下原因)。cmake编译文件夹目录如下所示:

其中CMakeLists.txt内容如下所示:

#cmake的最低版本要求
cmake_minimum_required(VERSION 3.0 FATAL_ERROR)
#example为创建的工程名字
project(example)
#添加的pytorch的附加库
find_package(Torch REQUIRED)
#编译的相应cpp文件
add_executable(example-app example-app.cpp)
target_link_libraries(example-app “${TORCH_LIBRARIES}”)
set_property(TARGET example-app PROPERTY CXX_STANDARD 11)

其中example.cpp内容如下所示(仅作调用libtorch并生成随机tensor):

#include <torch/torch.h>
#include <iostream>int main() {torch::Tensor tensor = torch::rand({5, 3});std::cout << tensor << std::endl;system("pause");
}

三、Cmake编译

camke编译比较简单,在根目录文件夹下打开power shell(即CMakeLists.txt所在文件夹),输入

cmake -DCMAKE_PREFIX_PATH=E:\lib\pytorch\libtorch 

DCMAKE_PREFIX_PATH=libtorch绝对路径,就是刚才下载的libtorch文件解压后的根目录。

编译成功后会出现以下结果(并且刚才相应的文件会出现VS工程项目):

四、结果运行

用vs2015打开如下文件

1.打开工程文件后,修改配置管理器为X64,以及将example项目设置为启动项目(如果不会,请自行百度,这是vs的基本操作)。2.打开example项目的属性->链接器->输入->附加依赖项,删除其中引号内的所有内容,否则会出现找不到torch.lib的错误提示;

3.接上述步骤,->命令行->其他选项,将其中的X86更改为X64;

运行example项目会提示找不到相应的lib文件,此时继续下面步骤,

4.将之前解压的libtorch文件(\path\libtorch\lib)下的lib文件夹内的所有内容(内容如下图所示)拷贝至\path\example-app\x64\Release文件夹下,

此时项目运行成功,结果如下图所示:

 

注意:

1.CamkeLists.txt,主要为设置相应的项目属性以及需要编译的附加库,但是不明白为什么还需要将相应的libtorch库文件拷贝至当前项目环境下,难道是因为没有在环境变量里设置libtorch的变量路径吗?下次有空再测试;

2.libtorch解压路径不要太深,貌似是因为Cmake路径不能超过一千个字符,所以路径尽量浅一点,还有就是作为码农,不要有中文路径,毕竟外国人基本不用中文,在码农世界中文是个蛋疼的玩意,会导致很多莫名其妙的错误,避免坑就戒掉中文路径吧!

3.Camke是个好东西,可以多学习学习,下面有相应的CamkeLists.txt的参考博客,觉得都是大牛啊!

 

参考文献:

1.https://blog.csdn.net/adyf3/article/details/85003893

2.https://blog.csdn.net/qq_37761077/article/details/88750711

3.https://blog.csdn.net/linxigjs/article/details/79864033

4.https://pytorch.org/cppdocs/installing.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/256512.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ANSYS入门——模态分析步骤与实例详解

目录 一、ANSYS求解模态分析步骤 建模 施加载荷和求解

javascript库之Mustache库使用说明

一、简单示例 代码&#xff1a; 1 function show(t) { 2 $("#content").html(t); 3 } 4 5 var view { 6 title: YZF, 7 cacl: function () { 8 return …

Light OJ 1007

求区间欧拉函数平方和。。。 最后因为longlong 范围爆了WA 了&#xff0c; 0.0 #include<bits/stdc.h> using namespace std; const int maxn 5000000 131; typedef unsigned long long LL;bool Com[maxn]; LL Num[maxn], Prim[maxn / 3]; int Cnt;void INIT() {Num[1]…

MVC架构设计——EF-Code First

详情参考:http://www.cnblogs.com/guomingfeng/archive/2013/05/28/mvc-ef-repository.html转载于:https://www.cnblogs.com/shuai7boy/p/5807678.html

机器学习(一) 基于sklearn库的数据集划分(交叉验证)

机器学习中首要环节就是数据集的处理&#xff0c;其中数据集的处理从个人理解(如有错误敬请谅解)的角度来说包括两个方面&#xff1a;数据集划分和数据清理。其中数据集划分是指训练集、验证集和测试集的数据类别划分&#xff1b;数据清理是指数据的清洗、删除等等方面。这两天…

ANSYS——模态分析的理论基础

目录 一、模态分析理论基础 线性与非线性 振动与固有频率 振动方程与振动模态

购物中心潮--我的创业之路

2014年10一个月&#xff0c;我在中国大陆从北我的两个小伙伴跑到最南边中国内地。大半个中国删除更多。早在北京成立购潮商城。2014年11月&#xff0c;购潮商城正式上线。上线当天突破零订单。2014年12月&#xff0c;正式推广市场。渗透大学生校园。2015年2月至今&#xff0c;正…

敏捷项目开源管理软件ScrumBasic(2)- 多项目支持

1.加入Project对象模型 public class Project{[Key][MaxLength(32)]public string ID { get; set; }public string Name { get; set; }public int Order { get; set; }public ICollection<UserStory> Stories { get; set; }public ApplicationUser Creator { get; set; }…

postgresql表和列注释(描述)

2019独角兽企业重金招聘Python工程师标准>>> PostgreSQL添加表和列注释。本文为测试表test&#xff0c;默认无注释。 test# \d关联列表架构模式 | 名称 | 类型 | 拥有者 | 大小 | 描述 -------------------------------------------------public | test | …

ANSYS——模态提取方法简介

目录 block lancoze法 supspace(子空间法) powerdynamics reduced(缩减法) unsymmetric(非对称法) 阻尼法和QR阻尼法

python 使用小知识总结(持续更新ing)

这篇博客主要针对于使用python来进行深度学习/机器学习过程各方面小知识的总结。习惯于使用C这种严谨的语言&#xff0c;改换到python这门相对来说开放式的语言需要很多学习&#xff0c;而作为一个菜鸡&#xff0c;遇到编程问题解决了之后不到一周就会忘记&#xff0c;在此仅作…

Fifth scrum meeting - 2015/10/30

概述 从昨天开始&#xff0c;我们的开发工作终于进入了正轨&#xff0c;由于之前没有mooc服务器API接口&#xff0c;一些工作无法进行。 因为我们团队开始开发较晚&#xff0c;因此我们将开发阶段的截至时间定为了下周五&#xff0c;测试阶段则压缩为下周周六和周日两天。 我们…

计算机加入域 不能访问网络位置 解决办法

计算机加入域 不能访问网络位置 解决办法 启动以下服务 本文转自 onesthan 51CTO博客&#xff0c;原文链接&#xff1a;http://blog.51cto.com/91xueit/1660286&#xff0c;如需转载请自行联系原作者

ANSYS——模态分析的载荷施加问题以及约束的施加问题

本文续自《ANSYS入门——模态分析步骤与实例详解》:https://blog.csdn.net/qq_45769063/article/details/106389171 目录 1.模态分析的激励是从哪里来的?

【effective c++】继承与面向对象设计

1.确定你的public继承塑造出is-a关系 public继承意味着is-a.适用于base classes身上的每一件事情一定也适用于derived classes身上,因为每一个derived classes对象也都是一个base class对象&#xff0c;反过来不成立。 2.避免隐藏继承而来的名称 c名称查找不考虑类型&#xff0…

Android Camera HAL浅析

1、Camera成像原理介绍 Camera工作流程图 Camera的成像原理可以简单概括如下&#xff1a; 景物(SCENE)通过镜头&#xff08;LENS&#xff09;生成的光学图像投射到图像传感器(Sensor)表面上&#xff0c;然后转为电信号&#xff0c;经过A/D&#xff08;模数转换&#xff09;转换…

win10 下pycharm+anaconda 编译生成pyd文件

由于生产部署的问题&#xff0c;需要把用python写的深度学习代码编译为可被调用的文件。上网搜索了下&#xff0c;暂时了解到win10下pyd文件比较流行。下面是直接引用某位博主的结论&#xff0c;个人感觉总结的很好。其中Cython库将已有的Python代码转化为C语言的代码&#xff…

ANSYS——初学路径之路径的定义、作用以及ansys路径模块GUI的操作解释

目录 一、路径的定义 二、路径的作用 三、路径GUI相关操作面板解释 1、路径的定义

JVM(4)之 使用MAT排查堆溢出

为什么80%的码农都做不了架构师&#xff1f;>>> 接下来讲解如何设置以及当发生堆溢出的时候怎么排查问题。先看一小段代码&#xff1a;   代码中使用了一个无限循环来为list添加对象&#xff0c;如果采用默认的堆大小的话可能要等待好久才能出现堆溢出的错误&a…

caffe 中的一些参数介绍

转自&#xff1a;http://blog.csdn.net/cyh_24/article/details/51537709 solver.prototxt net: "models/bvlc_alexnet/train_val.prototxt" test_iter: 1000 # test_interval: 1000 # base_lr: 0.01 # 开始的学习率 lr_policy: "step" # 学习率的…