首页 > 其他分享 >libtorch入门例程

libtorch入门例程

时间:2024-03-09 13:35:05浏览次数:40  
标签:LOSS 30 入门 例程 torch C++ libtorch LOOP

libtorch C++版可以直接在官网下载。自己学习如果没有合适的显卡可以选择下载CPU版的。下面是官网链接:

下载后就可以把开发包包含到VS的项目中使用。注意libtorch官网提供的Release/Debug的开发包,Debug版的程序用Debug版的库,Release版的程序用Release版的库,不能混用。另外libtorch更新很快是用最新的C++版本写的,需要在编译器设置中设置合适的C++语言版本。比如我的是libtorch1.13.1,它只能在C++14版本下使用,C++11或C++17都不行。在使用时如果编译报错有很多“std不明确的符号”,可用的改正方法是:打开项目属性→属性→C/C++→语言→符合模式→改为“否”。

下面给出一个可以运行的代码。我的测试环境是VS2017(C++14)和libtorch1.13.1。如果在你的编译器下能正常编译运行,那么说明libtorch是正常的。此代码的功能是拟合函数${ z=3x+y+2.5 }$。请注意torch::Tensor loss = lossFunc(predict, c);这一句,predict和c的位置不能反过来。

#include "torch/all.h"

int main()
{
    torch::nn::Linear linear(2, 1);

    /* 30个样本。在这里是一行一个样本 */
    at::Tensor b = torch::rand({ 30, 2 });
    at::Tensor c = torch::zeros({ 30, 1 });
    for (int i = 0; i < 30; i++)
    {
        c[i] = 3 * b[i][0] + b[i][1] + 2.5f;
    }

    cout << b << endl;
    cout << c << endl;

    /* 训练过程 */
    torch::optim::SGD optim(linear->parameters(), torch::optim::SGDOptions(0.01));
    torch::nn::MSELoss lossFunc;
    linear->train();
    for (int i = 0; i < 10000; i++)
    {
        torch::Tensor predict = linear(b);
        torch::Tensor loss = lossFunc(predict, c);
        optim.zero_grad();
        loss.backward();
        optim.step();
        if (i % 1000 == 0)
        {
            /* 每1000次循环输出一次损失函数值 */
            cout << "LOOP:" << i << ",LOSS=" << loss.item() << endl;
        }
    }
    /* 输出训练之后的网络参数 */
    cout << linear->parameters() << endl;

    /* 做个测试 */
    at::Tensor x = torch::tensor({ 1.5f, 2.0f });
    at::Tensor y = linear(x);
    cout << "3*1.5+1*2+2.5=" << y.item();

    return 0;
}

输出内容是:

 0.0341  0.6551
 0.9524  0.1005
 0.3764  0.5524
 0.8860  0.6767
 0.6554  0.9601
 0.7736  0.0955
 0.4260  0.3402
 0.1248  0.1497
 0.2288  0.2765
 0.4508  0.6151
 0.1954  0.0717
 0.5392  0.5821
 0.8622  0.2375
 0.9371  0.0668
 0.6593  0.2563
 0.1854  0.8515
 0.1299  0.4341
 0.8148  0.6432
 0.7303  0.0794
 0.6853  0.5018
 0.7687  0.8698
 0.6909  0.7306
 0.8921  0.8072
 0.6477  0.0745
 0.5048  0.8875
 0.6906  0.4306
 0.7410  0.6294
 0.0095  0.8609
 0.0862  0.8630
 0.6828  0.5330
[ CPUFloatType{30,2} ]
 3.2576
 5.4577
 4.1815
 5.8348
 5.4263
 4.9163
 4.1181
 3.0239
 3.4628
 4.4676
 3.1578
 4.6996
 5.3240
 5.3781
 4.7343
 3.9076
 3.3239
 5.5875
 4.7702
 5.0576
 5.6757
 5.3035
 5.9835
 4.5176
 4.9018
 5.0025
 5.3523
 3.3893
 3.6218
 5.0814
[ CPUFloatType{30,1} ]
LOOP:0,LOSS=33.1978
LOOP:1000,LOSS=0.0120936
LOOP:2000,LOSS=0.00164465
LOOP:3000,LOSS=0.000271623
LOOP:4000,LOSS=4.59804e-05
LOOP:5000,LOSS=7.80881e-06
LOOP:6000,LOSS=1.33087e-06
LOOP:7000,LOSS=2.33062e-07
LOOP:8000,LOSS=4.16838e-08
LOOP:9000,LOSS=8.05691e-09
 2.9999  0.9999
[ CPUFloatType{1,2} ]  2.5001
[ CPUFloatType{1} ]
3*1.5+1*2+2.5=8.99974

 

标签:LOSS,30,入门,例程,torch,C++,libtorch,LOOP
From: https://www.cnblogs.com/mengxiangdu/p/18023018

相关文章

  • Java入门(Java诞生、特性、版本、开发环境搭建)
    Java入门1.Java帝国的诞生—一场旷日持久的战争(1)1972年C语言诞生:贴近硬件,运行极快,效率极高;应用于:操作系统、编译器、数据库、网路系统等;难点:指针和内存管理;(2)1982年C++诞生:面向对象;兼容C语言;应用于:图像领域、游戏等;(3)Java帝国的诞生:1995年Java诞生:网页简单而粗糙......
  • MySQL 入门指南
    目录1.简介和基础概念1.1.MySQL是什么?1.2.数据库管理系统(DBMS)的基本概念1.3.SQL(StructuredQueryLanguage)的作用和重要性2.安装和配置MySQL2.1.在Linux下使用Docker进行MySQL的安装和配置2.2.Windows、MacOS下的安装步骤(待补充)3.SQL基础3.1.SQL的基本语法......
  • [Redis] 01-Redis快速入门
    一、Redis简介Redis属于键值对(key-value)数据库Redis中所有的数据都是以key-value的形式存储在内存中的所以读写Redis非常的快,在高并发的场景下,性能非常的好二、Redis服务端(redis-server)的安装省略。建议使用docker安装。Docker安装redis(保姆级教程&图文并茂)-腾讯......
  • C语言0基础入门游戏辅助开发—学习笔记02
    C语言0基础入门游戏辅助开发—学习笔记02PS:这里仅作为本人学习过程中的随笔。数据类型、sizeof运算符数据类型数据类型是在关键字内的,或者说关键字包含数据类型。数据类型有哪些程序中的代码和数据都是以二进制的形式存储的,对计算机系统和硬件而言,数据类型的概念不存在,这......
  • 老鹅分享:海量后台开发——从入门到放弃
    作者:张富春(ahfuzhang),转载时请注明作者和引用链接,谢谢!cnblogs博客zhihuGithub公众号:一本正经的瞎扯大家好,我曾是一名鹅厂的后台开发工程师。从2013年开始,我就在准备一个后台开发方向的培训文档,并多次在内部培训和腾讯课堂上分享过。可是,当《数据密集型应用系统设计......
  • 入门教学指南
    代码类教程是我作为一名计算机科学与技术专业的大四学生,对于初学者而设计的。我明白作为新手入门编程可能会面临一些困惑和挑战,因此我希望通过这个教程来帮助他们更好地理解和掌握基础概念和技巧。这个教程的目标受众是那些刚开始学习编程或者对于网页开发感兴趣的小白。我将尽量......
  • python基础快速入门(二)
    数据类型:Python中常见的数据类型包括数字(int、float、complex)和字符串。python的数值类型会自动转换,相对灵活,整数(int):例如,在32位机器上,整数的位数为32位,取值范围为-2**31到2**31-1,(4个G,)在64位系统上,整数的位数为64位,取值范围为-2**63到2**63-1。长整数(long):Python中......
  • C++入门编程----C++运算符(8)
    什么是运算符运算符是让程序执行特定的数学或逻辑操作的符号,用来表示针对数据的特定操作,也称之为操作符。C++运算符分别有算术运算符、关系运算符、逻辑运算符、赋值运算符、位运算符、移位运算符、sizeof运算符、三目运算符、逗号运算符和域解析运算符。算术运算符C++中的算术......
  • Python入门基础知识(简介、文件格式、终端、执行)
    Python入门基础知识,几天跟大家分享的是关于学习Python需要了解的入门基础知识。一起看一看吧!一、Python简介Python定义:是一个免费、开源、跨平台、动态、面向对象的编程语言。Python程序的执行(运行)方式有两种:交互式、文件式交互式即在命令行输入指令,回车即可得到结果......
  • 「NOI Online 2022 入门组」赛后总结
    前言如有笔误和错误,欢迎给位dalao指出。赛时游记14.00开始下载题目。14.02打开题目。14.02~14.30看第一题,发现就是一个循环结构+选择结构,秒切+检查。14.31~16.30打开第二题,直觉想到由于\(gcd\)以及那个\(z=x\timesy\times\gcd(x,y)\)等式,就开始分解质因数,......