发布在即!企业 AIGC 应用程度测评,3 步定制专属评估报告。抢首批测评权益>>> 了解详情
写点什么

使用 TensorFlow.NET 构建神经网络

作者:Robert Krzaczyński

  • 2022-08-05
  • 本文字数:3684 字

    阅读完需:约 12 分钟

使用TensorFlow.NET构建神经网络

构建和创建神经网络主要是和 Python、R、Matlab 等联系在一起。不过,在过去几年中,我们多了一些选择。其中就包括.NET 技术。当然,你可以使用所有可能的语言从头开始创建神经网络,但这超出了本文的范围,我们关注可以提供更多选择的库,接下来本文将重点介绍其中之一:TensorFlow.NET 的库。

神经网络

先解释下神经网络的基本概念。这里围绕前馈神经网络(FNN)展开,这是神经网络的基本类型之一。这种类型的神经网络也称为多层感知机(MLP)。


前馈神经网络的目标是对某个函数 f*做近似计算。神经网络使用了分类器,它会将输入数据映射到一个特定的类别。


例如,分类器 y = f*(x)将输入 x 映射到类别 y。MLP 准确计算出映射 y=f(x;α) 并习得参数值α——这些参数值提供了函数的最佳近似。


注意看下面的图。它展示了一个 MLP 感知机。其中包含一个输入层、至少一个隐藏层和一个输出层。


这称为前馈网络,因为信息总是向一个方向传递,永远不会向回传递。值得一提的是,如果一个神经网络有两个或多个隐藏层,我们就将之称为深度神经网络(DNN)。

神经网络的主要应用

人工神经网络是深度学习的基础组成部分。它们是基于人工神经元概念的生物神经网络的数学模型。在人工神经网络中,一个人工神经元被视为一个计算单元,基于一个特定的激活函数,根据加权输入数据在输出端计算生成一个特定的值。与其他机器学习算法相比,它们更综合,更可扩展,非常适合复杂的大型机器学习任务。由于具有独特的特性和优势,神经网络的应用领域非常广泛。


我们可以将神经网络用于任何需要定性(而非定量)答案的地方。定量数据和可以计数或测量的信息有关,可以给出数字值。相反,定量答案本质上是描述性的,通过语言而不是数字值来表示。因此,神经网络的应用场景包括:


  • 价格预测

  • 生物实验解释

  • 产品问题分析

  • 医学研究

  • 电子电路诊断


销售预测为了加深理解,下面介绍一个真实世界的例子。某公司在中欧和东欧市场的 20 个国家开展业务,分销液压和温度控制系统部件。有个问题是要确定每个分销点的可用库存量。多年来,行政管理人员通过某类产品的需求和供应量报告来收集详细数据。这些数据显示,有时候库存太高,有时候又供应不足。他们决定使用人工神经网络来解决这个问题。


为了创建神经网络的输入,他们使用了记录仓库近 5 年来繁荣状况的报告。办公室工作人员整理出了 206 个案例,其中 60%用作学习集,20%用作验证集,剩余的 20%作为测试集。每个案例都包含特定的特征,如坐落于特定区域或地理位置(即它们是在城区还是在郊区)的仓库的天气条件。


他们创建的算法还不足以用于库存管理,因为结果不够有说服力(有效性低于 65%),但这个结果已经比基于基本计算的“传统方法”好了 3 倍,更接近事实了。我们可以得出结论,为了获得更可靠的解决方案,算法创建者会继续尝试,创建一个考虑了更多因素的系统。


人工神经网络被应用于科学、经济和工业的各个领域。越来越多的企业家和科学家认识到了它们的有效性,在商业系统中创建和实现它们的技术也在增加。我之前提到的许多库都实现了这些技术。我接下来将要介绍的 TensorFlow.NET 就是其中之一。

TensorFlow.NET

TensorFlow.NET这个库为TensorFlow提供了.NET Standard 绑定。它让.NET 开发人员可以设计、训练和实现机器学习算法,包括神经网络。此外,Tensorflow.NET 让我们可以利用 TensorFlow 提供的各种机器学习模型和编程资源。

TensorFlow

TensorFlow 是一个由谷歌科学家和工程师开发用来进行数值计算的开源框架。它提供了一系列用于神经网络设计、训练和优化的工具。TensorFlow 架构灵活,可以将计算调度到个人计算机、服务器上的一个或多个处理器(CPU)或显卡上,而且不用重写代码。

Keras

Keras是另一个可以用于创建神经网络的开源库。它后台使用 TensorFlow 或Theano执行操作。Keras 旨在简化这两个框架的使用,算法执行和结果返回都是由这两个框架完成的。在接下来的例子中,我们将使用 Keras。

TensorFlow.NET 使用示例

在这个例子中,我们将创建 FNN,并且会用到一些与神经网络相关的术语,如层、损失函数等。我建议你读下 Matthew Stewart 写的这篇文章,了解下这些术语。


首先需要创建一个控制台应用程序项目 (1) ,并用 NuGet 包管理器下载所需的库 (2)。

(1)


(2)

至此,可以开始实现和创建模型了。第一步是为神经网络创建一个对应的类。它的字段应该包括模型、学习集和测试集。Model 类来自 TensorFlow.Keras.Engine,NDArray 是 NumSharp 的一部分。NumSharp 相当于 Python 世界的 NumPy 库。


using NumSharp;using Tensorflow.Keras.Engine;using Tensorflow.Keras.Layers;using static Tensorflow.KerasApi;
namespace NeuralNetworkExample{
public class Fnn { Model model; NDArray x_train, y_train, x_test, y_test; ..... }}
复制代码


第二步是生成测试集和训练集,我们将在 Keras 中使用 MNIST 数据集。MNIST 是一个大型的数字数据库,用于训练各种图像处理算法。数据集从 Keras 库加载。训练图片的大小为 2828 像素,总共 60000 张。我们需要将图片改造成 1 行 784(2828)个像素,并将像素值的范围从 0-255 缩小为 0-1,因为我们需要将神经网络的输入规格化。测试图片也基本一样,只不过测试图片是 10000 张。


public class Fnn{    ....
public void PrepareData() { (x_train, y_train, x_test, y_test) = keras.datasets.mnist.load_data(); x_train = x_train.reshape(60000, 784) / 255f; x_test = x_test.reshape(10000, 784) / 255f; }}
复制代码


现在,我们可以聚焦负责构建模型和配置神经网络选项的代码了。其中包括定义层及其激活函数、优化器、损失函数和评价指标。神经网络的一般概念并不难理解,下文会简单说明。以下是我们实现的神经网络。


 public class Fnn  {    ....        public void BuildModel()    {        var inputs = keras.Input(shape: 784);
var layers = new LayersApi();
var outputs = layers.Dense(64, activation: keras.activations.Relu).Apply(inputs);
outputs = layers.Dense(10).Apply(outputs);
model = keras.Model(inputs, outputs, name: "mnist_model"); model.summary();
model.compile(loss: keras.losses.SparseCategoricalCrossentropy(from_logits: true), optimizer: keras.optimizers.Adam(), metrics: new[] { "accuracy" }); }}
复制代码


在这个例子中,我们将 shape 设置为 784(因为一行有 784 个像素),输入层的输出空间维数为 64,一个输出层有 10 个单元(这里可以设置不同的层数,可以通过试验根据误差做出选择)。激活函数使用了ReLU,优化器使用了Adam的算法。一般来说,那就是专门设计用来训练深度神经网络的。此外,我们将使用准确率作为检验学习质量的指标。我觉得,现在是时候解释下准确率和损失函数的含义了。神经网络里的损失函数定义了预期结果和机器学习模型所产生的结果之间的差异。我们可以从损失函数得出梯度,用于更新权重。所有损失的均值代表成本。


准确率是正确预测数和总测试实例数的比值,用于确定有多少实例分类正确。我们应尽可能地提高准确率得分。在这个例子里,准确率超过 90%。一般而言,这样的结果相当不错了,但我们的分析也不复杂,还需要进行更多专门的研究。完成上述步骤后,现在可以开始训练和测试模型了:


public class Fnn{  ....
public void Train() { model.fit(x_train, y_train, batch_size: 10, epochs: 2); model.evaluate(x_test, y_test); }}
复制代码


设置批次大小(表示训练样本子集的大小),比如 8,并将 epochs 设置为 2。在这里,我们也是通过试验过程来选择这些值。然后,终于到了最后一步,创建 Fnn 类的一个实例并执行代码。


class Program{    static void Main(string[] args)    {        Fnn fnn = new Fnn();        fnn.PrepareData();        fnn.BuildModel();        fnn.Train();    }}
复制代码


启动应用程序训练阶段开始。在控制台中,应该可以看到类似下面这样的输出:

一段时间后(时长取决于数据集大小),进入测试阶段:


如你所见,每个迭代都会返回一个损失函数和准确率。上述参数的计算结果表明,本文所建立的神经网络具有良好的效果。

小结

本文重点介绍了如何设计一个神经网络。当然,如果只是为了在 TensorFlow.NET 中使用基于神经网络的算法,那么你可以不知道背后的理论。尽管如此,熟悉这些基本知识有助于更好地理解问题和得到的结果。直到几年之前,机器学习也还只是和像 Python 或 R 这样的编程语言有关。感谢像 TensorFlow.NET 这样的库,C#也开始在机器学习中发挥重要作用了。我希望事情会继续朝着这个方向发展。


作者简介


Robert Krzaczyński 是一名专注于微软技术的软件工程师。在日常工作中,他主要基于.NET 开发软件,但他的兴趣要广泛得多。此外,他还对机器学习和人工智能有深入的研究。在业余时间,Robert 还通过博客分享知识(bush-dev.com)。他拥有控制工程和机器人专业学士学位和计算机科学工程硕士学位。


原文链接:


Building Neural Networks With TensorFlow.NET

公众号推荐:

2024 年 1 月,InfoQ 研究中心重磅发布《大语言模型综合能力测评报告 2024》,揭示了 10 个大模型在语义理解、文学创作、知识问答等领域的卓越表现。ChatGPT-4、文心一言等领先模型在编程、逻辑推理等方面展现出惊人的进步,预示着大模型将在 2024 年迎来更广泛的应用和创新。关注公众号「AI 前线」,回复「大模型报告」免费获取电子版研究报告。

AI 前线公众号
2022-08-05 09:412604

评论

发布
暂无评论
发现更多内容

DxO PhotoLab 6 for Mac(raw图片处理软件) 6.12.0.62中文破解版

mac

苹果mac Windows软件 DxO PhotoLab 6 图片处理软件

让数据成为生产力,用友时序数据库为智能制造按下“瞬时加速键”

用友BIP

【最佳实践】京东小程序-LBS业务场景的性能提升 | 京东云技术团队

京东科技开发者

小程序 性能优化 前端 LBS

怀念一代传奇,陈皓与他的《左耳听风:传奇程序员练级攻略》

博文视点Broadview

DxO PhotoLab 7 for Mac v7.2.0.42激活版

影影绰绰一往直前

AI数字人线下互动大屏,提升智能交互服务体验!

青否数字人

一文让你简单了解软堡垒机和云堡垒机的主要区别

行云管家

云计算 网络安全 堡垒机 上云

DxO FilmPack 7 for Mac:摄影师的创意伙伴

影影绰绰一往直前

Native Instruments Komplete Kontrol for mac激活版

影影绰绰一往直前

淘宝商品评论数据接口(Taobao.item_review)

tbapi

淘宝API接口 淘宝商品评论接口 天猫商品评论接口 淘宝评论内容接口 天猫评论内容接口

IPQ8072A and IPQ8074A processors: performance comparison and innovation diff

wallysSK

硬件 嵌入式 IPQ8074A wifi solution IPQ8072A

ON1 Photo RAW MAX 2024 for Mac中文激活版

影影绰绰一往直前

名企私教服务加盟全栈开发与自动化测试班,成就你的技术梦想

霍格沃兹测试开发学社

Find Any File for Mac v2.4.2b2免激活版

影影绰绰一往直前

什么是 DDoS ?如何识别DDoS?怎么应对DDOS攻击

德迅云安全杨德俊

数字人SaaS系统无限生成AI数字人!

青否数字人

数字人

为什么AI数字人直播被判定为录播?

青否数字人

数字人

湖南省岳阳市君山公安分局与合合信息旗下启信宝达成战略合作

合合技术团队

大数据 科技 合合信息 警务技术 启信宝

5家券商综合评级上升,11月券商App终端业务体验评测报告发布

博睿数据

实践解析HPA各关联组件扭转关系

华为云开发者联盟

云原生 后端 华为云 华为云开发者联盟

Different WiFi cards -QCN9274 and QCN6274- Different performance

wifi6-yiyi

network wifi wireless WiFi card

手把手教你使用ArkTS中的canvas实现签名板功能

HarmonyOS开发者

HarmonyOS

玩转Spring状态机 | 京东云技术团队

京东科技开发者

spring 设计模式 状态机 状态模式 spring状态机

从西工大安全事件浅谈特权账号管理系统

尚思卓越

数据库 网络安全

ON1 Photo RAW 2024 for Mac中文直装版下载

影影绰绰一往直前

专业raw图像处理 DxO PhotoLab 7激活版中文最新

胖墩儿不胖y

Mac软件 图像处理工具 raw图像处理

Instagram下载软件 4K Stogram 免激活最新版

mac大玩家j

Mac软件推荐 下载工具

2023 年中国金融级分布式数据库市场报告:TiDB 位列领导者梯队,创新能力与增长指数表现突出

编程猫

Databend 源码阅读: Meta-service 数据结构

Databend

基础知识回顾:安装 NGINX 开源版和 NGINX Plus

NGINX开源社区

web服务器 keepalive nginx 开源版 NGINX PLUS NGINX repo

如何使用 Helm 在 K8s 上集成 Prometheus 和 Grafana|Part 1

SEAL安全

Helm kubernetes 运维 企业号12月PK榜

使用TensorFlow.NET构建神经网络_大数据_InfoQ精选文章