基于C#的机器学习--c# .NET中直观的深度学习

在本章中,将会学到:

l  如何使用Kelp.Net来执行自己的测试

l  如何编写测试

l  如何对函数进行基准测试

Kelp.Net是一个用c#编写的深度学习库。由于能够将函数链到函数堆栈中,它在一个非常灵活和直观的平台中提供了惊人的功能。它还充分利用OpenCL语言平台,在支持cpu和gpu的设备上实现无缝操作。深度学习是一个非常强大的工具,对Caffe和Chainer模型加载的本机支持使这个平台更加强大。您将看到,只需几行代码就可以创建一个100万个隐藏层的深度学习网络。

Kelp.Net还使得从磁盘存储中保存和加载模型变得非常容易。这是一个非常强大的特性,允许您执行训练、保存模型,然后根据需要加载和测试。它还使代码的产品化变得更加容易,并且真正地将训练和测试阶段分离开来。

其中,Kelp.Net是一个非常强大的工具,可以帮助你更好地学习和理解各种类型的函数、它们的交互和性能。例如,你可以使用不同的优化器在相同的网络上运行测试,并通过更改一行代码来查看结果。此外,可以轻松地设计你的测试,以查看使用不同批处理大小、隐藏层数、纪元、和更多内容。

什么是深度学习?

深度学习是机器学习和人工智能的一个分支,它使用许多层次的神经网络层(如果你愿意,可以称之为层次结构)来完成它的工作。在很多情况下,这些网络的建立是为了反映我们对人类大脑的认知,神经元像错综复杂的网状结构一样将不同的层连接在一起。这允许以非线性的方式进行数据处理。每一层都处理来自上一层的数据(当然,第一层除外),并将其信息传递到下一层。幸运的话,每一层都改进了模型,最终,我们实现了目标并解决了问题。

OpenCL

Kelp.Net 大量使用了开源计算语言(OpenCL).

OpenCL认为计算系统是由许多计算设备组成的,这些计算设备可以是中央处理器(CPU),也可以是附加在主机处理器(CPU)上的图形处理单元(GPU)等加速器。在OpenCL设备上执行的函数称为内核。单个计算设备通常由几个计算单元组成,这些计算单元又由多个处理元素(PS)组成。一个内核执行可以在所有或多个PEs上并行运行。

在OpenCL中,任务是在命令队列中调度的。每个设备至少有一个命令队列。OpenCL运行时将调度数据的并行任务分成几部分,并将这些任务发送给设备处理元素。

OpenCL定义了一个内存层次结构:

       Global:由所有处理元素共享,并且具有高延迟。

Read-only:更小,更低的延迟,可由主机CPU写入,但不包括计算设备。

Local:由流程元素组共享。

Per-elemen:私有内存。

OpenCL还提供了一个更接近数学的API。这可以在固定长度向量类型的公开中看到,比如float4(单精度浮点数的四个向量),它的长度为2、3、4、8和16。如果你接触了更多的Kelp.Net并开始创建自己的函数,你将会遇到OpenCL编程。现在,只要知道它的存在就足够了,而且它正在被广泛地使用。

     OpenCL 层次结构

       在Kelp.Net各种OpenCL资源的层次结构如下图所示: 让我们更详细地描述这些。

       Compute kernel

            内核对象封装在程序中声明的特定内核函数,以及执行此内核函数时使用的参数值。

       Compute program

由一组内核组成的OpenCL程序。程序还可以包含内核函数和常量数据调用的辅助函数。

       Compute sampler

描述如何在内核中读取图像时对图像进行采样的对象。图像读取函数以采样器作为参数。采样器指定图像寻址模式(表示如何处理范围外的坐标)、过滤模式以及输入图像坐标是规范化还是非规范化值。

    Compute device

计算设备是计算单元的集合。命令队列用于将命令排队到设备。命令示例包括执行内核或读写内存对象。OpenCL设备通常对应于GPU、多核CPU和其他处理器,如数字信号处理器(DSP)和cell/B.E.处理器。

    Compute resource

可以由应用程序创建和删除的OpenCL资源。

Compute object

    在OpenCL环境中由句柄标识的对象。

Compute context

计算上下文是内核执行的实际环境和定义同步和内存管理的域。

Compute command queue

命令队列是一个对象,它包含将在特定设备上执行的命令。命令队列是在上下文中的特定设备上创建的。对队列的命令按顺序排队,但可以按顺序执行,也可以不按顺序执行。

Compute buffer

存储线性字节集合的内存对象。可以使用在设备上执行的内核中的指针来访问缓冲区对象。

Compute event

    事件封装了操作(如命令)的状态。它可用于同步上下文中的操作。

Compute image

存储2D或3D结构数组的内存对象。图像数据只能通过读写函数访问。读取函数使用采样器。

Compute platform

主机加上OpenCL框架管理的设备集合,允许应用程序共享资源并在平台上的设备上执行内核。

Compute user event

    这表示用户创建的事件。

Kelp.Net Framework

函数

       函数是Kelp.Net神经网络的基本组成部分。单个函数在函数堆栈中链接在一起,以创建功能强大且可能复杂的网络链。

我们需要了解四种主要的函数类型:

Single-input functions 单输入函数
Dual-input functions 双输入函数
Multi-input functions 多输入函数
Multi-output functions 多输出函数

       当从磁盘加载网络时,函数也被链接在一起。

       每个函数都有一个向前和向后的方法。           

  public abstract NdArray[] Forward(params NdArray[] xs);

  public virtual void Backward([CanBeNull] params NdArray[] ys){}    

     函数栈

       函数堆栈是在向前、向后或更新传递中同时执行的函数层。当我们创建一个测试或从磁盘加载一个模型时,将创建函数堆栈。下面是一些函数堆栈的例子。

       它们可以小而简单:             

 FunctionStack nn = new FunctionStack(

              
  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

山信大大懒虫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值