TensorFlow系列:第三讲:MobileNetV2使用介绍

使用TensorFlow官方提供的API进行模型训练,keras系列API中,存在很多算法,使用MobileNetV2进行讲解。

一. MobileNetV2简介

MobileNetV2 是由 Google 在 2018 年发布的一种轻量级深度神经网络架构,旨在优化移动设备和嵌入式设备上的图像分类和其他视觉任务的性能。它是 MobileNet 系列的第二代改进版本,相较于 MobileNetV1,引入了新的层类型和架构改进,显著提升了模型的准确性和效率。

1. 主要特性和创新点

深度可分离卷积(Depthwise Separable Convolutions):

延续了 MobileNetV1 的设计,通过深度可分离卷积来减少参数量和计算量。深度可分离卷积将标准卷积分解为深度卷积和逐点卷积两个步骤,极大地减少了计算成本。

线性瓶颈(Linear Bottlenecks):

引入了线性瓶颈层,在每个模块的输入和输出使用低维线性空间。这有助于减少模型复杂度和计算量,同时避免信息丢失。

倒残差结构(Inverted Residuals):

引入了倒残差结构,与 ResNet 中的残差模块相反,MobileNetV2 中的残差连接在高维卷积层而不是低维层之间进行。

倒残差块结构通过扩展-深度卷积-压缩的过程来捕获更多的信息。

2. 架构细节

MobileNetV2 的架构由一系列倒残差块和普通卷积层组成:

Conv2D:初始标准卷积层,通常使用 3x3 卷积核。

Bottleneck Residual Blocks:包含扩展、深度可分离卷积和线性压缩。

每个瓶颈块通常包括:1x1 卷积(扩展通道数) -> 3x3 深度卷积 -> 1x1 卷积(压缩通道数)。

引入 ReLU6 激活函数用于非线性变换。

全局平均池化(Global Average Pooling):将所有的空间维度平均化。

全连接层(Fully Connected Layer):输出最终的分类结果。

3. 优点

高效性:大幅减少了参数和计算量,非常适合资源受限的移动和嵌入式设备。

模块化设计:灵活性高,可以根据不同任务和需求进行调整和裁剪。

较高准确性:在保持计算效率的同时,提供了与更复杂模型相近的分类准确性。

二. 核心API介绍

简单示例代码:

python 复制代码
import keras
from keras import layers

# 构建 MobileNet 模型
base_model = keras.applications.MobileNetV2((224, 224, 3), include_top=False)
# 将模型的主干参数进行冻结
base_model.trainable = False
model = keras.Sequential([
    # 归一化处理
    layers.Rescaling(1. / 127.5, offset=-1, input_shape=(224, 224, 3)),
    # 设置主干模型
    base_model,
    # 对主干模型的输出进行全局平均池化
    layers.GlobalAveragePooling2D(),
    # 通过全连接层映射到最后的分类数目上
    layers.Dense(10, activation='softmax')
])

1. keras介绍

Keras 是一个高级神经网络 API,用 Python 编写,能够运行在 TensorFlow、Theano 和 CNTK 等多个深度学习框架之上。它由 François Chollet 开发,旨在实现快速实验,支持快速构建和训练深度学习模型。Keras 的主要优势包括易用性、模块化和可扩展性,使其成为研究人员和开发人员构建和测试深度学习模型的流行选择。

2. layers介绍

在 Keras 中,layers 是神经网络的基本构建块。每一个层将输入数据转换为输出数据,并包含可训练的权重。Keras 提供了多种类型的层,用于构建不同类型的神经网络,包括全连接层、卷积层、池化层、循环层等。

3. MobileNetV2参数介绍

  • input_shape: 输入图像的形状,默认是 (224, 224, 3)。
  • alpha: 控制网络的宽度。alpha 的取值在 (0, 1] 之间。例如,当 alpha=1.0 时,表示使用原始网络宽度;当alpha=0.5 时,表示将网络每一层的滤波器数量减半。
  • depth_multiplier: 控制深度可分离卷积的深度(默认值为 1)。
  • include_top: 是否包含网络的顶层全连接层。默认值是 True,用于包含顶层全连接层;设置为 False,可以在迁移学习中使用。
  • weights: 指定预训练权重,选项包括 None(随机初始化权重),'imagenet'(使用在 ImageNet 上训练的权重)。
  • input_tensor: 可选的 Keras 张量(即输出为模型输入的层),用于作为模型的输入。
  • pooling: 当 include_top 设置为 False 时,该参数指定模型的全局池化模式。选项包括: None:不应用额外的全局池化。 'avg': 全局平均池化。 'max': 全局最大池化。
  • classes: 分类数,即输出的神经元数量(只在 include_top=True 时有用)。
  • classifier_activation: 顶层分类器的激活函数。默认值是 'softmax'。设置为 None 时,返回原始 logits。

4.Rescaling(1. / 127.5, offset=-1, input_shape=(224, 224, 3))

假设输入数据的像素值范围是 [0, 255],则经过这个 Rescaling 层后,这样就可以将输入数据从 [0, 255] 范围归一化到 [-1, 1] 范围。

相关推荐
KevinRay_3 分钟前
Python超能力:高级技巧让你的代码飞起来
网络·人工智能·python·lambda表达式·列表推导式·python高级技巧
跃跃欲试-迪之8 分钟前
animatediff 模型网盘分享
人工智能·stable diffusion
Captain823Jack34 分钟前
nlp新词发现——浅析 TF·IDF
人工智能·python·深度学习·神经网络·算法·自然语言处理
被制作时长两年半的个人练习生34 分钟前
【AscendC】ReduceSum中指定workLocal大小时如何计算
人工智能·算子开发·ascendc
资源补给站1 小时前
大恒相机开发(2)—Python软触发调用采集图像
开发语言·python·数码相机
Captain823Jack1 小时前
w04_nlp大模型训练·中文分词
人工智能·python·深度学习·神经网络·算法·自然语言处理·中文分词
Black_mario1 小时前
链原生 Web3 AI 网络 Chainbase 推出 AVS 主网, 拓展 EigenLayer AVS 应用场景
网络·人工智能·web3
PieroPc2 小时前
Python 自动化 打开网站 填表登陆 例子
运维·python·自动化
Aileen_0v02 小时前
【AI驱动的数据结构:包装类的艺术与科学】
linux·数据结构·人工智能·笔记·网络协议·tcp/ip·whisper
数信云 DCloud2 小时前
实力认可 | 通付盾入选《ISC.AI 2024创新能力全景图谱》五项领域
人工智能