TensorFlow2 Python深度学习 - TensorFlow2框架入门 - Sequential顺序模型

锋哥原创的TensorFlow2 Python深度学习视频教程:

https://www.bilibili.com/video/BV1X5xVz6E4w/

课程介绍

本课程主要讲解基于TensorFlow2的Python深度学习知识,包括深度学习概述,TensorFlow2框架入门知识,以及卷积神经网络(CNN),循环神经网络(RNN),生成对抗网络(GAN),模型保存与加载等。

TensorFlow2 Python深度学习 - TensorFlow2框架入门 - Sequential顺序模型

Sequential顺序模型是Keras中最简单的线性堆叠模型,各层之间按顺序依次连接,前一层的输出作为后一层的输入。这种模型适合构建简单的神经网络结构。

先提前了解下Keras中常用模型

  • Sequential 模型:适用于简单的层按顺序堆叠的模型。

  • Functional API(函数式API):适用于多输入、多输出、共享权重等更复杂的结构。

  • 子类化模型(Sub-classing Model):适用于极其自定义的网络结构,提供最大的灵活性。

  • 预训练模型(Pre-trained Models):使用预训练模型进行迁移学习,特别适用于计算机视觉和自然语言处理。

  • 共享层权重模型(Shared Weights Model):适用于需要在多个输入之间共享权重的场景,如Siamese 网络。

Keras Input层

Input层是Keras中用于明确指定模型输入张量形状和属性的特殊层。它在构建复杂模型(特别是函数式API)时非常重要。

复制代码
# 基本用法
input_tensor = Input(shape=(input_shape,))
​
# 完整参数
input_tensor = Input(
    shape=None,
    batch_size=None,
    name=None,
    dtype=None,
    sparse=None,
    tensor=None,
    ragged=None,
    **kwargs
)

核心参数:

  • shape: 输入形状元组,不包括batch大小

  • batch_size: 固定batch大小(可选)

  • name: 层的名称

  • dtype : 数据类型,如tf.float32

  • sparse: 是否创建稀疏张量

  • tensor: 可选现有张量包装为Input层

Keras Dense层

Dense层(全连接层)是神经网络中最基本也是最常用的层类型。每个神经元与前一层的所有神经元相连接,实现特征的线性变换和非线性激活。

复制代码
# 基本用法
dense_layer = Dense(units, activation=None, **kwargs)
​
# 完整参数
dense_layer = Dense(
    units,
    activation=None,
    use_bias=True,
    kernel_initializer='glorot_uniform',
    bias_initializer='zeros',
    kernel_regularizer=None,
    bias_regularizer=None,
    activity_regularizer=None,
    kernel_constraint=None,
    bias_constraint=None,
    **kwargs
)

核心参数

  • units: 指定该层神经元的个数,决定了该层的输出维度。

  • activation: 激活函数,如 'relu', 'sigmoid', 'softmax', 'tanh' 等

  • use_bias: 布尔值,是否使用偏置向量

初始化器

  • kernel_initializer: 权重矩阵初始化方法

  • bias_initializer: 偏置向量初始化方法

正则化

  • kernel_regularizer: 权重正则化(L1/L2)

  • bias_regularizer: 偏置正则化

  • activity_regularizer: 输出正则化

约束

  • kernel_constraint: 权重约束

  • bias_constraint: 偏置约束

在Keras中,除了Dense层(全连接层)之外,还有许多常用的层,用于构建各种神经网络结构。以下是一些常见的层及其功能:

  1. 卷积层 (Convolutional Layers)
  • Conv1D: 适用于一维数据(如时间序列数据)。常用于处理序列数据,如文本和音频。

  • Conv2D: 适用于二维数据(如图像)。常用于图像处理和计算机视觉任务。

  • Conv3D: 适用于三维数据(如视频或3D体积数据)。

  1. 池化层 (Pooling Layers)
  • MaxPooling1D: 适用于一维数据,执行最大池化操作。

  • MaxPooling2D: 适用于二维数据,执行最大池化操作。

  • MaxPooling3D: 适用于三维数据,执行最大池化操作。

  • AveragePooling1D: 适用于一维数据,执行平均池化操作。

  • AveragePooling2D: 适用于二维数据,执行平均池化操作。

  • AveragePooling3D: 适用于三维数据,执行平均池化操作。

  1. 循环层 (Recurrent Layers)
  • LSTM: 长短期记忆网络(Long Short-Term Memory),用于处理序列数据,解决传统RNN的梯度消失问题。

  • GRU: 门控循环单元(Gated Recurrent Unit),比LSTM简化,通常训练更快。

  • SimpleRNN: 基本的循环神经网络层,适用于简单的序列任务。

  1. 归一化层 (Normalization Layers)
  • BatchNormalization: 批量归一化,用于加速训练,稳定学习过程,减少内部协变量偏移。

  • LayerNormalization: 层归一化,主要用于对每一层的输入进行标准化。

  • GroupNormalization: 分组归一化,将特征分为小组进行归一化。

  1. Dropout层
  • Dropout: 随机丢弃神经网络中的一部分神经元,用于防止过拟合。
  1. 激活函数层
  • Activation

    : 将某种激活函数应用到输入。常见的激活函数有:

    • relu:线性整流单元

    • sigmoid:Sigmoid函数

    • tanh:双曲正切函数

    • softmax:常用于分类任务的输出层

  1. Flatten层
  • Flatten: 将多维输入展平为一维数据,通常用于将卷积层或池化层的输出展平,以连接到全连接层。
  1. 全连接层 (Fully Connected Layers)
  • Dense: 前向传播过程中常用的全连接层。可以有多个神经元,通常用于模型的最终分类或回归任务。
  1. Embedding层
  • Embedding: 用于将离散数据(如词索引)映射到稠密的向量空间,常用于自然语言处理任务。
  1. Reshape层
  • Reshape: 用于改变输入数据的形状。
  1. 自定义层
  • Lambda: 创建自定义操作,可以用于实现一些复杂的数学操作或将某些操作封装到一个层中。
  1. Global池化层
  • GlobalMaxPooling1D/2D/3D: 全局最大池化,减少维度,保留全局特征。

  • GlobalAveragePooling1D/2D/3D: 全局平均池化,减少维度,保留全局特征。

  1. Separable卷积层
  • SeparableConv2D: 分离卷积,使用深度可分离卷积提高计算效率,尤其在移动设备上很常用。
  1. UpSampling层
  • UpSampling1D/2D/3D: 上采样层,用于增大输入的尺寸,通常用于生成模型和上采样任务。

Keras 激活函数

激活函数是神经网络中的非线性变换函数,它决定了神经元的输出。没有激活函数,神经网络就只是线性回归模型,无法学习复杂模式。常用激活函数,如 'relu', 'sigmoid', 'softmax', 'tanh'

说明:

  1. SigmoidSoftmax 主要用于分类问题的输出层,尤其是二分类和多分类任务。

  2. Tanh 通常用于需要输出负值的任务,且它的输出范围较对称。

  3. ReLULeaky ReLU 常用于隐藏层,尤其是深度神经网络中,后者通过为负数部分引入斜率,避免了 ReLU 的"死神经元"问题。

  4. Swish 是 Google 提出的新型激活函数,近年来在一些深度学习模型中取得了不错的效果,尤其是在深层网络中。

Keras模型编译方法model.compile()

model.compile()是Keras中配置模型学习过程的关键方法,它在模型构建后、训练前调用,用于指定模型的优化器、损失函数和评估指标。

复制代码
model.compile(optimizer, loss=None, metrics=None, loss_weights=None, weighted_metrics=None, run_eagerly=None, steps_per_execution=None, **kwargs)

核心参数:

  1. optimizer(优化器)
  • 作用:定义模型参数更新的算法

  • 常用选项

    • 'adam' - 自适应矩估计(最常用)

    • 'sgd' - 随机梯度下降

    • 'rmsprop' - 适用于RNN

    • 'adagrad' - 自适应学习率

  1. loss(损失函数)
  • 作用:定义模型训练中要最小化的目标函数

  • 常用选项

    • 分类问题

      • 'binary_crossentropy' - 二分类

      • 'categorical_crossentropy' - 多分类 适用于标签采用one-hot编码的情况(如[1,0,0]表示类别1)

      • 'sparse_categorical_crossentropy' - 整数标签多分类 适用于标签为整数编码的情况(如直接使用类别序号3、1等)。

    • 回归问题

      • 'mean_squared_error' - 均方误差

      • 'mean_absolute_error' - 平均绝对误差

  1. metrics(评估指标)
  • 作用:监控训练和测试过程的性能指标

  • 常用选项

    • 'accuracy' - 准确率(分类)

    • 'precision', 'recall' - 精确率、召回率

    • 'mae', 'mse' - 回归指标

我们看下示例代码:

复制代码
import tensorflow as tf
from keras import Input, layers
​
# 正确的权重和偏置
TRUE_W = 3.0
TRUE_B = 2.0
​
NUM_EXAMPLES = 201
​
# 在区间[-2, 2]内生成NUM_EXAMPLES个均匀分布的数值点
x = tf.linspace(-2, 2, NUM_EXAMPLES)
x = tf.cast(x, tf.float32)
​
​
def f(x):
    return x * TRUE_W + TRUE_B
​
​
# 生成随机噪声数据
noise = tf.random.normal(shape=[NUM_EXAMPLES])
​
# 计算y
y = f(x) + noise
​
# 定义一个顺序模型
model = tf.keras.Sequential([
    Input(shape=(1,)),
    layers.Dense(units=1)
])
​
# 打印模型结构
model.summary()
​
# 编译配置模型 使用SGD(随机梯度下降)优化器,均方误差损失函数
model.compile(optimizer='sgd', loss='mean_squared_error')
​
# 训练模型
model.fit(x, y, epochs=10)
# 打印模型参数
print(model.variables)

运行结果:

相关推荐
小关会打代码4 小时前
深度学习之YOLO系列了解基本知识
人工智能·深度学习·yolo
雨夜的星光7 小时前
Python JSON处理:load/loads/dump/dumps全解析
开发语言·python·json
fen_fen8 小时前
Java打包时,不将本地Jar打包到项目的最终 JAR 中
开发语言·python·pycharm
渡我白衣10 小时前
深度学习入门(三)——优化算法与实战技巧
人工智能·深度学习
可触的未来,发芽的智生10 小时前
触摸未来2025.10.10:记忆的种子,当神经网络拥有了临时工作区,小名喜忆记系统
人工智能·python·神经网络·机器学习·架构
东方芷兰10 小时前
LLM 笔记 —— 04 为什么语言模型用文字接龙,图片模型不用像素接龙呢?
人工智能·笔记·深度学习·语言模型·自然语言处理
mortimer10 小时前
在 Windows 上部署 NVIDIA Parakeet-TDT 遇到的坑
python·github·nvidia
Niuguangshuo10 小时前
深度学习基本模块:MultiheadAttention 多头注意力机制
人工智能·深度学习
MPCTHU10 小时前
Deep Learning|03 Overview of Machine Learning
人工智能·深度学习·机器学习