探索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提供了一个强大而灵活的平台,适合各种任务,从自然语言处理到图像识别,甚至创建自定义聊天机器人。其高效性和可移植性使其成为一个理想的工具,无论您是在研究还是实际应用中探索深度学习。别忘了,开始探索只需几个简单的步骤,现在就加入这个充满可能性的世界吧!
- CangjieCommunity为仓颉编程语言开发者打造活跃、开放、高质量的社区环境Markdown00
- redis-sdk仓颉语言实现的Redis客户端SDK。已适配仓颉0.53.4 Beta版本。接口设计兼容jedis接口语义,支持RESP2和RESP3协议,支持发布订阅模式,支持哨兵模式和集群模式。Cangjie033
- 每日精选项目🔥🔥 推荐每日行业内最新、增长最快的项目,快速了解行业最新热门项目动态~ 🔥🔥02
- qwerty-learner为键盘工作者设计的单词记忆与英语肌肉记忆锻炼软件 / Words learning and English muscle memory training software designed for keyboard workersTSX022
- Yi-CoderYi Coder 编程模型,小而强大的编程助手HTML07
- advanced-javaAdvanced-Java是一个Java进阶教程,适合用于学习Java高级特性和编程技巧。特点:内容深入、实例丰富、适合进阶学习。JavaScript085
- taro开放式跨端跨框架解决方案,支持使用 React/Vue/Nerv 等框架来开发微信/京东/百度/支付宝/字节跳动/ QQ 小程序/H5/React Native 等应用。 https://taro.zone/TypeScript09
- CommunityCangjie-TPC(Third Party Components)仓颉编程语言三方库社区资源汇总05
- Bbrew🍺 The missing package manager for macOS (or Linux)Ruby01
- byzer-langByzer(以前的 MLSQL):一种用于数据管道、分析和人工智能的低代码开源编程语言。Scala04