# C# 机器学习与深度学习生态全景:六大开源框架深度对比分析
> 一文读懂 .NET 平台上的机器学习与深度学习框架选型
## 前言
在机器学习和深度学习领域,Python 长期占据主导地位。然而,对于企业级 .NET 应用开发者而言,在现有技术栈中集成机器学习能力是一种自然的需求。本文将深入分析 GitHub 上最受欢迎的 C# 机器学习/深度学习开源框架,帮助你做出正确的技术选型。
---
## 一、框架概览与排名
| 排名 | 项目 | Stars | 类型 | 维护状态 | 核心定位 |
|------|------|-------|------|----------|----------|
| 1 | **ML.NET** | 9.3k | 原生ML框架 | ✅ 活跃 | 微软官方,企业级ML |
| 2 | **Accord.NET** | 4.6k | 原生ML框架 | ❌ 已归档 | 传统ML算法库 |
| 3 | **TensorFlow.NET** | 3.4k | TF绑定 | ⚠️ 维护模式 | TensorFlow的.NET实现 |
| 4 | **BotSharp** | 3.0k | AI Agent框架 | ✅ 活跃 | 企业级多智能体系统 |
| 5 | **TensorFlowSharp** | 3.2k | TF绑定 | ❌ 已归档 | TensorFlow C API绑定 |
| 6 | **TorchSharp** | 1.8k | PyTorch绑定 | ✅ 活跃 | PyTorch的.NET实现 |
| 7 | **Infer.NET** | 1.6k | 概率编程 | ✅ 活跃 | 贝叶斯推断框架 |
---
## 二、ML.NET:微软官方的机器学习框架
### 2.1 架构设计
ML.NET 采用**管道式(Pipeline)架构**,核心设计理念是让 .NET 开发者无需 ML 专业知识即可构建机器学习应用。
```
┌─────────────────────────────────────────────────────────────────┐
│ ML.NET 架构图 │
├─────────────────────────────────────────────────────────────────┤
│ │
│ MLContext (入口点) │
│ │ │
│ ├── DataOperationsCatalog (数据加载/保存) │
│ ├── TransformsCatalog (数据转换) │
│ ├── BinaryClassificationCatalog │
│ ├── MulticlassClassificationCatalog │
│ ├── RegressionCatalog │
│ ├── ClusteringCatalog │
│ ├── AnomalyDetectionCatalog │
│ ├── RecommendationCatalog │
│ └── TimeSeriesCatalog │
│ │
│ 管道流程: │
│ IDataView → IEstimator → ITransformer → PredictionEngine │
│ │
└─────────────────────────────────────────────────────────────────┘
```
### 2.2 核心组件
| 组件 | 作用 |
|------|------|
| **MLContext** | 所有 ML.NET 操作的入口点,类似 EF 的 DbContext |
| **IDataView** | 核心数据抽象,延迟加载、列式存储、线程安全 |
| **IEstimator** | 转换器或训练器的蓝图 |
| **ITransformer** | 训练后的模型,可对数据进行转换 |
| **PredictionEngine** | 单次预测的便捷 API |
### 2.3 支持的算法
**分类任务:**
- 二分类:FastTree、LightGBM、SDCA、L-BFGS Logistic Regression、SVM
- 多分类:LightGBM、SDCA、Naive Bayes、One-Versus-All
**回归任务:**
- 线性回归、SDCA、FastTree、LightGBM、GAM
**聚类:**
- K-Means
**其他:**
- 异常检测(PCA)
- 推荐系统(矩阵分解)
- 时间序列预测(SSA)
- 图像分类(TensorFlow 迁移学习)
### 2.4 AutoML 能力
ML.NET 提供三种 AutoML 工具:
```csharp
// 代码式 AutoML
var experiment = mlContext.Auto()
.CreateBinaryClassificationExperiment(trainingTimeInSeconds: 60);
var result = experiment.Execute(trainingDataView);
var bestModel = result.BestRun.Model;
```
**Model Builder(Visual Studio 扩展):**
- 可视化界面,支持分类、回归、推荐、预测、图像分类
- 自动生成训练代码和消费代码
**ML.NET CLI:**
```bash
mlnet classification --dataset "data.csv" --label-col "Label" --train-time 60
```
### 2.5 代码示例:情感分析
```csharp
using Microsoft.ML;
using Microsoft.ML.Data;
// 1. 创建 MLContext
var mlContext = new MLContext();
// 2. 加载数据
IDataView trainingData = mlContext.Data
.LoadFromTextFile<SentimentData>(dataPath, hasHeader: true);
// 3. 构建管道
var pipeline = mlContext.Transforms.Text
.FeaturizeText("Features", nameof(SentimentData.Text))
.Append(mlContext.BinaryClassification.Trainers
.LbfgsLogisticRegression("Label", "Features"));
// 4. 训练模型
ITransformer model = pipeline.Fit(trainingData);
// 5. 预测
var engine = mlContext.Model
.CreatePredictionEngine<SentimentData, SentimentPrediction>(model);
var prediction = engine.Predict(new SentimentData { Text = "This is great!" });
Console.WriteLine($"预测结果: {prediction.Prediction}, 概率: {prediction.Probability:P}");
```
### 2.6 TensorFlow/ONNX 集成
```csharp
// 图像分类(迁移学习)
var pipeline = mlContext.Transforms.LoadImages("Image", "", "ImagePath")
.Append(mlContext.Transforms.ResizeImages("Image", 224, 224))
.Append(mlContext.Transforms.ExtractPixels("Image"))
.Append(mlContext.MulticlassClassification.Trainers.ImageClassification(
new ImageClassificationTrainer.Options()
{
Arch = ImageClassificationTrainer.Architecture.ResnetV2101,
MetricsCallback = metrics => Console.WriteLine(metrics)
}))
.Append(mlContext.Transforms.Conversion.MapKeyToValue("PredictedLabel"));
```
### 2.7 最新特性(ML.NET 5.0+)
- **GenAI 集成**:`CausalLMPipelineChatClient` 支持
- **新 Tokenizer**:SentencePiece、Phi-4、ByteLevel BPE(DeepSeek)、Tiktoken(GPT-4)
- **LightGBM 增强**:确定性选项、NumberOfLeaves 参数
---
## 三、TensorFlow.NET:TensorFlow 的完整 .NET 实现
### 3.1 架构设计
TensorFlow.NET 通过 **P/Invoke** 绑定到 TensorFlow 的原生 C API,提供与 Python TensorFlow 几乎相同的 API 体验。
```
┌─────────────────────────────────────────────────────────────────┐
│ TensorFlow.NET 架构 │
├─────────────────────────────────────────────────────────────────┤
│ │
│ TensorFlow.Keras (高级 API) │
│ ├── Sequential API │
│ ├── Functional API │
│ └── Subclassing API │
│ │
│ TensorFlow.NET (核心绑定) │
│ ├── P/Invoke 声明 │
│ ├── Tensor 操作 │
│ └── 会话管理 │
│ │
│ SciSharp.TensorFlow.Redist (原生库) │
│ └── TensorFlow C Library │
│ │
└─────────────────────────────────────────────────────────────────┘
```
### 3.2 Keras API 支持
**Sequential API:**
```csharp
var model = keras.Sequential();
model.add(keras.layers.Dense(64, activation: "relu", input_shape: (784,)));
model.add(keras.layers.Dense(64, activation: "relu"));
model.add(keras.layers.Dense(10, activation: "softmax"));
model.compile(optimizer: "adam", loss: "sparse_categorical_crossentropy");
model.fit(x_train, y_train, epochs: 5);
```
**Functional API(ResNet 示例):**
```csharp
var inputs = keras.Input(shape: (32, 32, 3), name: "img");
var x = layers.Conv2D(32, 3, activation: "relu").Apply(inputs);
var x = layers.Conv2D(64, 3, activation: "relu").Apply(x);
var block_1_output = layers.MaxPooling2D(3).Apply(x);
// 残差连接
x = layers.Conv2D(64, 3, activation: "relu", padding: "same").Apply(block_1_output);
x = layers.Conv2D(64, 3, activation: "relu", padding: "same").Apply(x);
var block_2_output = layers.Add().Apply(new Tensors(x, block_1_output));
var outputs = layers.Dense(10).Apply(x);
var model = keras.Model(inputs, outputs, name: "toy_resnet");
```
### 3.3 Eager Execution vs Graph Mode
**Eager 模式(默认):**
```csharp
tf.enable_eager_execution();
var W = tf.Variable(-0.06f, name: "weight");
var b = tf.Variable(-0.73f, name: "bias");
using var g = tf.GradientTape();
var pred = W * X + b;
var loss = tf.reduce_sum(tf.pow(pred - Y, 2)) / (2 * n_samples);
var gradients = g.gradient(loss, (W, b));
optimizer.apply_gradients(zip(gradients, (W, b)));
```
| 特性 | Eager 模式 | Graph 模式 |
|------|-----------|-----------|
| 执行方式 | 立即执行 | 延迟执行(会话) |
| 调试 | 简单 | 需要 TensorBoard |
| 性能 | 稍慢 | 生产优化 |
| 用途 | 研究、训练 | 生产推理 |
### 3.4 GPU 支持
```csharp
// 检查 GPU
var gpus = tf.config.list_physical_devices("GPU");
Console.WriteLine($"可用 GPU 数量: {gpus.Length}");
```
| 平台 | CPU 包 | GPU 包 |
|------|--------|--------|
| Windows | SciSharp.TensorFlow.Redist | SciSharp.TensorFlow.Redist-Windows-GPU |
| Linux | SciSharp.TensorFlow.Redist | SciSharp.TensorFlow.Redist-Linux-GPU |
---
## 四、TorchSharp:PyTorch 的 .NET 桥梁
### 4.1 架构设计
TorchSharp 通过四层架构连接 .NET 和 PyTorch:
```
┌─────────────────────────────────────────────────────────────────┐
│ Layer 1: Managed .NET API (C#/F#) │
│ - Tensor 类、nn.Module、优化器 │
├─────────────────────────────────────────────────────────────────┤
│ Layer 2: P/Invoke Bridge │
│ - extern 方法声明、类型封送 │
├─────────────────────────────────────────────────────────────────┤
│ Layer 3: Native C++ (LibTorchSharp) │
│ - THSTensor_*, THSNN_* 包装函数 │
├─────────────────────────────────────────────────────────────────┤
│ Layer 4: LibTorch (PyTorch C++ Backend) │
│ - at::Tensor 操作、CUDA 内核、Autograd 引擎 │
└─────────────────────────────────────────────────────────────────┘
```
### 4.2 Tensor 操作与 Autograd
```csharp
// Tensor 创建
var zeros = torch.zeros(3, 4);
var ones = torch.ones(2, 3, 4);
var randn = torch.randn(64, 1000);
var fromArray = torch.tensor(new[] { 1, 2, 3 });
// GPU 支持
var cudaTensor = torch.randn(10).cuda();
// Autograd 自动微分
var x = torch.randn(3, 4, requires_grad: true);
var y = torch.randn(3, 4, requires_grad: true);
var z = x * 2 + y;
var loss = z.pow(2).sum();
loss.backward();
Console.WriteLine($"∂loss/∂x = {x.grad()}");
Console.WriteLine($"∂loss/∂y = {y.grad()}");
```
### 4.3 自定义神经网络模块
```csharp
using TorchSharp;
using static TorchSharp.torch.nn;
public class MNISTModel : Module<Tensor, Tensor>
{
private readonly Module<Tensor, Tensor> conv1, conv2, fc1, fc2;
public MNISTModel() : base("MNIST")
{
conv1 = Conv2d(1, 32, kernelSize: 3, stride: 1);
conv2 = Conv2d(32, 64, kernelSize: 3, stride: 1);
fc1 = Linear(9216, 128);
fc2 = Linear(128, 10);
RegisterComponents(); // 必须调用!
}
public override Tensor forward(Tensor input)
{
using var x1 = conv1.forward(input);
using var x2 = relu(x1);
using var x3 = max_pool2d(x2, 2);
using var x4 = conv2.forward(x3);
using var x5 = relu(x4);
using var x6 = max_pool2d(x5, 2);
using var x7 = flatten(x6, 1);
using var x8 = fc1.forward(x7);
using var x9 = relu(x8);
return log_softmax(fc2.forward(x9), dim: 1);
}
}
```
### 4.4 内存管理:DisposeScope
TorchSharp 提供独特的内存管理模式:
```csharp
// 推荐模式:DisposeScope
using (var d = torch.NewDisposeScope())
{
var result = complexComputation();
return result.MoveToOuterDisposeScope(); // 保留结果
} // 其他中间张量自动释放
// Sequential 构建
var model = Sequential(
("conv1", Conv2d(1, 32, kernelSize: 3)),
("relu1", ReLU()),
("pool1", MaxPool2d(2)),
("flatten", Flatten()),
("fc1", Linear(32 * 13 * 13, 128)),
("fc2", Linear(128, 10))
);
```
### 4.5 TorchVision 支持
```csharp
using static TorchSharp.torchvision.transforms;
var transform = transforms.Compose(
transforms.Resize(256),
transforms.CenterCrop(224),
transforms.ConvertImageDtype(torch.ScalarType.Float32),
transforms.Normalize(
mean: new[] { 0.485f, 0.456f, 0.406f },
std: new[] { 0.229f, 0.224f, 0.225f })
);
// 加载预训练模型
var resnet = torchvision.models.resnet18(
numClasses: 1000,
weights: torchvision.models.ResNet18_Weights.IMAGENET1K_V1
);
```
---
## 五、BotSharp:企业级 AI 多智能体框架
### 5.1 架构设计
BotSharp 是专为 .NET 设计的**AI 多智能体框架**,采用插件化架构:
```
┌─────────────────────────────────────────────────────────────────┐
│ BotSharp 架构 │
├─────────────────────────────────────────────────────────────────┤
│ │
│ 用户请求 → Router Agent → Task Agent(s) → LLM Provider │
│ │
│ 核心模块: │
│ ├── Plugin Loader (插件加载器) │
│ ├── Hook System (钩子系统) │
│ ├── Agent Profile (智能体配置) │
│ ├── Conversation & State (会话状态管理) │
│ ├── Routing & Planning (路由规划) │
│ ├── Templating (Liquid 模板) │
│ └── LLM Provider Abstraction (LLM 提供者抽象) │
│ │
└─────────────────────────────────────────────────────────────────┘
```
### 5.2 LLM 集成
| 提供者 | 插件包 |
|--------|--------|
| Azure OpenAI | BotSharp.Plugin.AzureOpenAI |
| OpenAI (GPT-4o/o1) | BotSharp.Plugin.OpenAI |
| Anthropic Claude | BotSharp.Plugin.AnthropicAI |
| Google Gemini | BotSharp.Plugin.GoogleAI |
| DeepSeek V3 | BotSharp.Plugin.DeepSeekAI |
| Meta LLaMA | BotSharp.Plugin.LLamaSharp |
| HuggingFace | BotSharp.Plugin.HuggingFace |
### 5.3 RAG 能力
```csharp
// 知识库配置
// 通过 API 上传文档:POST /knowledge/{agentId}
// RAG 组件:
// - BotSharp.Plugin.KnowledgeBase (核心知识管理)
// - BotSharp.Plugin.Qdrant (向量数据库)
// - 文本嵌入: fastText, LLamaSharp, BERT
```
### 5.4 MCP (Model Context Protocol) 支持
BotSharp 在 r5.0 版本中添加了 MCP 集成:
- 可视化 MCP 管理
- 支持大模型调用外部工具
- 与 mcp.so 等主流服务集成
### 5.5 多渠道支持
| 渠道 | 插件包 |
|------|--------|
| Twilio (语音/SMS) | BotSharp.Plugin.Twilio |
| Facebook Messenger | BotSharp.Plugin.MetaMessenger |
| Telegram | BotSharp.Plugin.TelegramBots |
| 微信 | BotSharp.Plugin.WeChat |
| Web/WebSocket | BotSharp.Plugin.ChatHub |
### 5.6 创建智能体插件
```csharp
namespace BotSharp.Plugin.PizzaBot;
public class PizzaBotPlugin : IBotSharpPlugin
{
public void RegisterDI(IServiceCollection services, IConfiguration config)
{
services.AddScoped<IFunctionCallback, MakePaymentFn>();
services.AddScoped<IAgentHook, PizzaBotAgentHook>();
}
}
// 函数定义 (JSON)
{
"name": "make_payment",
"description": "call this function to make payment",
"visibility_expression": "{% if states.order_number != empty %}visible{% endif %}",
"parameters": {
"type": "object",
"properties": {
"order_number": { "type": "string", "description": "order number" },
"total_amount": { "type": "string", "description": "total amount" }
},
"required": ["order_number", "total_amount"]
}
}
```
### 5.7 最新特性
- **图像生成与处理**(r5.2)
- **图表生成**(ChartHandler)
- **实时语音**(Realtime Voice)
- **Python 解释器**
- **Playwright WebDriver**(浏览器自动化)
- **SQL Driver**(数据库助手)
---
## 六、Infer.NET:贝叶斯推断与概率编程
### 6.1 核心概念
Infer.NET 是微软开发的**概率编程框架**,用于贝叶斯推断。与传统的预构建算法不同,你可以定义自己的统计模型。
```
┌─────────────────────────────────────────────────────────────────┐
│ Infer.NET 架构 │
├─────────────────────────────────────────────────────────────────┤
│ │
│ 模型定义 (用户代码) │
│ │ │
│ ▼ │
│ 模型编译器 (源代码生成) │
│ │ │
│ ▼ │
│ 编译后的算法 │
│ │ │
│ ▼ │
│ 推理引擎 (执行) ← 观测值 (数据) │
│ │ │
│ ▼ │
│ 查询结果 (分布) │
│ │
└─────────────────────────────────────────────────────────────────┘
```
### 6.2 消息传递算法
| 算法 | 特点 | 适用场景 |
|------|------|----------|
| **Expectation Propagation (EP)** | 默认算法,零避免 | 通用场景 |
| **Variational Message Passing (VMP)** | 保证收敛,零强制 | 需要稳定性的场景 |
| **Gibbs Sampling** | 随机采样,最终收敛 | 复杂后验分布 |
### 6.3 代码示例
**两枚硬币问题:**
```csharp
using Microsoft.ML.Probabilistic;
using Microsoft.ML.Probabilistic.Models;
Variable<bool> firstCoin = Variable.Bernoulli(0.5);
Variable<bool> secondCoin = Variable.Bernoulli(0.5);
Variable<bool> bothHeads = firstCoin & secondCoin;
InferenceEngine engine = new InferenceEngine();
Console.WriteLine(engine.Infer(bothHeads));
// 输出: Bernoulli(0.25)
```
**TrueSkill 玩家技能评分:**
```csharp
// 玩家技能变量
var playerSkills = Variable.Array<double>(player);
playerSkills[player] = Variable.GaussianFromMeanAndVariance(6, 9).ForEach(player);
// 比赛表现 = 技能 + 噪声
var winnerPerformance = Variable.GaussianFromMeanAndVariance(
playerSkills[winners[game]], 1.0);
var loserPerformance = Variable.GaussianFromMeanAndVariance(
playerSkills[losers[game]], 1.0);
// 约束:获胜者表现更好
Variable.ConstrainTrue(winnerPerformance > loserPerformance);
// 推断
var inferredSkills = inferenceEngine.Infer<Gaussian[]>(playerSkills);
```
### 6.4 与 ML.NET 的关系
Infer.NET 现在是 **ML.NET 的一部分**,通过 NuGet 包分发:
- `Microsoft.ML.Probabilistic`
- `Microsoft.ML.Probabilistic.Compiler`
- `Microsoft.ML.Probabilistic.Learners`
---
## 七、Accord.NET:已归档的经典框架
### 7.1 历史与现状
Accord.NET 始于 2007 年,是 .NET 平台上最早的综合机器学习框架之一,于 2020 年 11 月归档。
**归档原因:**
1. Microsoft 发布 ML.NET,使其最终过时
2. 作者攻读博士,无法维护
3. 学术界普遍使用 Python,C# 在 ML 领域认可度低
### 7.2 主要模块
| 模块 | 功能 |
|------|------|
| Accord.MachineLearning | SVM、神经网络、决策树 |
| Accord.Statistics | 统计分布、假设检验 |
| Accord.Imaging | 计算机视觉、特征检测 |
| Accord.Vision | 人脸检测、目标跟踪 |
| Accord.Audio | 音频信号处理 |
| Accord.Neuro | 深度信念网络、RBM |
### 7.3 统一学习模式
```csharp
// Accord.NET 的学习模式
var learner = new SupportVectorLearning< Gaussian >();
var svm = learner.Learn(inputs, outputs); // 训练
var prediction = svm.Decide(newInput); // 预测
```
### 7.4 迁移建议
- **新项目**:使用 ML.NET
- **需要 TensorFlow/PyTorch**:使用 TensorFlow.NET 或 TorchSharp
- **现有 Accord.NET 项目**:可继续使用,但不推荐新功能开发
---
## 八、框架对比分析
### 8.1 功能定位对比
```
┌─────────────────────────────────────────────────────────────────┐
│ 应用场景光谱 │
├─────────────────────────────────────────────────────────────────┤
│ │
│ 传统ML 深度学习 LLM应用 AI Agent │
│ │ │ │ │ │
│ ▼ ▼ ▼ ▼ │
│ ML.NET TensorFlow.NET BotSharp BotSharp │
│ Accord.NET TorchSharp │
│ Infer.NET │
│ │
└─────────────────────────────────────────────────────────────────┘
```
### 8.2 技术特性对比
| 特性 | ML.NET | TensorFlow.NET | TorchSharp | BotSharp | Infer.NET |
|------|--------|----------------|------------|----------|-----------|
| **原生 .NET** | ✅ | ❌ (绑定) | ❌ (绑定) | ✅ | ✅ |
| **深度学习** | ⚠️ (通过集成) | ✅ | ✅ | ❌ | ❌ |
| **传统 ML** | ✅ | ❌ | ❌ | ❌ | ⚠️ |
| **GPU 支持** | ✅ | ✅ | ✅ | ✅ | ❌ |
| **AutoML** | ✅ | ❌ | ❌ | ❌ | ❌ |
| **可视化工具** | ✅ Model Builder | ❌ | ❌ | ✅ Web UI | ⚠️ |
| **生产就绪** | ✅ | ⚠️ | ✅ | ✅ | ✅ |
| **活跃维护** | ✅ | ⚠️ | ✅ | ✅ | ✅ |
### 8.3 API 风格对比
**ML.NET(管道式):**
```csharp
var pipeline = mlContext.Transforms.Text.FeaturizeText("Features", "Text")
.Append(mlContext.BinaryClassification.Trainers.FastTree());
var model = pipeline.Fit(data);
```
**TensorFlow.NET(Keras 风格):**
```csharp
var model = keras.Sequential();
model.add(keras.layers.Dense(64, activation: "relu"));
model.compile(optimizer: "adam", loss: "mse");
model.fit(x, y, epochs: 10);
```
**TorchSharp(PyTorch 风格):**
```csharp
public class Net : Module<Tensor, Tensor> {
private Module<Tensor, Tensor> fc1 = Linear(784, 128);
public override Tensor forward(Tensor x) => fc1.forward(x);
}
var model = new Net().to(torch.CUDA);
```
### 8.4 性能对比
| 场景 | 推荐框架 | 原因 |
|------|----------|------|
| 大规模表格数据 | ML.NET | 内存效率高,Lazy 加载 |
| 图像分类 | TorchSharp / TensorFlow.NET | GPU 加速,预训练模型 |
| NLP 文本分类 | ML.NET (TextClassification) | 内置 NAS-BERT |
| 实时推理 | TorchSharp / TensorFlow.NET | 优化后推理性能好 |
| 概率建模 | Infer.NET | 专门的贝叶斯推断 |
---
## 九、选型决策树
```
开始选型
│
├── 需要构建 AI Agent / 聊天机器人?
│ └── 是 → BotSharp
│
├── 需要概率编程 / 贝叶斯推断?
│ └── 是 → Infer.NET
│
├── 需要深度学习(自定义网络)?
│ ├── 熟悉 PyTorch? → TorchSharp
│ └── 熟悉 TensorFlow? → TensorFlow.NET
│
├── 需要传统机器学习?
│ ├── 想要 AutoML? → ML.NET
│ ├── 需要图像分类(迁移学习)? → ML.NET
│ └── 通用 ML 任务? → ML.NET
│
└── 维护旧项目?
└── Accord.NET → 考虑迁移到 ML.NET
```
---
## 十、快速入门指南
### 10.1 ML.NET 快速开始
```bash
# 安装 NuGet 包
dotnet add package Microsoft.ML
# 可选:AutoML
dotnet add package Microsoft.ML.AutoML
```
```csharp
// 最小示例
var mlContext = new MLContext();
var data = mlContext.Data.LoadFromEnumerable(yourData);
var pipeline = mlContext.Regression.Trainers.Sdca(labelColumnName: "Label");
var model = pipeline.Fit(data);
```
### 10.2 TorchSharp 快速开始
```bash
# CPU 版本
dotnet add package TorchSharp
# GPU 版本 (Windows)
dotnet add package TorchSharp-cuda-windows
# 计算机视觉
dotnet add package TorchVision
```
```csharp
using TorchSharp;
using static TorchSharp.torch.nn;
var model = Sequential(
Linear(784, 128),
ReLU(),
Linear(128, 10)
);
var optimizer = optim.Adam(model.parameters(), lr: 0.001f);
```
### 10.3 TensorFlow.NET 快速开始
```bash
dotnet add package TensorFlow.NET
dotnet add package TensorFlow.Keras
dotnet add package SciSharp.TensorFlow.Redist
```
```csharp
using static Tensorflow.KerasApi;
var model = keras.Sequential();
model.add(keras.layers.Dense(10, activation: "softmax"));
model.compile(optimizer: "adam", loss: "sparse_categorical_crossentropy");
```
### 10.4 BotSharp 快速开始
```bash
git clone https://github.com/SciSharp/BotSharp
cd BotSharp
dotnet run --project ./src/WebStarter/WebStarter.csproj
```
访问 `http://localhost:5500` 进入管理界面。
---
## 十一、生态与社区
### 11.1 NuGet 下载量(近似)
| 包名 | 下载量 |
|------|--------|
| Microsoft.ML | 500万+ |
| Microsoft.ML.AutoML | 200万+ |
| TensorFlow.NET | 100万+ |
| TorchSharp | 50万+ |
| BotSharp | 10万+ |
### 11.2 SciSharp 生态系统
SciSharp 组织维护了多个重要的 .NET ML/DL 项目:
- TensorFlow.NET
- NumSharp(NumPy 移植)
- Pandas.NET(Pandas 移植)
- BotSharp
- Keras.NET
### 11.3 社区活跃度
| 项目 | 提交频率 | Issue 响应 | 文档质量 |
|------|----------|-----------|----------|
| ML.NET | 高 | 快 | 优秀 |
| TorchSharp | 中 | 中 | 良好 |
| TensorFlow.NET | 低 | 慢 | 良好 |
| BotSharp | 高 | 快 | 良好 |
| Infer.NET | 中 | 中 | 优秀 |
---
## 十二、总结与建议
### 新项目选型建议
| 场景 | 首选 | 备选 |
|------|------|------|
| 企业级传统 ML | **ML.NET** | - |
| 深度学习研究 | **TorchSharp** | TensorFlow.NET |
| 图像/视频处理 | **TorchSharp + TorchVision** | ML.NET (迁移学习) |
| NLP 任务 | **ML.NET (TextClassification)** | TorchSharp |
| AI Agent / Chatbot | **BotSharp** | - |
| 概率建模 | **Infer.NET** | - |
| 快速原型 | **ML.NET AutoML** | - |
### 迁移建议
| 从 | 到 | 难度 |
|----|----|----|
| Accord.NET | ML.NET | 中 |
| TensorFlowSharp | TensorFlow.NET | 低 |
| Python TensorFlow | TensorFlow.NET | 低 |
| Python PyTorch | TorchSharp | 中 |
### 未来展望
1. **ML.NET** 将继续作为微软官方框架,获得持续投入
2. **TorchSharp** 随着 .NET 9 的发布,性能和兼容性将进一步提升
3. **BotSharp** 在 AI Agent 热潮下,将成为 .NET 生态中的重要力量
4. **TensorFlow.NET** 需要新的维护者加入,未来发展存在不确定性
---
## 参考资料
- [ML.NET 官方文档](https://docs.microsoft.com/dotnet/machine-learning/)
- [TensorFlow.NET GitHub](https://github.com/SciSharp/TensorFlow.NET)
- [TorchSharp GitHub](https://github.com/dotnet/TorchSharp)
- [BotSharp GitHub](https://github.com/SciSharp/BotSharp)
- [Infer.NET 文档](https://dotnet.github.io/infer/)
- [Accord.NET 归档说明](https://github.com/accord-net/framework)
---
> 本文基于 GitHub 2025 年数据编写,框架版本可能已有更新。建议在实际选型前查阅各项目的最新文档和 Release Notes。
登录后可参与表态
讨论回复
0 条回复还没有人回复,快来发表你的看法吧!