深度学习第6天:ResNet深度残差网络

Image Description

☁️主页 Nowl

🔥专栏 《深度学习》

📑君子坐而论道,少年起而行之

​​

在这里插入图片描述

文章目录

  • 什么是ResNet
  • 模型结构
    • 整体架构
    • 残差块
  • 模型特性
  • 示例代码

什么是ResNet

ResNet是一种用于图像识别的深度残差网络,是卷积神经网络的一种重要模型,ResNet开创性地引入了残差连接,解决了深层网络在训练过程中梯度弥散的问题,使深层模型的训练更加简便,同时也验证了随着网络层次的加深模型能够获得更好的性能

模型结构

整体架构

ResNet有许多模型:如ResNet34, ResNet50,不过这些基本上都是根据层数来命名的,ResNet网络模型一般是开始有一层卷积层来提取图像特征,再经过池化,然后进入残差块中(ResNet的主要结构),最后再经过池化层与全连接层被输出出来,下图是一个ResNet34的模型示意图

在这里插入图片描述

残差块

下面是resnet的关键结构——残差块,它由两个卷积层和一个直连通路组成在这里插入图片描述右侧曲线被称为直连通路,直连通路有助于解决梯度消失的问题,因为此时当神经网络反向传播求权重时,因为这个多项式即使前一部分的梯度消失了,后一部分还能保证梯度的存在

模型特性

  • 直连通路的存在使得模型可以保留原始数据信息,同时可以解决梯度弥散的问题(梯度消失)
  • 可以通过堆叠增加网络层数,不过当模型过于深时,性能可能下降,经原作者试验,在1000层左右的范围内,模型性能随层数增加而增加
  • 直连通路的结果与卷积层结果直接相加,使得模型在训练过程中只需要拟合不同层网络输出值与输入值的残差值,而无需直接拟合网络输出值,大大降低了模型学习的难度,有助于模型的收敛

示例代码

以下是一个简化的 ResNet 模型中,有以下主要组件:

  • 卷积层(Conv2D):模型开始的卷积层,用于提取图像特征。
  • 最大池化层(MaxPool):提取图像中显著的特征
  • 4 个残差块(residual_block):每个残差块包括两个卷积层。
  • 全局平均池化层(GlobalAveragePooling2D):用于将每个通道的特征平均化,产生一个固定大小的输出。
  • 全连接层(Dense):输出层,根据任务的不同可能有不同的神经元数量。
import tensorflow as tf
from tensorflow.keras import layers, Modeldef residual_block(x, filters, kernel_size=3, stride=1, conv_shortcut=False):shortcut = xif conv_shortcut:shortcut = layers.Conv2D(filters, kernel_size=1, strides=stride, padding='same')(shortcut)shortcut = layers.BatchNormalization()(shortcut)x = layers.Conv2D(filters, kernel_size, strides=stride, padding='same')(x)x = layers.BatchNormalization()(x)x = layers.Activation('relu')(x)x = layers.Conv2D(filters, kernel_size, padding='same')(x)x = layers.BatchNormalization()(x)x = layers.add([x, shortcut])x = layers.Activation('relu')(x)return xdef resnet(input_shape, num_classes=10):inputs = tf.keras.Input(shape=input_shape)x = layers.Conv2D(64, 7, strides=2, padding='same')(inputs)x = layers.BatchNormalization()(x)x = layers.Activation('relu')(x)x = layers.MaxPooling2D(3, strides=2, padding='same')(x)x = residual_block(x, 64)x = residual_block(x, 64)x = residual_block(x, 128, stride=2)x = residual_block(x, 128)x = residual_block(x, 256, stride=2)x = residual_block(x, 256)x = residual_block(x, 512, stride=2)x = residual_block(x, 512)x = layers.GlobalAveragePooling2D()(x)x = layers.Dense(num_classes, activation='softmax')(x)model = Model(inputs, x)return model# 创建ResNet模型
model = resnet(input_shape=(224, 224, 3), num_classes=1000)# 打印模型概要
model.summary()

在这里插入图片描述

感谢阅读,觉得有用的话就订阅下《深度学习》专栏吧,有错误也欢迎指出

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

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

相关文章

阿里巴巴虚拟试衣间:在模特身上尝试任何服装 | 开源日报 No.122

HumanAIGC/OutfitAnyone Stars: 1.8k License: NOASSERTION Outfit Anyone 由阿里巴巴集团的智能计算研究院开发。它提供了超高质量的虚拟试衣功能,用户可以在模特身上尝试任何服装,并且保证安全和隐私。主要功能包括: 提供超高质量的虚拟试…

SpringBoot3-基础特性

文章目录 自定义 banner自定义 SpringApplicationFluentBuilder APIProfiles指定环境环境激活环境包含Profile 分组Profile 配置文件 外部化配置配置优先级 外部配置导入配置属性占位符 单元测试-JUnit5测试组件测试注解断言嵌套测试参数化测试 自定义 banner banner 就是启动…

交通流预测 | Matlab基于KNN-BiLSTM的交通流预测(对比SVR、LSTM、GRU、KNN-LSTM)

目录 预测效果基本介绍程序设计参考资料 预测效果 基本介绍 交通流预测 | Matlab基于KNN-BiLSTM的交通流预测(对比SVR、LSTM、GRU、KNN-LSTM) 程序设计 完整程序和数据获取方式:私信博主回复Matlab基于KNN-BiLSTM的交通流预测(对…

(JAVA)-线程中的通信(生产者消费者模型)

在Java线程通信中,等待通知机制是最传统的方式,就是在一个线程进行了规定操作后,该线程就进入等待状态(wait), 等待其它线程执行完它们的指定代码过后,再将之前等待的线程唤醒(notif…

【Spring Security】分布式鉴权的使用

🎉🎉欢迎来到我的CSDN主页!🎉🎉 🏅我是Java方文山,一个在CSDN分享笔记的博主。📚📚 🌟推荐给大家我的专栏《Spring Security》。🎯🎯 …

Netty RPC 实现(二)

Netty RPC 实现 概念 RPC,即 Remote Procedure Call(远程过程调用),调用远程计算机上的服务,就像调用本地服务一样。RPC 可以很好的解耦系统,如 WebService 就是一种基于 Http 协议的 RPC。这个 RPC 整体…

计算机网络——网络层(四)

前言: 前面我们已经对物理层和数据链路层有了一个简单的认识与了解,现在我们需要对数据链路层再往上的一个层,网络层进行一个简单的学习与认识,网络层有着极其重要的作用,让我们对网络层进行一个简单的认识与学习吧 目…

dotnet 的跨平台 UI 框架:WPF 的精神继承 | 开源日报 No.123

AvaloniaUI/Avalonia Stars: 20.7k License: MIT Avalonia 是 dotnet 的跨平台 UI 框架,提供灵活的样式系统,并支持 Windows、macOS、Linux、iOS、Android 和 WebAssembly 等多种平台。它被许多人认为是 WPF 的精神继承者,为 XAML 开发人员创…

幺模矩阵-线性规划的整数解特性

百度百科:幺模矩阵 在线性规划问题中,如果A为幺模矩阵,那么该问题具有最优整数解特性。也就是说使用单纯形法进行求解,得到的解即为整数解。无需再特定使用整数规划方法。 m i n c T x s . t . { A x ≥ b x ≥ 0 \begin{align*} min \quad…

Flink面试题与详解

Flink面试题目合集 从牛客网上找到的一些面试题,如果还有其他的,欢迎大家补充。 1、能否详细描述下Apache Flink的架构组件和其工作原理?请介绍一下Flink on YARN部署模式的工作原理。 官网图: 由两个部分组成,JM&am…

@z-utils组 重构和自动化实现

highlight: monokai theme: github 包简介 z-utils组 是一个可以在vue/react/pure js 中使用的工具包,它包含三个子类,分别为 z-utils/base, z-utils/react, z-utils/vue 三个分别在不同区域使用。 他是原 zzy-javascript-devtools 的重构版本&#xf…

十八、本地配置Hive

1、配置MYSQL mysql> alter user rootlocalhost identified by Yang3135989009; Query OK, 0 rows affected (0.00 sec)mysql> grant all on *.* to root%; Query OK, 0 rows affected (0.00 sec)mysql> flush privileges; Query OK, 0 rows affected (0.01 sec)2、…