TensorFlow Keras

TensorFlow Keras

TensorFlow Keras 指的是将 Keras API 集成到 TensorFlow 框架中。Keras 最初是一个独立的,用于构建和训练深度学习模型的高级 API,现在已成为 TensorFlow 的官方高级 API。
TensorFlow Keras 的关键:
高级 API:Keras 提供了一个用户友好且直观的接口,用于定义、训练和评估深度学习模型,并抽象化了底层 TensorFlow 操作的大部分复杂性。

快速原型开发:其简洁性和模块化特性使得在开发机器学习模型时,能够快速进行实验和迭代。

核心抽象:Keras 的核心抽象包括层(具有可训练权重的输入/输出转换)和模型(构成计算图的层组)。

与 TensorFlow 集成:作为 tf.keras,它与整个 TensorFlow 生态系统无缝集成,从而可以访问 TensorFlow 的高级功能、分布式训练功能和部署工具。

灵活性:Keras 在提供高级接口,同时,还允许通过对层和模型进行子类化来实现高级自定义,从而创建自定义组件和训练循环。

跨后端兼容性(Keras 3):借助 Keras 3,模型可以实例化为 PyTorch 模块或导出为 TensorFlow SavedModels,从而增强不同深度学习框架之间的互操作性。

TensorFlow API

Keras的核心数据结构是层和模型。层是一个简单的输入/输出转换,而模型是由层构成的有向无环图 (DAG)。

tf.keras.layers.Layer类是Keras中的基本抽象概念。一个层封装了状态(权重)和一些计算(在 tf.keras.layers.Layer.call 方法中定义)。

层创建的权重可以是可训练的,也可以是不可训练的。层是递归可组合的:如果您将一个层实例作为另一个层的属性,则外层将开始跟踪内层创建的权重。

您还可以使用层来处理数据预处理任务,例如归一化和文本向量化。预处理层可以直接包含在模型中,无论是在训练期间还是训练之后,这使得模型具有可移植性。

层是具有已知数学结构的函数,可以重用并具有可训练变量。在 TensorFlow 中,大多数层和模型的高级实现,例如 Keras 或 Sonnet,都是基于同一个基础类:tf.Module 构建的。

模型

模型是一个将层组合在一起,并可使用数据进行训练的对象。

最简单的模型类型是序列模型,它是一个线性堆叠的层。对于更复杂的架构,您可以使用Keras函数式API构建任意层图,或者使用子类化从头开始编写模型。

tf.keras.Model类具有内置的训练和评估方法:

  • tf.keras.Model.fit:训练模型指定轮数。
  • tf.keras.Model.predict:生成输入样本的输出预测。
  • tf.keras.Model.evaluate:返回模型的损失和指标值;通过tf.keras.Model.compile方法配置。

这些方法使您可以访问以下内置训练功能:

  • 回调。可以利用内置回调,进行提前停止、模型检查点和TensorBoard监控。您还可以实现自定义回调。
  • 分布式训练。可以轻松地将训练扩展到多个GPU、TPU或设备。
  • 步长融合。通过tf.keras.Model.compile中的steps_per_execution参数,您可以在单个tf.function调用中,处理多个批次,从而显著提高TPU的设备利用率。

序列模型

产生顺序模型

顺序模型适用于简单的层堆叠结构,其中每一层都恰好有一个输入张量和一个输出张量。

Sequential构造函数接受一个名称参数,就像Keras中的任何层或模型一样。这对于使用语义有意义的名称来标注TensorBoard图非常有用。

顺序模型示意图如下:

定义一个包含3个层的序列模型。

复制代码
model = keras.Sequential(
    [
        layers.Dense(2, activation="relu", name="layer1"),
        layers.Dense(3, activation="relu", name="layer2"),
        layers.Dense(4, name="layer3"),
    ]
)

# Call model on a test input
x = tf.ones((3, 3))
y = model(x)

上述的序列模型与下列的层定义是等价的

复制代码
layer1 = layers.Dense(2, activation="relu", name="layer1")
layer2 = layers.Dense(3, activation="relu", name="layer2")
layer3 = layers.Dense(4, name="layer3")

# Call layers on a test input
x = tf.ones((3, 3))
y = layer3(layer2(layer1(x)))

存取顺序模型的层

序列模型的层可以通过layers属性访问。

下面展示一些 内联代码片

复制代码
print(model.layers)

增加顺序模型层

可以通过 add() 方法逐步创建 Sequential 模型

复制代码
model = keras.Sequential(name="my_sequential")
model.add(layers.Dense(2, activation="relu", name="layer1"))
model.add(layers.Dense(3, activation="relu", name="layer2"))
model.add(layers.Dense(4, name="layer3"))

删除顺序模型层

pop() 方法可以用来删​​除层。

输入形状(shape)

一个tensor的形状描述了它的结构和维度。它通常表示为一个整数元组,其中每个整数表示tensor沿特定维度(或轴)的大小。

在没有输入形状的情况下,实例化一个Sequential模型时,它不会被"构建",它没有权重(调用 model.weights 会报错,指出这一点)。

权重是在模型首次接收到输入数据时创建的:

复制代码
model = keras.Sequential(
    [
        layers.Dense(2, activation="relu"),
        layers.Dense(3, activation="relu"),
        layers.Dense(4),
    ]
)  # No weights at this stage!

# At this point, you can't do this:
# model.weights

# You also can't do this:
# model.summary()

# Call the model on a test input
x = tf.ones((1, 4))
y = model(x)
print("Number of weights after calling the model:", len(model.weights))  # 6

其他API和工具

Keras 提供了许多其他用于深度学习的 API 和工具,包括:

  • 优化器
  • 指标
  • 损失函数
  • 数据加载工具
相关推荐
2401_841495642 分钟前
【自然语言处理】自然语言理解的 “问题识别之术”
人工智能·自然语言处理·情感分类·决策·自动问答·自然语言理解·多源信息
Coder_Boy_2 分钟前
【人工智能应用技术】-基础实战-小程序应用(基于springAI+百度语音技术)智能语音开关
人工智能·百度·小程序
Coder_Boy_4 分钟前
【人工智能应用技术】-基础实战-小程序应用(基于springAI+百度语音技术)智能语音控制-Java部分核心逻辑
java·开发语言·人工智能·单片机
zhengfei6116 分钟前
全网第一款用于渗透测试和保护大型语言模型系统——DeepTeam
人工智能
爱笑的眼睛1110 分钟前
Flask上下文API:从并发陷阱到架构原理解析
java·人工智能·python·ai
科创致远13 分钟前
esop系统可量化 ROI 投资回报率客户案例故事-案例1:宁波某精密制造企业
大数据·人工智能·制造·精益工程
阿杰学AI14 分钟前
AI核心知识60——大语言模型之NLP(简洁且通俗易懂版)
人工智能·ai·语言模型·自然语言处理·nlp·aigc·agi
丹宇码农17 分钟前
使用AI一步生成音视频文件的会议纪要或者课后笔记
人工智能·笔记·音视频
自不量力的A同学18 分钟前
xAI 发布 Grok Voice Agent API
人工智能·语音识别