ai识别算法技术框架有哪些类型,人工智能算法框

什么是AI框架
AI 框架是 AI 算法模型设计、训练和验证的一套标准接口、特性库和工具包,集成了算法的封装、数据的调用以及计算资源的使用,同时面向开发者提供了开发界面和高效的执行平台,是现阶段 AI 算法开发的必备工具。
AI 框架负责给开发者提供构建神经网络模型的数学操作,把复杂的数学表达转换成计算机可识别的计算图,自动对神经网络进行训练,得到一个神经网络模型用于解决机器学习中分类、回归的问题,实现目标分类、语音识别等应用场景。
主流 AI 框架热度排名
国内外 AI 框架在 GitHub 上的数据情况:
根据上表可知,TensorFlow 的各项指标在 AI 框架中都是名列前茅的,并且和第二名的差距非常大,是全球目前活跃度最高、应用最广的 AI 框架。在排行榜中的第二名是 PyTorch,近几年在学术领域的表现比较亮眼,有很大的发展潜力,但总体而言,与 TensorFlow 有些差距。
聚焦于国内,目前 MindSpore 是活跃度最高的框架,在贡献者的规模上也积累了一定的群体;排名第二的是 PaddlePaddle,因为开源较早,已经积累了不小的优势,主要集中于点赞数量及贡献者规模上,但在整体活跃度上,稍劣于 MindSpore。
不过如果我们对国内最大的开源代码平台 Gitee 的数据进行分析之后可以发现,MindSpore 各项数据都远超其他框架,说明它最近在国内是关注度以及被应用最多的 AI 框架,发展的势头很猛。数据如下表:
主流AI框架介绍
1. TensorFlow
TensorFlow (以下简称 TF)是一个核心开源库,一个端到端的开源机器学习平台,在 2015 年 11 月由 Google 设计研发并开源。它拥有一个全面而灵活的生态系统,由 Python 编程语言编写,包含各种工具、库和社区资源,可以帮助用户开发和训练机器学习模型,推动先进机器学习技术的发展。
TF 可以轻松地安装在 Windows、MacOS 以及 Linux 等主流操作系统上,用户甚至可以直接在浏览器中运行 Colab 笔记本来快速上手,它能够帮助开发者轻松地构建和部署由机器学习提供支持的应用。但它丰富多样的 API,也为新用户的上手提高了门槛。
目前 TensorFlow 对于工业环境有着完善的模型训练与部署的解决方案,所以在这些领域内,它的占有率也是最高的。同时 TF 可以轻松地使用高阶 Keras API 构建和训练模型,对于大型的机器学习训练任务,可以使用 Distribution Strategy API 在不同的硬件配置上进行分布式训练,而无需更改模型定义,大大地方便了用户。
凭借着 TF 强大而可靠的机器学习能力,研究人员可以构建和训练先进的模型,并且不会降低速度或性能。借助 Keras Functional API 和 Model Subclassing API 等功能,TF 可以助我们灵活地创建复杂拓扑并实现相关控制。
2. PyTorch
PyTorch 是一个基于 Torch 的 Python 开源机器学习库,底层由 C++实现,应用于人工智能领域,如自然语言处理等。它主要由 Facebook 的人工智能研究团队开发,自 2017 年开源以来,陆续推出了 Tensor 与 Numpy 互转、与 Caffe2 的融合、支持 Windows 系统、ONNX 转换、FastAI 的发布、支持 Tensorboard、分布式训练等功能。不仅能够实现强大的 GPU 加速,同时还支持动态神经网络,是目前市面上很多主流框架都不支持的。
PyTorch 提供了两个高级功能:
相较于 TensorFlow 来说,PyTorch 不是必须先构建一个神经网络,然后在想要改变网格的结构时就需要从头构建的操作方式。它通过反向求导技术,可以让用户零延迟地任意改变神经网络的行为,灵活性是它最大的一个特性。而且 PyTorch 的编程 API 风格简约,直观易懂,也方便新用户上手。
但因为 PyTorch 还处于成长阶段,所以在全面性上还处于劣势,比如它还不支持快速傅里叶、沿维翻转张量和检查无穷与非数值张量等等功能;针对移动端和嵌入式部署等等性能表现方面,也还需要提供的空间。
3. MindSpore(昇思)
MindSpore 是华为 2019 年 8 月推出的新一代全场景 AI 计算框架,于 2020 年 3 月 28 日开源。它的推出旨在实现易开发、高效执行、全场景覆盖三大目标,其中易开发表现为 API 友好、调试难度低;高效执行包括计算效率、数据预处理效率和分布式训练效率;全场景则指框架同时支持云、边缘以及端侧场景。
具体来说,MindSpore 可以提供简单的开发体验,帮助开发者实现网络自动切分,只需串行表达就能实现并行训练,降低开发门槛同时简化开发流程。同时它有灵活的调试模式,具备训练过程静态执行和动态调试能力,开发者通过变更一行代码即可切换运行模式,快速在线定位问题。并且它的适用范围也非常广,支持云、边缘和手机上的快速部署,实现更好的资源利用和隐私保护,让开发者专注于 AI 应用的创造。
凭借底层编译化手段,MindSpore 计算图的运行效率也很高,同时它还先后支持了加强版可视化功能、差分隐私、二阶优化算法、图神经网络、量化训练、混合异构、MindSpore Serving、PS 分布式训练、MindIR、调试器等等功能。为推动人工智能软硬件应用生态的发展做出了贡献。
4. PaddlePaddle(飞桨)
PaddlePaddle 在 2016 年 8 月由百度进行开源,是国内 AI 框架最早的探索与践行者。它支持声明式、命令式编程,兼具开发灵活、高性能;网络结构自动设计,模型效果超越人类专家,开发起来便捷能够提升效率。兼容多种开源框架训练的模型,不同架构的平台设备轻松部署推理速度全面领先。开源丰富算法和预训练模型,包括国际竞赛冠军模型,快速助力产业应用。
PaddlePaddle 的迭代节奏很快,目前为止,已经支持了全流程能力支持、大规模异步分布式训练等等新功能,Paddle3.0 还提供了 Suite,支持了 VisualDL、PARL、AutoDL、EasyDL、AIStudio 等功能。
在国内,Paddle 的社区也比较活跃,生态链也很完整完整,依靠百度云的加持,对于国内的用户应用还是非常友好的。目前 Paddle 虽然也不乏有 OPPO、京东物流以及度小满等国内厂商进行部署,但主要用户还是个人开发者居多。
AI 框架用于量子技术
我们这里以目前国外及国内使用率排名前列的两个 AI 框架来作为例子进行说明。
TensorFlow Quantum
TensorFlow Quantum (TFQ) 是一个量子机器学习库,可用于快速设计量子-经典机器学习混合模型的原型。研究人员在研究量子算法和应用时,可以利用 Google 的量子计算框架,而所有的这些框架都可以在 TensorFlow 中找到。
TensorFlow Quantum 侧重于量子数据和构建量子-经典混合模型。它集成了在 Cirq 中设计的量子计算算法和逻辑,并提供与现有 TensorFlow API 兼容的量子计算基元,还提供高性能量子电路模拟器。
安装
TensorFlow 有多种可选择的版本可供安装。这里我们选择稳定版:
pip3install-Utensorflow-quantum
因为 TF 以 Python 编程语言为基础,所以我们还要设置 Python3.8 开发环境:
sudo apt updatesudo apt-getinstallpkg-config zip g++ zlib1g-dev unzip python3.8sudo apt installpython3.8python3.8-dev python3.8-venv python3-pip python3.8-m pip install–upgrade pip
接着为 TFQ 开发创建一个虚拟环境:
python3.8 -m venv quantum_env sourcequantum_env/bin/activate
随后安装 TF 依赖项:
pip install-U pip six numpy wheel setuptools mock ‘future>=0.17.1’pip install-U keras_applications –no-depspip install-U keras_preprocessing –no-depspip installnumpy==1.19.5
接着构建 TensorFlow Quantum pip 软件包并安装:
./configure.sh bazel build -copt –cxxopt=”-O3″–cxxopt=”-march=native”–cxxopt=”-D_GLIBCXX_USE_CXX11_ABI=0″release:build_pip_package bazel-bin/release/build_pip_package /tmp/tfquantum/ python3 -m pip install /tmp/tfquantum/<var>name_of_generated_wheel</var>.whl
如此,TensorFlow Quantum 安装完毕,环境也已调试好,可以运行测试代码看看实际情况:
./scripts/test_all.sh
运行示例
我们以二进制分类为例,看看 TensorFlow Quantum 是如何完成相关操作的。我们知道二进制分类是机器学习中的一项基本任务,也可以应用于量子数据,作为一个经典混合量子模型的最小示例。
我们首先为单个量子比特上的区域提供一个二元分类器,X 与 Y 是其中的两个随机向量。选择布洛赫球面,围绕这两个向量,我们随机抽取两组量子数据积分,让机器学会如何区分这两组积分。
第一步,生成量子数据,我们可以使用 Cirq 完成此任务,具体操作如下:
importcirq , random , sympy importnumpy as np importtensorflow as tf importtensorflow_quantum as tfq
利用下面的函数生成量子数据集;标签使用单次编码:
def generate_dataset ( qubit , theta_a , theta_b , num_samples ): q_data = [] labels = [] blob_size = abs( theta_a – theta_b ) / 5for_ inrange ( num_samples ): coin = random. random() spread_x , spread_y = np . random. uniform ( – blob_size , blob_size , 2) ifcoin < 0.5: label = [1, 0] angle = theta_a + spread_y else: label = [0, 1] angle = theta_b + spread_y labels . append ( label ) q_data . append ( cirq . Circuit ( cirq . Ry (- angle )( qubit ) , cirq . Rx (- spread_x ) ( qubit )) ) return( tfq . convert_to_tensor ( q_data ) , np . array ( labels ))
我们可以在之后生成一个数据集和相关的标签,选择一些参数值:
qubit = cirq . GridQubit (0 , 0) theta_a = 1 theta_b = 4 num_samples = 200 q_data , labels = generate_dataset ( qubit , theta_a , theta_b , num_samples )
将这些参考值作为我们的量子参数模型,使用最简单的通用量子鉴别器[43,66]的情况,单参数化旋转(线性)和沿 Z 轴(非线性)测量数据:
theta = sympy . Symbol (’theta ’) q_model = cirq . Circuit ( cirq . Ry ( theta ) ( qubit )) q_data_input = tf . keras . Input ( shape =() , dtype = tf . dtypes . string ) expectation = tfq . layers . PQC ( q_model , cirq .Z( qubit )) expectation_output = expectation ( q_data_input )
旋转门的目的是为了使输入的量子数据叠加效应最小化,这样我们就可以从测量中最大限度的获得有用信息。然后我们将这个量子模型附加到一个小的分类器 NN 中完成所需的混合模型:
classifier = tf . keras . layers . Dense ( 2, activation = tf . keras . activations . softmax ) classifier_output = classifier ( expectation_output ) model = tf . keras . Model ( inputs = q_data_input , outputs = classifier_output )
我们可以在量子数据上对这个混合模型进行训练。下面我们使用标签和预测数据之间的交叉熵作为损失函数,构建经典神经网络,选择 ADAM 优化器进行参数更新:
optimizer = tf . keras . optimizers . Adam ( learning_rate =0.1) loss = tf . keras . losses . CategoricalCrossentropy () model . compile ( optimizer = optimizer , loss = loss ) history = model . fit ( x= q_data , y= labels , epochs =50)
最后我们可以用训练好的混合模型来对新的量子数据点进行分类:
test_data , _ = generate_dataset ( qubit , theta_a , theta_b , 1) p = model . predict ( test_data ) [0] print(f” prob (a)={p [0]:.4f}, prob (b)={p [1]:.4f}”


下一篇:没有了
相关文章:


