探索CAI神经网络API:高性能深度学习框架

CAI神经网络API是一个基于Pascal的深度学习库,专为AVX,AVX2和AVX512指令集优化,并支持AMD、Intel和NVIDIA的OpenCL设备。这个项目起源于名为CAI的更大项目,同时也是Keras基的K-CAI NEURAL API的姐妹项目。在预训练神经API网络仓库中,您可以找到已训练好的神经网络模型。
为什么选择Pascal?
- 速度超快:Pascal编译后的代码性能卓越,甚至在某些架构上超越了主流API。
- 易于理解:Pascal语法简洁,源码可读性强,使得您可以在实现高性能原生代码的同时,保持代码清晰易懂。
先决条件
要使用CAI NEURAL API,您需要安装Lazarus开发环境。如果您的设备支持OpenCL,还需要安装对应的驱动程序。本项目提供了一些示例,涉及到CIFAR-10,CIFAR-100,MNIST,Fashion MNIST以及Places365-Standard Small images 256x256数据集。
是否适用于Delphi?
尽管该项目基于Lazarus,但自v0.98版本以来,有多个单元可以与Delphi兼容,您可以在Delphi环境中创建并运行神经网络。
安装
克隆此项目,将neural文件夹添加到Lazarus的单位搜索路径中,即可开始使用!
文档
文档包括:
- 简单示例
- 图像分类示例
- 视频教程
- 高级示例
本README中,您将了解以下信息:
- 数据结构(卷积)
- 可用的神经网络层
- 数据集支持
- 训练神经网络
- 并行计算
- 同作者的其他科学出版物
简单示例先来!
假设你想训练一个神经网络学习有两个输入和一个输出的函数,你可以从以下代码开始:
NN.AddLayer([
TNNetInput.Create(2),
TNNetFullConnectReLU.Create(32),
TNNetFullConnectReLU.Create(32),
TNNetFullConnectLinear.Create(1)
]);
上述代码包含两个输入层(TNNetInput),两个全连接层(TNNetFullConnectReLU),每个有32个神经元,以及一个输出层(TNNetFullConnectLinear)。
可以在这些源代码示例中了解更多关于如何构建和训练简单神经网络的信息:
- 训练神经网络学习勾股定理
- 使用FitLoading训练神经网络学习勾股定理
- 使用neuralfit单元训练神经网络学习AND、OR和XOR
- 不使用neuralfit单元训练神经网络学习AND、OR和XOR
载入与保存神经网络
载入很简单:
NN := TNNet.Create;
NN.LoadFromFile('MyTrainedNeuralNetwork.nn');
保存同样容易:
NN.SaveToFile('MyTrainedNeuralNetwork.nn');
自然语言处理:简单文本生成
这个NLP源代码示例展示了一个简单的神经网络模型,用于在Tiny Stories数据集上进行训练。经过训练后,你可以执行以下代码进行文本生成:
WriteLn(GenerateStringFromChars(NFit.NN, 'once', FSampler), '.');
WriteLn(GenerateStringFromChars(NFit.NN, 'one ', FSampler), '.');
这将产生如下的输出:
once upon a time, there was a little girl named lily. she loved to play outside i.
one day, a little girl named lily was playing in her garden. she saw a big car wi.
可以直接在Colab上查看原始训练文件并自行运行: https://colab.research.google.com/github/joaopauloschuler/neural-api/blob/master/examples/SimpleNLP/NLP_CAI_TinyStories_Simple_Example.ipynb
创建自己的聊天机器人
一旦你的神经网络被训练好,你可以使用以下代码运行自己的聊天机器人:
var
S: string;
oSampler: TNNetSamplerBase;
NN: TNNet;
begin
oSampler := TNNetSamplerTopP.Create(0.6);
NN := TNNet.Create();
WriteLn('Loading neural network.');
NN.LoadFromFile('MyNeuralNetwork.nn');
NN.DebugStructure();
WriteLn();
WriteLn('Write something and I will reply.');
repeat
Write('User: ');
ReadLn(S);
WriteLn('Neural network: ', GenerateStringFromChars(NN, LowerCase(S), oSampler), '.');
until S = 'exit';
NN.Free;
oSampler.Free;
end;
图像分类简易示例
CIFAR-10图像分类示例
CIFAR-10是机器学习和计算机视觉算法常用的图像集合,由加拿大高级研究所(CIFAR)创建。它包含60,000张32x32像素的彩色图像,分为10个不同的类别,每个类别有6,000张图像。类别包括飞机、汽车、鸟类、猫、鹿、狗、青蛙、马、船和卡车。尽管分辨率较低且尺寸较小,但在高准确度上的挑战使得CIFAR-10成为测试机器学习技术进步的良好数据集。
以下是一个用于CIFAR-10图像分类的源代码示例:
NN := TNNet.Create();
NN.AddLayer([
TNNetInput.Create(32, 32, 3), //32x32x3 输入图像
TNNetConvolutionReLU.Create({Features=}16, {FeatureSize=}5, {Padding=}0, {Stride=}1, {SuppressBias=}0),
TNNetMaxPool.Create({Size=}2),
TNNetConvolutionReLU.Create({Features=}32, {FeatureSize=}5, {Padding=}0, {Stride=}1, {SuppressBias=}0),
TNNetMaxPool.Create({Size=}2),
TNNetConvolutionReLU.Create({Features=}32, {FeatureSize=}5, {Padding=}0, {Stride=}1, {SuppressBias=}0),
TNNetFullConnectReLU.Create({Neurons=}32),
TNNetFullConnectLinear.Create(NumClasses),
TNNetSoftMax.Create()
]);
CreateCifar10Volumes(ImgTrainingVolumes, ImgValidationVolumes, ImgTestVolumes);
WriteLn('Neural Network will minimize error with:');
WriteLn(' Layers: ', NN.CountLayers());
WriteLn(' Neurons:', NN.CountNeurons());
WriteLn(' Weights:', NN.CountWeights());
NeuralFit := TNeuralImageFit.Create;
NeuralFit.InitialLearningRate := fLearningRate;
NeuralFit.Inertia := fInertia;
NeuralFit.Fit(NN, ImgTrainingVolumes, ImgValidationVolumes, ImgTestVolumes, NumClasses, {batchsize}128, {epochs}100);
这些示例训练神经网络对图像进行分类,例如判断图像是否包含猫、狗或飞机等。
您可以使用TNNet.SaveToFile和TNNet.LoadFromFile方法保存和加载训练模型。该文件格式是可移植的,这意味着您可以在CPU上训练并在GPU上运行,或者在AMD硬件上训练然后在ARM设备上运行。以下是一个简单示例,演示如何加载预先训练好的模型进行图像分类:
procedure ClassifyOneImageSimple;
var
NN: TNNet;
ImageFileName: string;
NeuralFit: TNeuralImageFit;
begin
WriteLn('Loading Neural Network...');
NN := TNNet.Create;
NN.LoadFromFile('SimplePlantLeafDisease-20230720.nn');
NeuralFit := TNeuralImageFit.Create;
ImageFileName := 'plant/Apple___Black_rot/image (1).JPG';
WriteLn('Processing image: ', ImageFileName);
WriteLn(
'The class of the image is: ',
N
);
}
总之,CAI神经网络API提供了一个强大而灵活的平台,适合各种任务,从自然语言处理到图像识别,甚至创建自定义聊天机器人。其高效性和可移植性使其成为一个理想的工具,无论您是在研究还是实际应用中探索深度学习。别忘了,开始探索只需几个简单的步骤,现在就加入这个充满可能性的世界吧!
kernelopenEuler内核是openEuler操作系统的核心,既是系统性能与稳定性的基石,也是连接处理器、设备与服务的桥梁。C042
MiniMax-M2.1从多语言软件开发自动化到复杂多步骤办公流程执行,MiniMax-M2.1 助力开发者构建下一代自主应用——全程保持完全透明、可控且易于获取。Python00
kylin-wayland-compositorkylin-wayland-compositor或kylin-wlcom(以下简称kywc)是一个基于wlroots编写的wayland合成器。 目前积极开发中,并作为默认显示服务器随openKylin系统发布。 该项目使用开源协议GPL-1.0-or-later,项目中来源于其他开源项目的文件或代码片段遵守原开源协议要求。C01
PaddleOCR-VLPaddleOCR-VL 是一款顶尖且资源高效的文档解析专用模型。其核心组件为 PaddleOCR-VL-0.9B,这是一款精简却功能强大的视觉语言模型(VLM)。该模型融合了 NaViT 风格的动态分辨率视觉编码器与 ERNIE-4.5-0.3B 语言模型,可实现精准的元素识别。Python00
GLM-4.7GLM-4.7上线并开源。新版本面向Coding场景强化了编码能力、长程任务规划与工具协同,并在多项主流公开基准测试中取得开源模型中的领先表现。 目前,GLM-4.7已通过BigModel.cn提供API,并在z.ai全栈开发模式中上线Skills模块,支持多模态任务的统一规划与协作。Jinja00
agent-studioopenJiuwen agent-studio提供零码、低码可视化开发和工作流编排,模型、知识库、插件等各资源管理能力TSX0121
Spark-Formalizer-X1-7BSpark-Formalizer 是由科大讯飞团队开发的专用大型语言模型,专注于数学自动形式化任务。该模型擅长将自然语言数学问题转化为精确的 Lean4 形式化语句,在形式化语句生成方面达到了业界领先水平。Python00