
作者:痴者工良
电子书仓库:https://github.com/whuanle/cs_pytorch
Maomi.Torch 项目仓库:https://github.com/whuanle/Maomi.Torch
.NET 生态系统已经成为支持多种编程语言、多种平台和大量开发工具的强大生态系统。最近几年,随着人工智能和机器学习的迅猛发展,.NET 平台也相应地发展出了一系列支持模型训练、推理和部署的工具和框架,这使得开发者能够在熟悉的 .NET 环境中更高效地进行 AI 应用开发。

支持: 社区支持,成熟稳定。
Star: 3.6k
Github: https://github.com/mathnet/mathnet-numerics
NET Numerics 是 Math.NET 计划的数值基础,旨在为科学、工程和日常使用中的数值计算提供方法和算法。涵盖的主题包括特殊函数,线性代数,概率模型,随机数,统计,插值,积分,回归,曲线拟合,积分变换 (FFT) 等。
支持: Microsoft 官方支持,成熟的项目,生态强势、社区活跃、应用广泛。
Star: 9.1k
Github: https://github.com/dotnet/machinelearning
ML.NET 是一个跨平台的开源机器学习框架,专为 .NET 开发者设计,提供丰富的工具和API,涵盖模型训练、评估和部署等整个流程,支持回归、分类、聚类及自然语言处理等多种任务,帮助开发者在熟悉的 .NET 环境中高效构建和优化 AI 解决方案。
支持: SciSharp 支持,成熟的项目,社区生态和应用领域都很好。
Star: 3.3k
Github: https://github.com/SciSharp/TensorFlow.NET
TensorFlow.NET 的目标是在 C# 中实现全面的 TensorFlow API,便于 .NET 开发者开发、训练和部署跨平台的机器学习模型。
支持: dotnet 开源社区支持,不成熟,生态较差、跟不上发展、应用领域太少、应用开发局限。
Star: 1.5k
Github: https://github.com/dotnet/TorchSharp
TorchSharp 通过绑定 libtorch 实现利用与 Pytorch 类似功能的深度学习框架。
支持: Microsoft 官方支持,成熟的项目,生态强势、社区活跃、应用广泛,支持 C#、C++、Python 等。
Star: 16k
Github: https://github.com/microsoft/onnxruntime
ONNX 运行时是一个跨平台的推理和训练机器学习加速器,可以提供更快的客户体验和更低的成本,它能够通过灵活的接口集成特定硬件库,支持的模型包括来自 PyTorch、TensorFlow/Keras、TFLite 和 Scikit-Learn 等框架。
LLamaSharp: https://github.com/SciSharp/LLamaSharp
OllamaSharp: https://github.com/awaescher/OllamaSharp
社区:Microsoft 官方支持,生态非常好,功能强劲,支持 C#、Python 等语言。
Star: 23k
Github: https://github.com/microsoft/semantic-kernel
Semantic Kernel是一个 SDK,它集成了大型语言模型 (LLM) ,如 OpenAI、 Azure OpenAI 和 Hugging Face。
社区:Microsoft 官方支持,生态较好,功能强劲。
Star: 1.8k
Github: https://github.com/microsoft/kernel-memory
此存储库提供了特定 AI 和 LLM 应用场景中的 Memory 的最佳实践和参考实现,主要包括文档处理、内容检索、RAG 等能力。
AntSK : https://github.com/AIDotNet/AntSK
fast-wiki: https://github.com/AIDotNet/fast-wiki
TorchSharp 是由 .NET 开源基金会主导开发的项目,旨在为 .NET 社区带来 PyTorch 类似的深度学习开发体验,目前主要在主要提供图像识别领域接口,在自然语言处理、语音识别和合成领域没有成熟的案例。
在主流 AI 模型仓库中大多数 Pytorch 格式的模型。
https://www.modelscope.cn/models

计算机视觉
视觉检测跟踪、光学字符识别、人脸人体、视觉分类、视觉编辑、视觉分割、视觉生成、视觉表征、视觉评价、底层视觉、三维视觉、基础模型应用、自然语言处理
文本分类
文本生成、分词、命名实体识别、翻译、文本摘要、句子相似度、预训练、自然语言推理、文本纠错、文本向量、特征抽取、情感分析、关系抽取、零样本分类、表格问答、问答、词性标注、实体分类、序列标注、任务型对话
语音
语音识别、语音合成、语音唤醒、语音降噪、回声消除、语音分离、音频分类、音频生成、说话人确认、说话人日志、标点预测、时间戳预测、语音端点检测、困惑度计算、语音语种识别、音频量化编码、音视频语音识别、情绪识别、逆文本正则化
Pytorch
TorchSharp
graph LR A[数据收集] --> B[数据准备] B --> C[特征工程] C --> D[模型选择] D --> E[模型训练] E --> F[模型评估] F --> G[输出模型] subgraph 训练 A B C D E F end
├─test
│ ├─airplane
│ ├─automobile
│ ├─bird
│ ├─cat
│ ├─deer
│ ├─dog
│ ├─frog
│ ├─horse
│ ├─ship
│ └─truck
└─train
│ ├─airplane
│ ├─automobile
│ ├─bird
│ ├─cat
│ ├─deer
│ ├─dog
│ ├─frog
│ ├─horse
│ ├─ship
│ └─truck
根据需求设计神经网络架构或使用开源网络架构。
案例代码教程地址:https://torch.whuanle.cn/02.start/02.start_torch.html
using TorchSharp.Modules;
using static TorchSharp.torch;
using nn = TorchSharp.torch.nn;
public class NeuralNetwork : nn.Module<Tensor, Tensor>
{
// 传递给基类的参数是模型的名称
public NeuralNetwork() : base(nameof(NeuralNetwork))
{
flatten = nn.Flatten();
linear_relu_stack = nn.Sequential(
nn.Linear(28 * 28, 512),
nn.ReLU(),
nn.Linear(512, 512),
nn.ReLU(),
nn.Linear(512, 10));
// C# 版本需要调用这个函数,将模型的组件注册到模型中
RegisterComponents();
}
Flatten flatten;
Sequential linear_relu_stack;
public override Tensor forward(Tensor input)
{
// 将输入一层层处理并传递给下一层
var x = flatten.call(input);
var logits = linear_relu_stack.call(x);
return logits;
}
}TorchSharp 自带的网络架构:
alexnet
googlenet
inception_v3
mobilenet_v2
mobilenet_v3_large
mobilenet_v3_small
resnet18
resnet34
resnet50
wide_resnet50_2
resnext50_32x4d
resnet101
resnext101_32x8d
resnext101_64x4d
wide_resnet101_2
resnet152
vgg11
vgg11_bn
vgg13
vgg13_bn
vgg16
vgg16_bn
vgg19
vgg19_bnstatic void Train(DataLoader dataloader, NeuralNetwork model, CrossEntropyLoss loss_fn, SGD optimizer)
{
var size = dataloader.dataset.Count;
model.train();
int batch = 0;
foreach (var item in dataloader)
{
var x = item["data"];
var y = item["label"];
// 第一步
// 训练当前图片
var pred = model.call(x);
// 通过损失函数得出与真实结果的误差
var loss = loss_fn.call(pred, y);
// 第二步,反向传播
loss.backward();
// 计算梯度并优化参数
optimizer.step();
// 清空优化器当前的梯度
optimizer.zero_grad();
// 每 100 次打印损失值和当前训练的图片数量
if (batch % 100 == 0)
{
loss = loss.item<float>();
// Pytorch 框架会在 x.shape[0] 存储当前批的位置
var current = (batch + 1) * x.shape[0];
Console.WriteLine("loss: {loss.item<float>(),7} [{current,5}/{size,5}]");
}
batch++;
}
}深度学习基础知识和 TorchSharp 教程。
https://github.com/dotnet/TorchSharp/network/dependents
使用 TorchSharp 开的项目。
https://github.com/IntptrMax/YoloSharp
用 TorchSharp 实现 C # 中的 Yolo 模型,支持 yolov8、yolov11,可以直接使用
.pt模型。
https://github.com/IntptrMax/StableDiffusionSharp/tree/master/StableDiffusionSharp
能够加载 StableDiffusion 的模型(safetensors 格式)并工具提示词生成图像。
这类模型使用音频数据来训练模型,这些模型可以识别声音、生成音乐。
大语言模型。
ONNX Runtime 是一个高性能推理引擎,用于执行通过 ONNX 格式表示的机器学习模型,提供数据处理、模型训练、模型评估和推理等功能,支持多种机器学习任务。
ML.NET 是一个开源的跨平台机器学习框架,专门为 .NET 开发者提供易用的工具和算法库来构建和部署机器学习模型。
优点:
graph LR F[模型文件] --> G[载入模型] G --> H[输入数据准备] H --> I[进行推理] I --> J[输出结果处理] subgraph 推理 G H I J end
官方仓库: https://github.com/dotnet/machinelearning-samples
项目地址: https://github.com/microsoft/PhiCookBook

部署推理 Phi-4-mini-instruct-onnx (32B,int4 量化),CPU:AMD 8745H,内存 32GB。
Hardware | ONNX | PyTorch | speedup |
|---|---|---|---|
RTX 4090 GPU | int4: 260.045 tokens/sec fp16: 97.463 tokens/se fp32: 19.320 tokens/sec | fp16: 43.957 tokens/sec | 5x(fp16) |
Intel Xeon Platinum 8272CL CPU | int4: 16.89 tokens/sec | fp32: 1.636 tokens/sec | 10x |
Intel Xeon Platinum 8573B CPU | int4: 23.978 tokens/sec | fp32: 4.479 tokens/sec | 5.35X |
AMD EPYC 7763v CPU | int4: 19.884 tokens/sec | fp32: 1.599 tokens/sec | 12.4x |
Intel Core Ultra 7 165H Laptop CPU | int4: 4.863 tokens/sec | fp32: 1.699 tokens/sec | 2.8x |
Intel i7 processor | int4: 3.474 tokens/sec fp32: 1.800 tokens/sec | fp32: 0.702 tokens/sec | 4.85x |

开源项目:
https://github.com/gerardo-lijs/MachineLearning-ObjectDetect-WPF