需使用torchsharp库调用libtorch:一、安装torchsharp nuget包并引入cpu/cuda依赖;二、调用torch.initialize()初始化运行时;三、用torch.randn等创建张量并运算;四、用torch.jit.load()加载.pt模型;五、继承module自定义网络并训练。

如果您希望在C#环境中调用LibTorch原生能力实现深度学习模型的加载、推理或训练,则需借助TorchSharp这一官方支持的.NET绑定库。以下是开展TorchSharp开发的具体路径:
一、安装TorchSharp NuGet包
TorchSharp是.NET平台下对LibTorch的封装,通过NuGet分发预编译的原生二进制与托管API,无需手动配置c++运行时或DLL路径。安装后即可直接使用张量操作、自动微分及模块化模型接口。
1、在visual studio中右键项目,选择“管理NuGet程序包”。
2、切换至“浏览”选项卡,搜索TorchSharp。
3、勾选“包含预发行版”,找到最新稳定版本(如0.98.2)并点击安装。
4、确认依赖项TorchSharp.CPU或TorchSharp.CUDA被一同引入项目。
二、引用命名空间并验证运行时加载
TorchSharp要求在首次调用任何torch.* API前完成本机库的初始化,该过程由Torch.Initialize()触发,会自动探测CPU或CUDA环境并加载对应LibTorch动态链接库。
1、在Program.cs或启动类顶部添加using语句:using TorchSharp;
2、在Main方法首行插入:Torch.Initialize();
3、执行后检查是否抛出TorchSharp.TorchException,若无异常则表示LibTorch已成功加载。
三、创建张量并执行基础运算
张量是TorchSharp的核心数据结构,所有计算均基于Tensor对象展开。CPU张量默认构造,CUDA张量需显式指定设备;所有运算符重载与numpy风格一致,支持链式调用。
1、声明一个形状为[3, 4]的随机浮点张量:var x = torch.randn(3, 4);
2、对x执行逐元素正弦运算并保存结果:var y = x.sin();
3、打印y的形状与设备信息:console.WriteLine(y.Shape + ” on ” + y.Device);
四、加载预训练pytorch模型(.pt格式)
TorchSharp支持直接加载TorchScript序列化模型(.pt),无需Python环境。模型以ITorchModule形式存在,可像原生C#对象一样调用forward方法,输入输出均为Tensor。
1、确保模型文件model.pt位于输出目录,且生成操作设为“始终复制”。
2、使用torch.jit.load()加载模型:var module = torch.jit.load(“model.pt”);
3、构造输入张量(须与训练时shape/dtype一致):var input = torch.randn(1, 3, 224, 224).to(torch.float32);
4、执行前向传播:var output = module.Forward(input);
五、自定义Module并实现训练循环
通过继承TorchSharp.Modules.Module可定义带可学习参数的神经网络结构。参数自动注册至parameters()集合,配合torch.optim.Adam等优化器即可构建完整训练流程。
1、定义线性分类器类:class LinearClassifier : Module { public LinearClassifier(int inFeatures, int outFeatures) : base(“LinearClassifier”) { … } }
2、在构造函数中声明权重与偏置:this.register_parameter(“weight”, torch.randn(inFeatures, outFeatures));
3、重写forward方法实现计算逻辑:public override Tensor forward(Tensor input) => input.matmul(weight) + bias;
4、实例化模型、损失函数与优化器:var model = new LinearClassifier(784, 10); var lossFn = torch.nn.CrossEntropyLoss(); var opt = torch.optim.Adam(model.parameters(), lr: 1e-3);