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

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

2024-05-20 09:32:38作者:滑思眉Philip

项目徽标

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-10CIFAR-100MNISTFashion 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)。

可以在这些源代码示例中了解更多关于如何构建和训练简单神经网络的信息:

载入与保存神经网络

载入很简单:

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.SaveToFileTNNet.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提供了一个强大而灵活的平台,适合各种任务,从自然语言处理到图像识别,甚至创建自定义聊天机器人。其高效性和可移植性使其成为一个理想的工具,无论您是在研究还是实际应用中探索深度学习。别忘了,开始探索只需几个简单的步骤,现在就加入这个充满可能性的世界吧!

热门项目推荐
相关项目推荐

项目优选

收起
Python-100-DaysPython-100-Days
Python - 100天从新手到大师
Python
576
107
Ffit-framework
面向全场景的 Java 企业级插件化编程框架,支持聚散部署和共享内存,以一切皆可替换为核心理念,旨在为用户提供一种灵活的服务开发范式。
Java
111
13
HarmonyOS-ExamplesHarmonyOS-Examples
本仓将收集和展示仓颉鸿蒙应用示例代码,欢迎大家投稿,在仓颉鸿蒙社区展现你的妙趣设计!
Cangjie
285
74
RuoYi-Cloud-Vue3RuoYi-Cloud-Vue3
🎉 基于Spring Boot、Spring Cloud & Alibaba、Vue3 & Vite、Element Plus的分布式前后端分离微服务架构权限管理系统
Vue
44
29
Cangjie-ExamplesCangjie-Examples
本仓将收集和展示高质量的仓颉示例代码,欢迎大家投稿,让全世界看到您的妙趣设计,也让更多人通过您的编码理解和喜爱仓颉语言。
Cangjie
204
50
LangBotLangBot
😎丰富生态、🧩支持扩展、🦄多模态 - 大模型原生即时通信机器人平台 | 适配 QQ / 微信(企业微信、个人微信)/ 飞书 / 钉钉 / Discord / Telegram 等消息平台 | 支持 OpenAI GPT、ChatGPT、DeepSeek、Dify、Claude、Gemini、Ollama、LM Studio、SiliconFlow、Qwen、Moonshot、ChatGLM 等 LLM 的机器人 / Agent | LLM-based instant messaging bots platform, supports Discord, Telegram, WeChat, Lark, DingTalk, QQ, OpenAI ChatGPT, DeepSeek
Python
7
1
RGF_CJRGF_CJ
RGF是Windows系统下的通用渲染框架,其基于Direct3D、Direct2D、DXGI、DirectWrite、WIC、GDI、GDIplus等技术开发。RGF仓颉版(后续简称"RGF")基于RGF(C/C++版)封装优化而来。RGF为开发者提供轻量化、安全、高性能以及高度一致性的2D渲染能力,并且提供对接Direct3D的相关接口,以满足开发者对3D画面渲染的需求。
Cangjie
11
0
omega-aiomega-ai
Omega-AI:基于java打造的深度学习框架,帮助你快速搭建神经网络,实现模型推理与训练,引擎支持自动求导,多线程与GPU运算,GPU支持CUDA,CUDNN。
Java
11
2
openHiTLSopenHiTLS
旨在打造算法先进、性能卓越、高效敏捷、安全可靠的密码套件,通过轻量级、可剪裁的软件技术架构满足各行业不同场景的多样化要求,让密码技术应用更简单,同时探索后量子等先进算法创新实践,构建密码前沿技术底座!
C
59
47
CangjieCommunityCangjieCommunity
为仓颉编程语言开发者打造活跃、开放、高质量的社区环境
Markdown
900
0