C#调用pytorch模型

有天一个非全的同学问我,这个深度学习模型训练后怎么用呢?

我们是不是可以根据深度学习做一些小应用申请软著?

对是的,但是我对C#要熟悉些,那用C#做吧。But,网上的资料太少了!!!!!

下面我给大家介绍下我使用的方面,目前看是通的。

C#模型调用视频

Pytorch模型保存

这里有个坑,不能简单的用torch.save(model.state_dict(), ckpt_path)和torch.save(model,ckpt_path)保存训练好的最优模型,要使用torch.jit.script()。注意:torch.jit.trace()和torch.jit.script()的区别,可以自行搜索。

          ckpt_path = os.path.join('outputs/', f'epochb_{epoch}.pt')
          x: torch.Tensor = [0, 1, 2, 5, 6, 7, 8]
          x = torch.Tensor(x)
          x = x.unsqueeze(0)
          y: torch.Tensor = [0.7]
          traced_script_module = torch.jit.script(model, (x, y))
          traced_script_module.save(ckpt_path)

本文的模型,需要两个参数,参数的情况需要查看调用model的时候的传参

在C#中创建winform项目并加载TorchSharp包

我使用最方便的winform来测试。在Visual Studio 2022中创建一个winform项目,然后使用Nuget工具按照TorchSharp包。

调用模型

在默认页面中拖入一个lable(用来显示评分结果)和一个按钮(点击后调用模型进行评分),双击按钮进行按钮响应点击事件代码中。

           //加载训练好的模型
            var model = torch.jit.load("epochb_1.pt");
            torch.Tensor t = torch.rand(1, 456);
            using var x = torch.IntTensor(t);
            using var y = torch.FloatTensor(0.7);
            var output = model.forward(new object[] { x, y });//直接传(x,y)会报错
            var score = ((TorchSharp.torch.Tensor)output)[0].ToSingle();//转换为单精度浮点数, 
                                                                       //注意:这一步一定要有
            label1.Text = score.ToString();

完整代码

using TorchSharp;
namespace pytorch_test
{
    public partial class Form1 : Form
    {

        public Form1()
        {
            InitializeComponent();
        }
        private void button1_Click(object sender, EventArgs e)
        {   //加载训练好的模型
            var model = torch.jit.load("epochb_1.pt");
            torch.Tensor t = torch.rand(1, 456);
            using var x = torch.IntTensor(t);
            using var y = torch.FloatTensor(0.7);
            var output = model.forward(new object[] { x, y });//直接传(x,y)会报错
            var score = ((TorchSharp.torch.Tensor)output)[0].ToSingle();//转换为单精度浮点数,注意:这一步一定要有
            label1.Text = score.ToString();
        }
    }
}

过程中遇到的错误:

请看我的其他博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值