0. 前言

TensorFlow 并非唯一可用于深度学习任务的框架,还有许多库可供选择,每个库都有其独特的功能和使用场景。在本节中,将探讨一些流行的深度学习库,并比较它们的特点。

1. Hugging Face

Hugging Face 已成为处理所有自然语言处理 (Natural Language Processing, NLP) 相关任务的最佳工具之一。AutoNLP 和加速推理 API 是付费的,但其核心 NLP 库,包括 DatasetsTokenizersAccelerateTransformers 都是免费的。
Hugging Face 生态系统的核心是其 Transformers 库。TokenizersDatasets 库支持 Transformers 库,要使用这些库,首先需要进行安装。Transformers 可以通过 pip install 命令进行安装:

$ pip install transformers

Hugging Face 提供的一些开箱即用的模型包括文本摘要、问答、文本分类、音频分类、自动语音识别、特征提取、图像分类和翻译。
除了这些开箱即用的模型,还可以利用 Hugging Face Hub 上大量可用的模型和数据集,并结合 PyTorchTensorFlowJAX 来构建自定义模型。

2. OpenAI

2.1 OpenAI GPT-3 API

OpenAI GPT-3 是一个机器学习平台,允许开发者构建深度学习自定义算法。该平台于 201712 月发布,已广泛应用于人工智能领域。GPT-3 具有易用性和丰富的功能,能够从数据中学习,可用于深度学习、自然语言处理和图像识别等多种任务。GPT-3 也因其开源而广受欢迎,使其成为学习深度学习及其应用的理想平台。总体而言,GPT-3 是一个强大且易于使用的机器学习平台,在人工智能领域得到了广泛应用。
OpenAI GPT-3 API 提供了以下功能:

  • 文本补全:GPT-3 API 可以生成或修改文本甚至代码。可以用于写广告语、故事或文章,或让补全未完成的句子
  • 语义搜索:在一组文档进行语义搜索。例如,可以使用 API 上传文档,最多支持 200 个文档,每个文件最大 150 MB,总大小限制为 1 GBAPI 将根据语义相似度评分对文档进行排序
  • 问答:使用上传的文档作为信息来源,首先搜索文档的相关性,然后根据语义相关性排名,最后回答问题
  • 文本分类:GPT-3 API 的文本分类接口接受一组带标签的数据集作为输入,然后使用其中的标签对查询文本进行标记,可以应用于情感分析等任务

2.2 OpenAI DALL-E 2

GPT-3 API 能够处理与 NLP 相关的任务,而 DALL-E 2 则更进一步,可以根据提供的文本描述生成逼真的图像。它还可以对现有图像进行编辑,例如添加或删除图像中的对象和元素,并在操作时考虑阴影、反射和纹理的影响。

2.3 OpenAI Codex

开始学习编程时,我们通常将程序看作是一组指令,我们需要使用所学语言尽可能清晰地编写这些指令。Codex 就是实现这一过程的工具,只需提供想要实现的目标,就会生成相应的代码。OpenAI 将其作为通用编程模型,在公开的 GitHub 代码上进行了训练。以下是一些任务和 Codex 生成的相应代码的示例:

""" Ask the user for their name and say "Hello" in Python """
print("Hello, world!")
name = input("Please type your name: ")
print("Hello, " + name + "!")

""" Write a program in Python to find sum of n fibonacci sequences """
def Fibonacci(n):
    if n < 0:
        print("Incorrect input")
    elif n == 1:
        return 0
    elif n == 2:
        return 1
    else:
        return Fibonacci(n - 1) + Fibonacci(n - 2)
n = int(input("Enter the number of terms: "))

# check if the number of terms is valid
if n <= 0:
    print("Please enter a positive integer")
else:
    print("Fibonacci sequence: ")
    for I in range(1, n + 1):
        print(Fibonacci(n), end=' ')

3. PyTorch

PyTorch 是另一个成熟的深度学习框架,是由 Meta 开发的开源深度学习框架,具有灵活性和模块化方法。PyTorch 对生产部署也提供了稳定的支持,与 TensorFlow 类似,PyTorch 的核心是张量处理库和自动微分引擎。在 C++ 运行时环境中,它利用 TorchScript 实现图模式和即时模式之间的轻松转换。PyTorch 的主要特性是其动态计算的能力,即动态构建计算图,能够灵活地修改和检查计算图。
PyTorch 库由许多模块组成,作为构建复杂模型的构建块。此外,PyTorch 还提供了用于在不同设备之间传输变量和模型的函数,最主要的三个模块包括:

  • NN 模块:构建深度学习网络的层和函数的基础类。下面的代码段展示了如何使用 NN 模块构建神经网络。可以使用 net = My_Net(1,10,5) 实例化网络,创建一个具有 1 个输入通道、10 个输出神经元的网络。
import torch.nn as nn
import torch.nn.functional as F

class My_Net(nn.Module):

    def __init__(self, input_channel, output_neurons, kernel_size):
        super(My_Net, self).__init__()
        self.conv1 = nn.Conv2d(input_channel, 6, kernel_size)
        self.conv2 = nn.Conv2d(6, 16, 5)
        self.fc1 = nn.Linear(16 * 5 * 5, 120)
        self.fc2 = nn.Linear(120, 84)
        self.fc3 = nn.Linear(84,output_neurons)

    def forward(self, x):
        x = F.max_pool2d(F.relu(self.conv1(x)), (2, 2))
        x = F.max_pool2d(F.relu(self.conv2(x)), 2)
        x = x.view(-1, self.num_flat_features(x))
        x = F.relu(self.fc1(x))
        x = F.relu(self.fc2(x))
        x = self.fc3(x)
        return x

    def num_flat_features(self, x):
        size = x.size()[1:]  
        num_features = 1
        for s in size:
            num_features *= s
        return num_features

net = My_Net(1,10,5)
print(net)
My_Net(
  (conv1): Conv2d(1, 6, kernel_size=(5, 5), stride=(1, 1))
  (conv2): Conv2d(6, 16, kernel_size=(5, 5), stride=(1, 1))
  (fc1): Linear(in_features=400, out_features=120, bias=True)
  (fc2): Linear(in_features=120, out_features=84, bias=True)
  (fc3): Linear(in_features=84, out_features=10, bias=True)
)
  • Autograd 模块:PyTorch 的核心模块,提供了用于实现自动微分的类和函数。创建了一个称为动态计算图的非循环图,图的叶子节点是输入张量,根节点是输出张量。通过跟踪根节点到叶子节点并使用链式法则乘以路径上的每个梯度来计算梯度。以下代码段展示了如何使用 Autograd 模块计算梯度。backward() 函数计算损失相对于所有 requires_grad 设置为 True 的张量的梯度。因此,假设有一个变量 w,在调用 backward() 之后,张量 w.grad 将给出损失相对于 w 的梯度。可以基于此按照学习规则更新变量 w
loss = (y_true - y_pred).pow(2).sum()
loss.backward()
# Here the autograd is used to compute the backward pass.
With torch.no_grad():
    W = w - lr_rate * w.grad
    w.grad = None # Manually set to zero after updating 
  • Optim 模块:实现了各种优化算法。Optim 中可用的优化器算法包括 SGDAdaDeltaAdamSparseAdamAdaGradLBFGS。还可以利用 Optim 模块创建复杂的优化器。使用 Optim 模块时,只需构造一个优化器对象,该对象将保存当前状态,并根据梯度更新参数。

4. ONNX

ONNX (Open Neural Network Exchange) 提供了一个用于 AI 模型的开源格式,支持深度学习模型和传统机器学习模型。ONNX 旨在表示任意类型的模型,通过使用由不同框架创建的计算图的中间表示来实现,支持 PyTorchTensorFlowMATLAB 等深度学习框架。因此,使用 ONNX,可以轻松地将模型从一个框架转换到另一个框架。有助于缩短从研究到部署的时间,例如,可以使用 ONNXPyTorch 模型转换为 ONNX.js 格式,然后可以直接在 Web 上部署。

5. H2O.ai

H2O 是由 H2O.ai 开发的快速、可扩展的深度学习框架。可以在 HadoopSparkKubernetes 集群的大数据基础设施上运行,也可以在独立模式下运行。H2O 利用分布式系统和内存计算,允许即使在小型机器集群中也能处理大量数据。它支持 RPythonJavaScalaJavaScript 的接口,并且还具有内置的网页界面。
H2O 包括大量基于统计的机器学习算法,如广义线性建模、朴素贝叶斯、随机森林、梯度提升和所有主流的深度学习算法。H2O 可以用仅几行代码构建数千个模型,比较结果,甚至进行超参数调优,H2O 还提供了更好的数据预处理工具。
H2O 需要 Java,因此,需要确保系统上已安装 Java。可以使用 pip 安装 H2O,以便在 Python 中使用:

$ pip install h2o

5.1 H2O AutoML

H2O 提供了 AutoML 功能,即自动机器学习。包含了一个用户友好的机器学习界面,供初学者和非专业人士使用。H2O AutoML 自动化训练和调整大量候选模型的过程,使得用户只需指定数据集、输入和输出特征以及对训练的总模型数量或时间限制的约束,其余的工作由 AutoML 自动完成,在指定的时间限制内,它会识别表现最好的模型并提供排行榜。

5.2 使用 H2O 进行 AutoML

接下来,在一个自定义数据集上使用 H2O AutoML。使用 scikit-learnmake_circles 方法创建数据,并将其保存为 CSV 文件:

from sklearn.datasets import make_circles
import pandas as pd
X, y = make_circles(n_samples=1000, noise=0.2, factor=0.5, random_state=9)
df = pd.DataFrame(X, columns=['x1','x2'])
df['y'] = y
df.head()
df.to_csv('circle.csv', index=False, header=True)

在使用 H2O 之前,需要启动其服务器,可以通过 init() 函数完成:

import h2o
h2o.init()

初始化 H2O 服务器后可以得到以下输出:

Checking whether there is an H2O instance running at http://localhost:54321
..... not found.
Attempting to start a local H2O server...
  Java Version: openjdk version ...
...

读取自定义数据文件。由于问题为分类问题,即判断点是否位于圆内,将标签 y 重新定义为 asfactor(),用于令 H2O AutoML 模块将变量 y 视为分类变量,从而将问题视为分类问题。数据集按 60:20:20 的比例分为训练集、验证集和测试集:

class_df = h2o.import_file("circle.csv", destination_frame="circle_df")
class_df['y'] = class_df['y'].asfactor()
train_df,valid_df,test_df = class_df.split_frame(ratios=[0.6, 0.2])

调用 H2OAutoML 模块并在训练数据集上进行训练。AutoML 将搜索最多 10 个模型,但可以更改 max_models 参数来增加或减少测试的模型数量:

from h2o.automl import H2OAutoML as AutoML
aml = AutoML(max_models = 10, max_runtime_secs=100, seed=2)
aml.train(training_frame= train_df, validation_frame=valid_df, y = 'y', x=['x1','x2'])

对于每个模型,它提供一个性能总结,例如,在下图中,可以看到一个二项式 GLM 的评估总结:

评估总结

可以在排行榜上检查 H2O AutoML 评估的所有模型的性能:

lb = aml.leaderboard
print(lb.head())

排行榜输出结果如下:

排行榜

5.3 H2O 模型可解释性

H2O 为多种可解释性方法及其可视化工具提供了一个方便的封装,通过函数 explain() 与数据集和模型配合使用。为了获得 AutoML 测试模型在测试数据上的可解释性,使用 aml.explain()。接下来,使用 explain 模块对排行榜上排名第一的 StackedEnsemble_BestOfFamily 模型进行分析:

exa = aml.leader.explain(test_df)

结果如下:

explain

真实标签在第一行中,模型的预测结果显示在第一列中。对于本节的自定义数据,类别 0 被正确预测了 104 次,类别 1 被正确预测了 88 次。
部分依赖图 (Partial Dependence Plot, PDP) 提供了一个变量对模型响应的边际效应的图形表示,可以揭示输出标签与输入特征之间的关系。下图显示了从 H2O 解释模块获得的自定义合成数据集的 PDP

PDP

在为每个特征构建 PDP 时,H2O 将其余特征视为常量。因此,在 x1 (x2) 的 PDP 中,特征 x2 (x1) 保持不变,同时测量 x1 (x2) 变化时的平均响应。上图图表明,这两个特征在确定点是否属于 circle 数据集时都发挥了重要作用,尤其是在 [-0.5, 0.5] 范围内的值。
我们还可以检查不同模型中变量的重要性:

热力图

上图显示了不同算法对两个输入特征的重要性评估。可以看到,给予两个特征几乎相等重要性的模型在排行榜上表现良好,而 GLM_1 对两个特征的处理差异较大,其准确率只有约 41%
不同模型之间的预测是相关的,我们可以检查这种相关性:

模型相关性

上图显示了模型相关性,展示了不同模型在测试数据集上的预测之间的相关性。通过计算相同预测的频率来衡量相关性。可以看到,除了 GLM_1 之外,大多数其他模型表现几乎相同,排行榜上的准确率范围在 84%-93% 之间。

小结

在本节中,我们简要介绍了一些除 Tensorflow 之外的流行深度学习框架、库和平台的功能和特点。首先介绍了一个流行的 NLP 框架 Hugging Face,接着探讨了 OpenAIGPT-3DALL-E 2GPT-3 API 可以用于各种与 NLP 相关的任务,而 DALL-E 2 使用 GPT-3 根据文本描述生成图像。然后,介绍了 PyTorch 框架,包含了许多与 TensorFlow 相当的功能。本节简要介绍了 PyTorch 的一些重要功能,如 NN 模块、Optim 模块和 Autograd 模块。我们还介绍了一种用于深度学习模型的开源格式 ONNX,最后,介绍了 H2O 及其 AutoMLexplain 模块。

系列链接

TensorFlow深度学习实战(1)——神经网络与模型训练过程详解
TensorFlow深度学习实战(2)——使用TensorFlow构建神经网络
TensorFlow深度学习实战(3)——深度学习中常用激活函数详解
TensorFlow深度学习实战(4)——正则化技术详解
TensorFlow深度学习实战(5)——神经网络性能优化技术详解
TensorFlow深度学习实战(6)——回归分析详解
TensorFlow深度学习实战(7)——分类任务详解
TensorFlow深度学习实战(8)——卷积神经网络
TensorFlow深度学习实战(9)——构建VGG模型实现图像分类
TensorFlow深度学习实战(10)——迁移学习详解
TensorFlow深度学习实战(11)——风格迁移详解
TensorFlow深度学习实战(12)——词嵌入技术详解
TensorFlow深度学习实战(13)——神经嵌入详解
TensorFlow深度学习实战(14)——循环神经网络详解
TensorFlow深度学习实战(15)——编码器-解码器架构
TensorFlow深度学习实战(16)——注意力机制详解
TensorFlow深度学习实战(17)——主成分分析详解
TensorFlow深度学习实战(18)——K-means 聚类详解
TensorFlow深度学习实战(19)——受限玻尔兹曼机
TensorFlow深度学习实战(20)——自组织映射详解
TensorFlow深度学习实战(21)——Transformer架构详解与实现
TensorFlow深度学习实战(22)——从零开始实现Transformer机器翻译
TensorFlow深度学习实战(23)——自编码器详解与实现
TensorFlow深度学习实战(24)——卷积自编码器详解与实现
TensorFlow深度学习实战(25)——变分自编码器详解与实现
TensorFlow深度学习实战(26)——生成对抗网络详解与实现
TensorFlow深度学习实战(27)——CycleGAN详解与实现
TensorFlow深度学习实战(28)——扩散模型(Diffusion Model)
TensorFlow深度学习实战(29)——自监督学习(Self-Supervised Learning)
TensorFlow深度学习实战(30)——强化学习(Reinforcement learning,RL)
TensorFlow深度学习实战(31)——强化学习仿真库Gymnasium
TensorFlow深度学习实战(32)——深度Q网络(Deep Q-Network,DQN)
TensorFlow深度学习实战(33)——深度确定性策略梯度
TensorFlow深度学习实战(34)——TensorFlow Probability
TensorFlow深度学习实战(35)——概率神经网络
TensorFlow深度学习实战(36)——自动机器学习(AutoML)
TensorFlow深度学习实战(37)——深度学习的数学原理

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐