在本章中,将会学到:
l 如何使用Kelp.Net来执行自己的测试
l 如何编写测试
l 如何对函数进行基准测试
Kelp.Net是一个用c#编写的深度学习库。由于能够将函数链到函数堆栈中,它在一个非常灵活和直观的平台中提供了惊人的功能。它还充分利用OpenCL语言平台,在支持cpu和gpu的设备上实现无缝操作。深度学习是一个非常强大的工具,对Caffe和Chainer模型加载的本机支持使这个平台更加强大。您将看到,只需几行代码就可以创建一个100万个隐藏层的深度学习网络。
Kelp.Net还使得从磁盘存储中保存和加载模型变得非常容易。这是一个非常强大的特性,允许您执行训练、保存模型,然后根据需要加载和测试。它还使代码的产品化变得更加容易,并且真正地将训练和测试阶段分离开来。
其中,Kelp.Net是一个非常强大的工具,可以帮助你更好地学习和理解各种类型的函数、它们的交互和性能。例如,你可以使用不同的优化器在相同的网络上运行测试,并通过更改一行代码来查看结果。此外,可以轻松地设计你的测试,以查看使用不同批处理大小、隐藏层数、纪元、和更多内容。
什么是深度学习?深度学习是机器学习和人工智能的一个分支,它使用许多层次的神经网络层(如果你愿意,可以称之为层次结构)来完成它的工作。在很多情况下,这些网络的建立是为了反映我们对人类大脑的认知,神经元像错综复杂的网状结构一样将不同的层连接在一起。这允许以非线性的方式进行数据处理。每一层都处理来自上一层的数据(当然,第一层除外),并将其信息传递到下一层。幸运的话,每一层都改进了模型,最终,我们实现了目标并解决了问题。
OpenCLKelp.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 多输出函数
当从磁盘加载网络时,函数也被链接在一起。
每个函数都有一个向前和向后的方法。