NeuralNetwork.NET
NeuralNetwork.NET 是一款专为 .NET 生态打造的神经网络库,它完全使用 C# 7.3 从零构建,旨在让开发者能够在熟悉的 .NET Standard 2.0 环境中轻松设计和训练深度学习模型。该工具主要解决了 C# 开发者在不依赖 Python 或其他外部框架的情况下,快速原型化神经网络算法的需求,提供了从序列模型到计算图模式的灵活支持。
它特别适合 .NET 平台的软件开发人员、学生以及希望深入理解神经网络底层原理的研究者使用。通过简洁易用的 API 接口,用户可以快速定义卷积、池化、全连接等层结构,并利用随机梯度下降法进行模型训练。此外,NeuralNetwork.NET 还具备独特的技术亮点:它原生支持通过 cuDNN toolkit 调用 GPU 加速,显著提升了大规模数据训练和推理的性能;同时内置了数据集加载、模型序列化与反序列化等实用功能,进一步简化了开发流程。
需要注意的是,该项目目前处于非活跃维护状态,更适合作为学习参考或轻量级实验使用。对于需要投入生产环境的项目,官方建议考虑 ML.NET 或 TensorFlow.NET 等更成熟的替代方案。总体而言,NeuralNetwork.NET 是 C# 开发者探索深度学习领域的一块优质“敲门砖”。
使用场景
某 .NET 开发团队需要在现有的 C# 工业质检系统中集成深度学习模块,以实时识别生产线上的产品缺陷。
没有 NeuralNetwork.NET 时
- 技术栈割裂:团队必须跨越语言边界,通过 Python 调用 TensorFlow 或 PyTorch,导致部署架构复杂,需额外维护 Python 运行环境。
- 原型验证缓慢:缺乏原生的 C# 神经网络 API,开发人员需手动实现复杂的反向传播算法或编写冗长的互操作代码,严重拖慢实验迭代速度。
- 硬件加速困难:难以直接利用 GPU 资源进行模型训练,仅靠 CPU 计算导致处理高分辨率工业图像时耗时过长,无法满足实时性要求。
- 系统集成风险高:异构系统间的数据序列化与通信容易出错,增加了生产环境的不稳定性与维护成本。
使用 NeuralNetwork.NET 后
- 原生无缝集成:直接在 C# 7.3 项目中引用库,无需切换语言或环境,利用熟悉的语法快速构建包含卷积层和池化层的序列网络。
- 高效快速原型:借助简洁的 API(如
NetworkLayers.Convolutional),几分钟内即可定义并训练定制化模型,大幅缩短从想法到验证的周期。 - GPU 性能飞跃:通过内置的 cuDNN 支持,一键开启 GPU 加速,将大规模图像数据的训练与推理速度提升数倍,轻松应对实时检测需求。
- 部署简化可控:模型可直接序列化保存并在纯 .NET 环境中加载,消除了外部依赖,显著降低了系统集成的复杂度与运维风险。
NeuralNetwork.NET 让 .NET 开发者能在不离开舒适区的前提下,原生享受高性能深度学习带来的效率革命。
运行环境要求
- Windows
- Linux
- macOS (通过 Mono/Xamarin)
- 可选
- 如需 GPU 加速,必须使用支持 CUDA 的 NVIDIA GeForce 或 Quadro 显卡,并安装 CUDA Toolkit 和 cuDNN Toolkit
- 具体显存大小和 CUDA 版本未在文档中明确说明,但需配合 Alea NuGet 包使用
未说明

快速开始
它是什么?
NeuralNetwork.NET 是一个基于 .NET Standard 2.0 的库,使用 C# 从头开始构建,实现了可自定义层的顺序神经网络和计算图神经网络。它提供了简单易用的 API,专为快速原型设计而设,可用于定义和训练采用随机梯度下降法的模型,同时还支持保存和加载网络模型及其元数据等功能。此外,该库还提供了 CUDA 加速的层,利用 GPU 和 cuDNN 工具包实现更高级的功能,在训练或使用神经网络时显著提升性能。
免责声明: 本库按“原样”提供,目前已不再积极维护。NeuralNetwork.NET 是在大学课程期间开发的,并非旨在替代其他知名机器学习框架。如果您正在寻找用于生产环境的 .NET 机器学习库,建议尝试 ML.NET 或者 TensorFlow.NET。
目录
通过 NuGet 安装
要安装 NeuralNetwork.NET,请在 包管理器控制台 中运行以下命令:
Install-Package NeuralNetwork.NET
更多详情请参见 这里。
快速入门
NeuralNetwork.NET 库提供了易于使用的类和方法,用于创建新的神经网络、准备数据集并训练网络。这些 API 专为快速原型设计而设计,本节将概述开始使用所需的步骤。
监督学习
第一步是创建自定义的网络结构。以下是一个顺序网络(即层的堆叠)示例:
INeuralNetwork network = NetworkManager.NewSequential(TensorInfo.Image<Alpha8>(28, 28),
NetworkLayers.Convolutional((5, 5), 20, ActivationType.Identity),
NetworkLayers.Pooling(ActivationType.LeakyReLU),
NetworkLayers.Convolutional((3, 3), 40, ActivationType.Identity),
NetworkLayers.Pooling(ActivationType.LeakyReLU),
NetworkLayers.FullyConnected(125, ActivationType.LeakyReLU),
NetworkLayers.FullyConnected(64, ActivationType.LeakyReLU),
NetworkLayers.Softmax(10));
下一步是通过 DatasetLoader 类中的 API 准备要使用的数据集:
// 一个批次大小为 100 的训练数据集
IEnumerable<(float[] x, float[] u)> data = ... // 您自己的数据集解析程序
ITrainingDataset dataset = DatasetLoader.Training(data, 100);
// 一个可选的测试数据集,并附带进度监控回调
ITestDataset test = DatasetLoader.Test(..., p =>
{
Console.WriteLine($"第 {p.Iteration} 轮,损失:{p.Cost}, 准确率:{p.Accuracy}"); // 进度报告
});
训练神经网络非常简单——只需使用 NetworkManager 类中的方法即可:
// 使用 Adadelta 算法和 0.5 的丢弃概率训练网络
TrainingSessionResult result = NetworkManager.TrainNetwork(
network, // 要训练的网络实例
dataset, // ITrainingDataset 实例
TrainingAlgorithms.AdaDelta(), // 要使用的训练算法
60, // 预期的训练轮数
0.5f, // 丢弃概率
p => ..., // 可选的每轮训练进度回调
null, // 可选的监控训练数据集准确率的回调
null, // 可选的验证数据集
test, // 测试数据集
token); // 用于取消训练的取消令牌
注意: NetworkManager 中的方法也提供异步版本。
GPU 加速
在支持的框架(.NET Framework、Xamarin 或 Mono)上运行时,可以使用不同的层实现,该实现利用 cuDNN 工具包,并将大部分工作并行化到可用的 CUDA 启用 GPU 上。为此,在创建网络时只需使用 CuDnnNetworkLayers 类中的层即可。
部分由 cuDNN 提供支持的层比默认层支持更多选项。以下是一个示例:
// 一个 cuDNN 卷积层,具有自定义模式、填充和步幅
LayerFactory convolutional = CuDnnNetworkLayers.Convolutional(
ConvolutionInfo.New(ConvolutionMode.CrossCorrelation, 3, 3, 2, 2),
(7, 7), 20, ActivationType.ReLU);
// 一个 Inception 模块,源自 GoogLeNet 网络的设计
LayerFactory inception = CuDnnNetworkLayers.Inception(InceptionInfo.New(
10, // 1x1 卷积核
20, 10, // 1x1 + 3x3 卷积流水线核
20, 10, // 1x1 + 5x5 卷积流水线核
PoolingMode.AverageExcludingPadding, 10)); // 池化模式和 1x1 卷积核
这些 LayerFactory 实例可以像 CPU 示例中一样用于创建新网络。
注意: 要使用此功能,必须在当前系统上安装 CUDA 和 cuDNN 工具包,并且需要有一块支持 CUDA 的 nVidia GeForce/Quadro GPU,同时还需要在使用 NeuralNetwork.NET 库的应用程序中安装 Alea NuGet 包。更多信息请参见 这里。
计算图
一些复杂的网络结构,例如残差网络或 Inception 模块,无法用简单的顺序网络结构来表示:这时计算图网络就派上用场了。与通过线性堆叠的层传递输入不同,计算图具有特定的空间结构,允许不同的节点相互连接。例如,可以在图中设置多个并行的管道,稍后将其合并;或者设置辅助分类器,在训练阶段参与梯度反向传播。
计算图网络可以通过 NetworkManager.NewGraph API 创建,以下是一个示例:
INeuralNetwork network = NetworkManager.NewGraph(TensorInfo.Image<Rgb24>(32,32), root =>
{
var conv1 = root.Layer(CuDnnNetworkLayers.Convolutional((5, 5), 20, ActivationType.Identity));
var pool1 = conv1.Layer(CuDnnNetworkLayers.Pooling(ActivationType.ReLU));
var conv2 = pool1.Pipeline(
CuDnnNetworkLayers.Convolutional((1, 1), 20, ActivationType.ReLU),
CuDnnNetworkLayers.Convolutional(ConvolutionInfo.Same(), (5, 5), 40, ActivationType.ReLU),
CuDnnNetworkLayers.Convolutional((1, 1), 20, ActivationType.ReLU));
var sum = conv2 + pool1;
var fc1 = sum.Layer(CuDnnNetworkLayers.FullyConnected(250, ActivationType.LeCunTanh));
var fc2 = fc1.Layer(CuDnnNetworkLayers.FullyConnected(125, ActivationType.LeCunTanh));
_ = fc2.Layer(CuDnnNetworkLayers.Softmax(10));
});
库设置
NeuralNetwork.NET 提供了多种共享设置,可通过 NetworkSettings 类访问。
该类充当容器,可随时快速检查和修改任何设置,这些设置将影响任何现有 INeuralNetwork 实例以及整个库的行为。
例如,可以自定义网络在训练过程中用于评估性能的标准:
NetworkSettings.AccuracyTester = AccuracyTesters.Argmax(); // 默认模式(互斥类别)
// 还有其他测试器可供选择
NetworkSettings.AccuracyTester = AccuracyTesters.Threshold(); // 适用于重叠类别
NetworkSettings.AccuracyTester = AccuracyTesters.Distance(0.2f); // 结果与预期输出之间的距离
当使用 CUDA 支持的网络时,有时所使用的 GPU 可能无法一次性处理完整的测试或验证数据集,而这是默认行为(这些数据集不会被分成批次)。 为避免内存问题,可以修改此行为:
NetworkSettings.MaximumBatchSize = 400; // 这将应用于任何测试或验证数据集
序列化与反序列化
INeuralNetwork 接口公开了一个 Save 方法,可用于在任何时候序列化任何网络。
要从已保存的文件或流中获取新的网络实例,只需使用 NetworkLoader.TryLoad 方法即可。
由于不同类型的层在可用的不同库中可能有不同的实现,因此在加载已保存的网络时,可以指定要使用的层提供者。例如,以下是如何在可能的情况下使用 cuDNN 层加载网络的示例:
FileInfo file = new FileInfo(@"C:\...\MySavedNetwork.nnet");
INeuralNetwork network = NetworkLoader.TryLoad(file, ExecutionModePreference.Cuda);
注意: ExecutionModePreference 选项指示在可能的情况下希望反序列化的层类型。例如,使用 ExecutionModePreference.Cpu 时,如果支持,加载的网络将仅包含 CPU 驱动的层。
此外,还有一个 SaveMetadataAsJson 方法,用于导出 INeuralNetwork 实例的元数据。
内置数据集
NeuralNetworkNET.Datasets 命名空间包含静态类,可快速加载常用数据集,并获得可与新神经网络一起使用的 IDataset 实例。例如,以下是如何获取 MNIST 数据集的方法:
ITrainingDataset trainingData = await Mnist.GetTrainingDatasetAsync(400); // 每批 400 个样本
ITestDataset testData = await Mnist.GetTestDatasetAsync(p => ... /* 可选回调 */);
该命名空间中的每个 API 还支持可选的 CancellationToken,以停止数据集的加载,因为源数据是从互联网下载的,根据所使用的数据集,可能需要一些时间才能可用。
要求
NeuralNetwork.NET 库需要 .NET Standard 2.0 支持,因此适用于以下目标平台的应用程序:
- .NET Framework >= 4.6.1
- .NET Core >= 2.0
- UWP(从 SDK 10.0.16299 开始)
- Mono >= 5.4
- Xamarin.iOS 10.14、Xamarin.Mac 3.8、Xamarin.Android 8.0
除了上述框架外,您还需要一个支持 C# 7.3 的 IDE 来在您的 PC 上编译该库。
版本历史
v2.1.32020/05/01v2.1.22018/10/22v2.1.0.02018/02/02v2.0.0.02018/01/26v1.5.1.02018/01/13v1.4.0.02018/01/09v1.3.0.02018/01/07v1.0.0.02017/12/31常见问题
相似工具推荐
openclaw
OpenClaw 是一款专为个人打造的本地化 AI 助手,旨在让你在自己的设备上拥有完全可控的智能伙伴。它打破了传统 AI 助手局限于特定网页或应用的束缚,能够直接接入你日常使用的各类通讯渠道,包括微信、WhatsApp、Telegram、Discord、iMessage 等数十种平台。无论你在哪个聊天软件中发送消息,OpenClaw 都能即时响应,甚至支持在 macOS、iOS 和 Android 设备上进行语音交互,并提供实时的画布渲染功能供你操控。 这款工具主要解决了用户对数据隐私、响应速度以及“始终在线”体验的需求。通过将 AI 部署在本地,用户无需依赖云端服务即可享受快速、私密的智能辅助,真正实现了“你的数据,你做主”。其独特的技术亮点在于强大的网关架构,将控制平面与核心助手分离,确保跨平台通信的流畅性与扩展性。 OpenClaw 非常适合希望构建个性化工作流的技术爱好者、开发者,以及注重隐私保护且不愿被单一生态绑定的普通用户。只要具备基础的终端操作能力(支持 macOS、Linux 及 Windows WSL2),即可通过简单的命令行引导完成部署。如果你渴望拥有一个懂你
stable-diffusion-webui
stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面,旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点,将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。 无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师,还是想要深入探索模型潜力的开发者与研究人员,都能从中获益。其核心亮点在于极高的功能丰富度:不仅支持文生图、图生图、局部重绘(Inpainting)和外绘(Outpainting)等基础模式,还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外,它内置了 GFPGAN 和 CodeFormer 等人脸修复工具,支持多种神经网络放大算法,并允许用户通过插件系统无限扩展能力。即使是显存有限的设备,stable-diffusion-webui 也提供了相应的优化选项,让高质量的 AI 艺术创作变得触手可及。
everything-claude-code
everything-claude-code 是一套专为 AI 编程助手(如 Claude Code、Codex、Cursor 等)打造的高性能优化系统。它不仅仅是一组配置文件,而是一个经过长期实战打磨的完整框架,旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。 通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能,everything-claude-code 能显著提升 AI 在复杂任务中的表现,帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略,使得模型响应更快、成本更低,同时有效防御潜在的攻击向量。 这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库,还是需要 AI 协助进行安全审计与自动化测试,everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目,它融合了多语言支持与丰富的实战钩子(hooks),让 AI 真正成长为懂上
opencode
OpenCode 是一款开源的 AI 编程助手(Coding Agent),旨在像一位智能搭档一样融入您的开发流程。它不仅仅是一个代码补全插件,而是一个能够理解项目上下文、自主规划任务并执行复杂编码操作的智能体。无论是生成全新功能、重构现有代码,还是排查难以定位的 Bug,OpenCode 都能通过自然语言交互高效完成,显著减少开发者在重复性劳动和上下文切换上的时间消耗。 这款工具专为软件开发者、工程师及技术研究人员设计,特别适合希望利用大模型能力来提升编码效率、加速原型开发或处理遗留代码维护的专业人群。其核心亮点在于完全开源的架构,这意味着用户可以审查代码逻辑、自定义行为策略,甚至私有化部署以保障数据安全,彻底打破了传统闭源 AI 助手的“黑盒”限制。 在技术体验上,OpenCode 提供了灵活的终端界面(Terminal UI)和正在测试中的桌面应用程序,支持 macOS、Windows 及 Linux 全平台。它兼容多种包管理工具,安装便捷,并能无缝集成到现有的开发环境中。无论您是追求极致控制权的资深极客,还是渴望提升产出的独立开发者,OpenCode 都提供了一个透明、可信
ComfyUI
ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎,专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式,采用直观的节点式流程图界面,让用户通过连接不同的功能模块即可构建个性化的生成管线。 这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景,也能自由组合模型、调整参数并实时预览效果,轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性,不仅支持 Windows、macOS 和 Linux 全平台,还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构,并率先支持 SDXL、Flux、SD3 等前沿模型。 无论是希望深入探索算法潜力的研究人员和开发者,还是追求极致创作自由度的设计师与资深 AI 绘画爱好者,ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能,使其成为当前最灵活、生态最丰富的开源扩散模型工具之一,帮助用户将创意高效转化为现实。
gemini-cli
gemini-cli 是一款由谷歌推出的开源 AI 命令行工具,它将强大的 Gemini 大模型能力直接集成到用户的终端环境中。对于习惯在命令行工作的开发者而言,它提供了一条从输入提示词到获取模型响应的最短路径,无需切换窗口即可享受智能辅助。 这款工具主要解决了开发过程中频繁上下文切换的痛点,让用户能在熟悉的终端界面内直接完成代码理解、生成、调试以及自动化运维任务。无论是查询大型代码库、根据草图生成应用,还是执行复杂的 Git 操作,gemini-cli 都能通过自然语言指令高效处理。 它特别适合广大软件工程师、DevOps 人员及技术研究人员使用。其核心亮点包括支持高达 100 万 token 的超长上下文窗口,具备出色的逻辑推理能力;内置 Google 搜索、文件操作及 Shell 命令执行等实用工具;更独特的是,它支持 MCP(模型上下文协议),允许用户灵活扩展自定义集成,连接如图像生成等外部能力。此外,个人谷歌账号即可享受免费的额度支持,且项目基于 Apache 2.0 协议完全开源,是提升终端工作效率的理想助手。

