TensorFlow深度学习实战(38)——常用深度学习库
在本节中,我们简要介绍了一些除 Tensorflow 之外的流行深度学习框架、库和平台的功能和特点。首先介绍了一个流行的 NLP 框架 Hugging Face,接着探讨了 OpenAI 的 GPT-3 和 DALL-E 2。然后,介绍了 PyTorch 框架,本节简要介绍了 PyTorch 的一些重要功能,如 NN 模块、Optim 模块和 Autograd 模块。我们还介绍了一种用于深度学习模
TensorFlow深度学习实战(38)——常用深度学习库
0. 前言
TensorFlow 并非唯一可用于深度学习任务的框架,还有许多库可供选择,每个库都有其独特的功能和使用场景。在本节中,将探讨一些流行的深度学习库,并比较它们的特点。
1. Hugging Face
Hugging Face 已成为处理所有自然语言处理 (Natural Language Processing
, NLP
) 相关任务的最佳工具之一。AutoNLP
和加速推理 API
是付费的,但其核心 NLP
库,包括 Datasets
、Tokenizers
、Accelerate
和 Transformers
都是免费的。Hugging Face
生态系统的核心是其 Transformers
库。Tokenizers
和 Datasets
库支持 Transformers
库,要使用这些库,首先需要进行安装。Transformers
可以通过 pip install
命令进行安装:
$ pip install transformers
Hugging Face
提供的一些开箱即用的模型包括文本摘要、问答、文本分类、音频分类、自动语音识别、特征提取、图像分类和翻译。
除了这些开箱即用的模型,还可以利用 Hugging Face Hub
上大量可用的模型和数据集,并结合 PyTorch
、TensorFlow
和 JAX
来构建自定义模型。
2. OpenAI
2.1 OpenAI GPT-3 API
OpenAI GPT-3
是一个机器学习平台,允许开发者构建深度学习自定义算法。该平台于 2017
年 12
月发布,已广泛应用于人工智能领域。GPT-3
具有易用性和丰富的功能,能够从数据中学习,可用于深度学习、自然语言处理和图像识别等多种任务。GPT-3
也因其开源而广受欢迎,使其成为学习深度学习及其应用的理想平台。总体而言,GPT-3
是一个强大且易于使用的机器学习平台,在人工智能领域得到了广泛应用。OpenAI GPT-3 API
提供了以下功能:
- 文本补全:
GPT-3 API
可以生成或修改文本甚至代码。可以用于写广告语、故事或文章,或让补全未完成的句子 - 语义搜索:在一组文档进行语义搜索。例如,可以使用
API
上传文档,最多支持200
个文档,每个文件最大150 MB
,总大小限制为1 GB
。API
将根据语义相似度评分对文档进行排序 - 问答:使用上传的文档作为信息来源,首先搜索文档的相关性,然后根据语义相关性排名,最后回答问题
- 文本分类:
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
中可用的优化器算法包括SGD
、AdaDelta
、Adam
、SparseAdam
、AdaGrad
和LBFGS
。还可以利用Optim
模块创建复杂的优化器。使用Optim
模块时,只需构造一个优化器对象,该对象将保存当前状态,并根据梯度更新参数。
4. ONNX
ONNX
(Open Neural Network Exchange
) 提供了一个用于 AI
模型的开源格式,支持深度学习模型和传统机器学习模型。ONNX
旨在表示任意类型的模型,通过使用由不同框架创建的计算图的中间表示来实现,支持 PyTorch
、TensorFlow
、MATLAB
等深度学习框架。因此,使用 ONNX
,可以轻松地将模型从一个框架转换到另一个框架。有助于缩短从研究到部署的时间,例如,可以使用 ONNX
将 PyTorch
模型转换为 ONNX.js
格式,然后可以直接在 Web
上部署。
5. H2O.ai
H2O
是由 H2O.ai
开发的快速、可扩展的深度学习框架。可以在 Hadoop
、Spark
或 Kubernetes
集群的大数据基础设施上运行,也可以在独立模式下运行。H2O
利用分布式系统和内存计算,允许即使在小型机器集群中也能处理大量数据。它支持 R
、Python
、Java
、Scala
和 JavaScript
的接口,并且还具有内置的网页界面。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-learn
的 make_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])
调用 H2O
的 AutoML
模块并在训练数据集上进行训练。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)
结果如下:
真实标签在第一行中,模型的预测结果显示在第一列中。对于本节的自定义数据,类别 0
被正确预测了 104
次,类别 1
被正确预测了 88
次。
部分依赖图 (Partial Dependence Plot
, PDP
) 提供了一个变量对模型响应的边际效应的图形表示,可以揭示输出标签与输入特征之间的关系。下图显示了从 H2O
解释模块获得的自定义合成数据集的 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
,接着探讨了 OpenAI
的 GPT-3
和 DALL-E 2
, GPT-3 API
可以用于各种与 NLP
相关的任务,而 DALL-E 2
使用 GPT-3
根据文本描述生成图像。然后,介绍了 PyTorch
框架,包含了许多与 TensorFlow
相当的功能。本节简要介绍了 PyTorch
的一些重要功能,如 NN
模块、Optim
模块和 Autograd
模块。我们还介绍了一种用于深度学习模型的开源格式 ONNX
,最后,介绍了 H2O
及其 AutoML
和 explain
模块。
系列链接
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)——深度学习的数学原理
更多推荐
所有评论(0)