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介绍

简单示例代码:

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] 范围。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/43943.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

<PLC><模拟量><SMC>使用SMC温度流量传感器PF3W系列与汇川PLC进行模拟量通讯的接线与设置

前言 本系列是关于PLC相关的博文,包括PLC编程、PLC与上位机通讯、PLC与下位驱动、仪器仪表等通讯、PLC指令解析等相关内容。 PLC品牌包括但不限于西门子、三菱等国外品牌,汇川、信捷等国内品牌。 除了PLC为主要内容外,PLC相关元器件如触摸屏(HMI)、交换机等工控产品,如…

微服务节流阀:Eureka中服务限流策略的精妙实现

微服务节流阀:Eureka中服务限流策略的精妙实现 引言 在微服务架构中,服务的稳定性和可靠性至关重要。限流策略作为保障服务稳定性的一种手段,通过控制服务的访问速率,可以有效避免服务过载和故障扩散。Eureka作为Netflix开源的服…

大小端详解

引例 我们知道整形(int)是4个字节,例如随便举个例子:0x01020304,它一共占了四个地址位,01,02,03,04分别占了一个字节(一个字节就对应了一个地址)。 那么就会有个问题:我们的01到底是存储在高地…

mysql 5.7.44 32位 zip安装

前言 因为研究别人代码,他使用了5.7的 32位 mysql ,同时最新的 8.4 64位 mysql 不能用官方lib连接。所以安装这个版本使用,期间有些坑,在这里记录一下。 下载路径 mysql官方路径:https://downloads.mysql.com/archi…

软考高级第四版备考--第15天(管理团队)Management Team

定义:跟踪团队成员工作表现、提供反馈、解决问题并管理团队变更以优化项目绩效的过程 作用:影响团队行为,管理冲突以及解决问题。 输入:项目管理计划(资源管理计划)、项目文件(问题日志、经验…

Android IdleHandler源码分析

文章目录 Android IdleHandler源码分析概述前提基本用法源码分析添加和删除任务执行任务 应用场景 Android IdleHandler源码分析 概述 IdleHandler是一个接口,它定义在MessageQueue类中,用于在主线程的消息队列空闲时执行一些轻量级的任务。IdleHandle…

Linux——多线程(五)

1.线程池 1.1初期框架 thread.hpp #include<iostream> #include <string> #include <unistd.h> #include <functional> #include <pthread.h>namespace ThreadModule {using func_t std::function<void()>;class Thread{public:void E…

Redis 7.x 系列【21】主从复制

有道无术&#xff0c;术尚可求&#xff0c;有术无道&#xff0c;止于术。 本系列Redis 版本 7.2.5 源码地址&#xff1a;https://gitee.com/pearl-organization/study-redis-demo 文章目录 1. 概述2. 工作原理2.1 建立连接2.2 全量复制2.3 命令传播2.4 增量复制 3. 拓扑架构3.…

Uniapp表单提交

template中&#xff1a; <template><view class""><button class"tianjia" click"tianjia">添加</button><view class"divOne" v-show"a"><text class"guanbi" click"gua…

本地 HTTP 文件服务器的简单搭建 (deno/std)

首发日期 2024-06-30, 以下为原文内容: 在本地局域网搭建一个文件服务器, 有很多种方式. 本文介绍的是窝觉得比较简单的一种. 文件直接存储在 btrfs 文件系统之中, 底层使用 LVM 管理磁盘, 方便扩容. 使用 btrfs RAID 1 进行镜像备份 (一个文件在 2 块硬盘分别存储一份), 防止…

Python 读取和写入文本文件(txt)、Excel 文件和 JSON 文件的方法

Python 读取和写入文本文件&#xff08;txt&#xff09;、Excel 文件和 JSON 文件的基本方法 读取/写入 txt 文件基本读取txt读取 txt 文件写入 txt 文件按行读取复杂数据处理大txt文本文件&#xff08;逐行读取以节省内存&#xff09; 读取/写入 Excel 文件基本读取读取 Excel…

Transformer和Bert的原理是什么

文章目录 一、Transformer原理二、Bert的原理 一、Transformer原理 Transformer是一种基于注意力机制&#xff08;Attention Mechanism&#xff09;的深度学习模型架构&#xff0c;最早由Vaswani等人在2017年的论文《Attention is All You Need》中提出。Transformer主要用于处…

Tomcat异常处理【Spring源码学习】

当没有指定具体控制器异常处理方法时&#xff0c;默认走的异常会被tomcat捕获&#xff1b; /** * 基于ControllerAdvice的异常处理只能处理Spring层面的异常&#xff1b; * 如果我们自定义了过滤器在过滤器中抛出了异常这种情况下需要更高级的异常捕获 * ControllerAdvice无法…

Go 语言 UUID 库 google/uuid 源码解析:UUID version4 的实现

google/uuid 库地址 本文将解析 googl/uuid 库中 UUID 变体10版本4的实现。 版本 4 的 UUID 采取完全随机的方式实现&#xff0c;简单来说就是将 UUID 中的 122 位全部随机填充&#xff08;剩余的 6 位作标记位&#xff09;。版本 4 的 UUID 存在一定的重复风险&#xff0c;但…

PostgreSQL 复制延迟

PostgreSQL 的流复制&#xff08;Streaming Replication&#xff09;是一种高效的复制机制&#xff0c;用于在主服务器和一个或多个备用服务器之间传输数据&#xff0c;以实现高可用性和负载均衡。然而&#xff0c;复制一旦延迟可能会带来显著的挑战。本文将带您了解有关 Postg…

springboot中在filter中用threadlocal存放用户身份信息

本文章主要描述通过springboot的filter类&#xff0c;在过滤器中设置jwt信息进行身份信息保存的方法 流程&#xff1a;请求->过滤器->解析请求的body信息->放入threadlocal中 定义filter:一个使用 Servlet 规范的过滤器&#xff08;Filter&#xff09;&#xff0c;它…

网络通信、BIO、NIO

1. 涉及的网络基础知识 Socket&#xff1a; 操作系统提供的api&#xff0c;介于应用层和tcp/ip层之间的软件层&#xff0c;封装服务器客户端之间网络通信相关内容&#xff0c;方便调用 IO多路复用&#xff1a; &#xff08;I/O Multiplexing&#xff09;是一种IO操作模式&a…

Android中线程的状态state都有哪些?S,R分表代表含义

在Android中&#xff0c;线程的状态&#xff08;state&#xff09;可以类比于Java线程的状态&#xff0c;因为Android是基于Java的。Java中线程的状态通常分为六种&#xff0c;这些状态在Android中也是适用的。具体状态及含义如下&#xff1a; NEW&#xff08;新生&#xff09…

Python 的 metaclass

文章目录 先说结论1. metaclass 的作用2. 主要的执行过程 1. metaclass.__new__2. metaclass.__call__关于 metaclass.__init__ 3. metaclass.__prepare__4. 自动创建 __slots__ 属性4.1 metaclass 的接口类4.2 metaclass conflict 5. Class metaprogramming 先说结论 1. meta…

Java技术栈总结:JVM虚拟机篇

一、Java的四种引用类型 1、强引用 最常见的引用&#xff0c;类似Object obj new Object()、String str “hello”。如果一个对象具有强引用&#xff0c;垃圾回收器绝对不会回收它。即使抛出“OutOfMemoryError”错误&#xff0c;程序终止&#xff0c;也不会随意回收具有强引…