Skip to content

Keras - Deep learning

Keras - 使用 tf.keras 进行深度学习

Section titled “Keras - 使用 tf.keras 进行深度学习”

Keras 是用于构建和训练神经网络的高级 API。它专注于实现快速实验和用户友好性。Keras 最初是一个独立的库,能够在多种后端(TensorFlow、Theano、CNTK)上运行,现在已成为直接集成到 TensorFlow 中的官方高级 API(tf.keras)。这种集成在 TensorFlow 生态系统中提供了无缝的工作流程。

tf.keras 提供了一个完整的框架,用于创建几乎任何类型的神经网络,从简单的 Sequential 模型到具有多个输入/输出或自定义组件的复杂架构。接下来,我们将探索 tf.keras API 的核心组件。

tf.keras API 大致可分为三个主要类别:

  • 模型 (Models): 将层组合在一起的主要容器,并提供用于训练、评估和预测的方法(tf.keras.Model)。
  • 层 (Layers): 神经网络的基本构建块,用于执行数据计算和转换(tf.keras.layers)。
  • 核心模块 (Core Modules): 支持性组件,例如激活函数 (activation functions)、优化器 (optimizers)、损失函数 (loss functions)、评估指标 (metrics)、初始化器 (initializers)、正则化器 (regularizers) 和实用工具 (tf.keras.activations, tf.keras.optimizers, tf.keras.losses, tf.keras.metrics 等)。

概念结构:通过组装层 (Layers) 来定义模型 (Model)。层利用核心模块 (Core Modules) 的功能(例如激活函数或初始化器)。然后使用核心模块的组件(优化器 Optimizer、损失 Loss、评估指标 Metrics)编译模型,并在数据上进行训练。

tf.keras 提供了两种主要方式来定义模型:

Sequential 模型适用于简单的层堆叠,其中每个层只有一个输入张量 (input tensor) 和一个输出张量 (output tensor)。对于许多常见的网络架构,它既直观又易于使用。

示例:

import tensorflow as tf
# Define a Sequential model
model = tf.keras.Sequential([
tf.keras.layers.Dense(512, activation='relu', input_shape=(784,)), # Input layer requires input_shape
tf.keras.layers.Dropout(0.2),
tf.keras.layers.Dense(10, activation='softmax') # Output layer
])
# Alternatively, add layers incrementally
# model = tf.keras.Sequential()
# model.add(tf.keras.layers.Dense(512, activation='relu', input_shape=(784,)))
# model.add(tf.keras.layers.Dropout(0.2))
# model.add(tf.keras.layers.Dense(10, activation='softmax'))

在这里,我们创建了一个模型,包含一个 Dense 输入层、一个用于正则化的 Dropout 层,以及一个带有 softmax 激活的 Dense 输出层(适用于多类别分类)。

Functional API 为创建复杂模型提供了更大的灵活性。它允许构建具有非线性拓扑、共享层以及多个输入或输出的模型。您将层定义为可调用对象,并显式地连接它们。

示例(概念性):

import tensorflow as tf
# Define input layer
inputs = tf.keras.Input(shape=(784,))
# Define hidden layers, connecting them
x = tf.keras.layers.Dense(64, activation='relu')(inputs)
x = tf.keras.layers.Dense(64, activation='relu')(x)
# Define output layer
outputs = tf.keras.layers.Dense(10, activation='softmax')(x)
# Create the Model
model = tf.keras.Model(inputs=inputs, outputs=outputs)

这创建了与 Sequential 示例相同的基本结构,但提供了构建更复杂图的潜力。

为了获得最大的灵活性和控制,您可以通过子类化 tf.keras.Model 来创建自定义模型。这对于研究或实现高度定制的架构非常有用。您在 __init__ 方法中定义层,并在 call 方法中实现前向传播逻辑。

层是核心构建块。每个层封装了特定的计算和转换。tf.keras.layers 提供了各种预构建的层:

  • 核心层 (Core Layers): Dense (全连接), Activation, Dropout, Flatten, Reshape, InputLayer 等。
  • 卷积层 (Convolutional Layers): Conv1D, Conv2D, Conv3D, SeparableConv2D, DepthwiseConv2D 等(用于 CNNs)。
  • 池化层 (Pooling Layers): MaxPooling1D, MaxPooling2D, AveragePooling2D, GlobalAveragePooling2D 等(用于 CNNs)。
  • 循环层 (Recurrent Layers): LSTM, GRU, SimpleRNN, RNN, Bidirectional 包装器(用于 RNNs)。
  • 归一化层 (Normalization Layers): BatchNormalization, LayerNormalization。
  • 预处理层 (Preprocessing Layers): Resizing, Rescaling, CenterCrop, Normalization, TextVectorization 等(通常用作模型的第一层或在 tf.data 数据管道中使用)。
  • 注意力层 (Attention Layers): Attention, AdditiveAttention, MultiHeadAttention。

您可以使用 Sequential 或 Functional API 组合这些层来构建所需的网络架构。Keras 还允许通过子类化 tf.keras.layers.Layer 来创建自定义层。

这些模块提供了在模型定义、编译和训练过程中使用的基本函数和类:

  • tf.keras.activations: 激活函数 (activation functions)(例如,relu, sigmoid, softmax, tanh, selu)。它们引入非线性。
  • tf.keras.losses: 损失函数 (loss functions)(例如,BinaryCrossentropy, CategoricalCrossentropy, SparseCategoricalCrossentropy, MeanSquaredError, MeanAbsoluteError)。量化模型的误差。
  • tf.keras.optimizers: 优化算法 (optimization algorithms)(例如,Adam, SGD, RMSprop, Adagrad)。更新模型权重以最小化损失。
  • tf.keras.metrics: 评估指标 (evaluation metrics)(例如,Accuracy, Precision, Recall, AUC, MeanAbsoluteError)。评估模型性能。
  • tf.keras.initializers: 权重初始化方案 (weight initialization schemes)(例如,GlorotUniform, HeNormal, Zeros, Ones)。为层设置初始权重。
  • tf.keras.regularizers: 正则化技术 (regularization techniques)(例如,L1, L2, L1L2)。对层参数或激活应用惩罚以防止过拟合 (overfitting)。
  • tf.keras.callbacks: 传递给 model.fit() 的对象,用于在训练的不同阶段执行操作(例如,ModelCheckpoint 用于保存模型,EarlyStopping 用于提前停止训练,TensorBoard 用于可视化)。
  • tf.keras.utils: 实用工具函数 (utility functions)(例如,to_categorical 用于 one-hot 编码,plot_model 用于可视化架构,load_img, img_to_array 用于图像加载)。

通过结合这些组件,tf.keras 提供了一个强大且用户友好的环境,用于在 TensorFlow 生态系统中开发和部署深度学习模型。