探索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提供了一个强大而灵活的平台,适合各种任务,从自然语言处理到图像识别,甚至创建自定义聊天机器人。其高效性和可移植性使其成为一个理想的工具,无论您是在研究还是实际应用中探索深度学习。别忘了,开始探索只需几个简单的步骤,现在就加入这个充满可能性的世界吧!
atomcodeClaude Code 的开源替代方案。连接任意大模型,编辑代码,运行命令,自动验证 — 全自动执行。用 Rust 构建,极致性能。 | An open-source alternative to Claude Code. Connect any LLM, edit code, run commands, and verify changes — autonomously. Built in Rust for speed. Get StartedRust0213
cann-learning-hubCANN 学习中心仓,支持在线互动运行、边学边练,提供教程、示例与优化方案,一站式助力昇腾开发者快速上手。Jupyter Notebook0137
JoyAI-EchoJoyAI-Echo,这是一个独立的、仅用于推理的版本,旨在实现分钟级多镜头音视频生成。它采用了经过蒸馏的DMD生成器、配对的跨模态记忆以及故事级别的一致性。其性能的核心在于,一个跨模态视听记忆库能够在长达五分钟的视频中保持角色外观和语音音色的一致性。同时,一个训练后处理流程将基于记忆的强化学习与分布匹配蒸馏相结合,实现了7.5倍的速度提升,显著增强了视觉质量和对齐效果。00
GLM-5.2智谱开源 GLM-5.2,这是针对长文本任务的最新旗舰模型。相较于前代产品 GLM-5.1,它在长文本任务处理能力上实现了显著飞跃,并且首次在稳定的 100 万 token 上下文中提供这一能力。Jinja00
SwanLab⚡️SwanLab - an open-source, modern-design AI training tracking and visualization tool. Supports Cloud / Self-hosted use. Integrated with PyTorch / Transformers / LLaMA Factory / veRL/ Swift / Ultralytics / MMEngine / Keras etc.Python00
tiny-universe《大模型白盒子构建指南》:一个全手搓的Tiny-UniverseJupyter Notebook03