Tensorflow2.0之深度残差网络resnet18实现

TensorFlow2.0基本操作(七)-利用ResNet18跑Cifar100 0插入语 本人显卡1050 2G性能不足,因此将resnet18([2,2,2,2])改为了resnet10([1,1,1,1]),并且在cirfar100数据集为50000的情况下,将batchsiz设置为了8.显卡配置过关的同学请将本程序中的这两块改回去。 解决方法:使用Google的Colab,本人将在下一篇博客中介绍利用Colab跑tf 1主程序 import tensorflow as ... 阅读详情

Tensorflow2.0之深度残差网络resnet18实战

深度残差网络

AlexNet、VGG、GoogLeNet 等网络模型的出现将神经网络的发展带入了几十层的阶段,研究人员发现网络的层数越深,越有可能获得更好的泛化能力。但是当模型加深以后,网络变得越来越难训练,这主要是由于梯度弥散和梯度爆炸现象造成的。在较深层数的神经网络中,梯度信息由网络的末层逐层传向网络的首层时,传递的过程中会出现梯度接近于0 或梯度值非常大的现象。网络层数越深,这种现象可能会越严重。

那么怎么解决深层神经网络的梯度弥散和梯度爆炸现象呢?一个很自然的想法是,既然浅层神经网络不容易出现这些梯度现象,那么可以尝试给深层神经网络添加一种回退到浅层神经网络的机制。当深层神经网络可以轻松地回退到浅层神经网络时,深层神经网络可以获得与浅层神经网络相当的模型性能,而不至于更糟糕。

通过在输入和输出之间添加一条直接连接的Skip Connection 可以让神经网络具有回退的能力。以VGG13 深度神经网络为例,假设观察到VGG13 模型出现梯度弥散现象,而10 层的网络模型并没有观测到梯度弥散现象,那么可以考虑在最后的两个卷积层添加SkipConnection,通过这种方式,网络模型可以自动选择是否经由这两个卷积层完成特征变换,还是直接跳过这两个卷积层而选择Skip Connection,亦或结合两个卷积层和Skip Connection 的输出。

ResNet原理

ResNet 通过在卷积层的输入和输出之间添加Skip Connection 实现层数回退机制,如下图所示,输入𝒙通过两个卷积层,得到特征变换后的输出ℱ(𝒙),与输入𝒙进行对应元素的相加运算,得到最终输出ℋ(𝒙):ℋ(𝒙) = 𝒙 + ℱ(𝒙)
在这里插入图片描述

ResBlock 实现

深度残差网络并没有增加新的网络层类型,只是通过在输入和输出之间添加一条SkipConnection,因此并没有针对ResNet 的底层实现。在TensorFlow 中通过调用普通卷积层即可实现残差模块。
首先创建一个新类,在初始化阶段创建残差块中需要的卷积层、激活函数层等,首先新建ℱ(𝑥)卷积层,代码如下:

class BasicBlock(layers.Layer):
	# 残差模块类
	def __init__(self, filter_num, stride=1):
	super(BasicBlock, self).__init__()
	# f(x)包含了2 个普通卷积层,创建卷积层1
	self.conv1 = layers.Conv2D(filter_num, (3, 3), strides=stride, paddi
	ng='same')
	self.bn1 = layers.BatchNormalization()
	self.relu = layers.Activation('relu')
	# 创建卷积层2
	self.conv2 = layers.Conv2D(filter_num, (3, 3), strides=1, padding='s
	ame')
	self.bn2 = layers.BatchNormalization()

当ℱ(𝒙)的形状与𝒙不同时,无法直接相加,我们需要新建identity(𝒙)卷积层,来完成𝒙的形状转换。紧跟上面代码,实现如下:

	if stride != 1: # 插入identity 层
	self.downsample = Sequential()
	self.downsample.add(layers.Conv2D(filter_num, (1, 1), strides=st
	ride))
	else: # 否则,直接连接
	self.downsample = lambda x:x

在前向传播时,只需要将ℱ(𝒙)与identity(𝒙)相加,并添加ReLU 激活函数即可。前向计算函数代码如下:

	def call(self, inputs, training=None):
		# 前向传播函数
		out = self.conv1(inputs) # 通过第一个卷积层
		out = self.bn1(out)
		out = self.relu(out)
		out = self.conv2(out) # 通过第二个卷积层
		out = self.bn2(out)
		# 输入通过identity()转换
		identity = self.downsample(inputs)
		# f(x)+x 运算
		output = layers.add([out, identity])
		# 再通过激活函数并返回
		output = tf.nn.relu(output)
		return output

DenseNet

Skip Connection 的思想在ResNet 上面获得了巨大的成功,研究人员开始尝试不同的Skip Connection 方案,其中比较流行的就是DenseNet [11]。DenseNet 将前面所有层的特征图信息通过Skip Connection 与当前层输出进行聚合,与ResNet 的对应位置相加方式不同,DenseNet 采用在通道轴𝑐维度进行拼接操作,聚合特征信息
如下图 所示,输入𝑿 通过H1卷积层得到输出𝑿1,𝑿1与𝑿 在通道轴上进行拼接,得到聚合后的特征张量,送入H2卷积层,得到输出𝑿2,同样的方法,𝑿2与前面所有层的特征信息 𝑿1与𝑿 进行聚合,再送入下一层。如此循环,直至最后一层的输出𝑿4和前面所有层的特征信息:{𝑿𝑖}𝑖= 1 2 3进行聚合得到模块的最终输出。这样一种基于SkipConnection稠密连接的模块叫做Dense Block。

在这里插入图片描述
DenseNet 通过堆叠多个Dense Block 构成复杂的深层神经网络
在这里插入图片描述
比较了不同版本的DenseNet 的性能、DenseNet 与ResNet 的性能比较,以及DenseNet 与ResNet的训练曲线
在这里插入图片描述

ResNet18实战

网络的搭建

我们将实现18 层的深度残差网络ResNet18,并在CIFAR10 图片数据集上训练与测试。并将与13 层的普通神经网络VGG13 进行简单的性能比较。
标准的 ResNet18 接受输

tensorflow2.0 resnet18 CIFAR-10图像分类 基于ResNet18的CIFAR-10图像分类CIFAR-10数据分类CIFAR-10数据简介ResNet18网络ResNert18实验结果 CIFAR-10数据分类 CIFAR-10数据简介   Cifar-10 数据集是由Hinton教授的学生Alex Krizhevsky、Ilya Sutskever收集的一个用于普适物体识别的计算机视觉数据集,它包含 60000 张 32 * 32 的 RGB 彩色图片,总共 10 个分类,每一类包含6000张图片。其中,包括 50000 张用于训练集,10 阅读详情

相关推荐

ResNet18的基本原理及TensorFlow 2.0实现

注:阅读本博客之前,你需要先掌握:全连接神经网络,卷积神经网络的基本原理。 背景介绍 随着LeNet-5,AlexNet,VGG等神经网络结构的出现,卷积神经网络逐渐从单纯的只拥有卷积操作和下采样的神经网络发展为具有max pooling、dropout以及非线性函数的神经网络。在网络结构变得不断复杂的同时,人们发现,神经网络的效率并没有预期得到提升,反而容易出现梯度消失等情况,因而导致loss难...

Peaceful Tree 的博客 5145

深度残差网络(ResNet)详解与实现(tensorflow2

batch_normalization (bool): 是否使用批归一化conv_first (bool): conv-bn-active(True) or bn-active-conv (False)层堆叠次序Returns:x (tensor): 输出“”"conv = keras.layers.Conv2D(num_filters,kernel_size=kernel_size,strides=strides,padding=‘same’,kernel_initializer=‘he_normal’,

2401_84009215的博客 602

TF2.0深度学习实战(七):手撕深度残差网络ResNet

手把手带你搭建网络模型,实现图像分类与目标检测。大神勿扰~

不积跬步,无以至千里! 1万+

TensorFlow2迁移学习实战(九):搭建残差网络ResNet-101,实现对花的精准分类

快速训练残差网络ResNet-101,完成图像分类与预测,精度高达98%!

不积跬步,无以至千里! 1万+

TensorFlow2.0_ResNet:使用TensorFlow-2.0的ResNet(ResNet18,ResNet34,ResNet50,ResNet101,ResNet152)实现

TensorFlow2.0_ResNet 使用TensorFlow-2.0的ResNet( ResNet18,ResNet34,ResNet50,ResNet101,ResNet152 )实现 有关更多的CNN,请参见 。 火车 要求: Python> = 3.6 Tensorflow == 2.0.0 要在自己的数据集上训练ResNet,可以将数据集放在原始数据集文件夹下,目录应如下所示: |——original dataset |——class_name_0 |——class_name_1 |——class_name_2 |——class_name_3 运行脚本split_dataset.py将原始数据集拆分为训练集,有效集和测试集。 更改config.py中的相应参数。 运行train.py开始培训。 评估 运行valuate.py评估模型在测

S7-1200 数据日志

数据日志文件按照标准 CSV 格式存储在 S7-1200 CPU 装载存储器或 S7-1200 SIMATIC 存储卡中。分别可通过 PLC Web 服务器或将数据文件传送到 PC 进行管理、查看。 一、测试目的: 下面以数据日志文件存储在 S7-1200 CPU 装载存储器中,使用PLC Web 服务器进行管理为例,实现下述功能: (1)执行“DataLogging”指令将产品型号“Type”,长度“Length”,宽度“Width”三个变量值写入到数据日志文件; (2)当写入的条数达到设定的3条

qq_43029096的博客 2542

利用HipSTR从二代测序数据中精准解析短串联重复序列(STR)的遗传多态性

本文详细介绍了如何利用HipSTR工具从二代测序(NGS)数据中精准解析短串联重复序列(STR)的遗传多态性。通过三步走策略,HipSTR能够高效识别STR区域、估算重复次数并判定基因型,适用于法医鉴定、疾病研究和细胞系鉴定等多个领域。文章还提供了实战操作指南和常见问题解决方案,帮助研究者充分利用NGS数据开展STR分析。

weixin_28702105的博客 483

L3自动驾驶时代,域控制器核心解析(第一篇:架构演进与五域基础)

本文作为L3域控制器系列的第一篇,核心梳理了3个关键内容:L3时代为什么必须用域控制器:解决分布式ECU的协同、算力、迭代难题;域控制器的演进路线:从分布式ECU→域集中式→中央计算平台;博世五域架构的核心解析:五大域的定位、功能与典型方案。后续将持续更新系列文章,重点覆盖:第二篇:L3对域控制器的关键技术要求(传感器、算力、线控、软件、通信);第三篇:域控制器全产业链拆解(上游芯片、中游器件、下游总成);第四篇:域控制器的产业机遇与国产替代进展。

getusushu的博客 549

ue 打包linux程序 在windows系统 2026

ue 打包linux程序 在windows系统 2026

jacke121的专栏 372

Open-AutoGLM 实战:手把手教你用 AI 操作手机「喂饭教程」

Open-AutoGLM 是一个由智谱AI开源的手机操作智能体框架,由手机端智能助手框架Phone Agent和9B大小的模型AutoGLM-Phone-9B组成,借助ADB自动执行点击、滑动、输入等操作——用户只需用自然语言描述任务,系统便能自动规划并完成整个操作流程。

blues_C的博客 1267

AI测试干货:Claude Code Skill 从入门到精通

本文介绍了Claude Code Skill功能如何解决AI重复工作问题。传统提示词方式需要人工复制粘贴,而Skill功能通过建立AI工作记忆库实现智能触发和分层加载。Skill包含工作指令、文档和资源,能自动执行任务。文章以API测试用例生成为例,展示了Skill的创建流程和结构化设计,包括测试框架、覆盖场景和输出格式,显著提升测试工程师的工作效率。

blues_C的博客 2444

YOLO训练/写作脚本目录一览 | 涉及标签格式转换、数据扩充、热力图、感受野、精度曲线、数量统计等近百个脚本文件

在大家购买专栏后,便可获得全部的脚本文件。在获取到文件后,只需按照将程序放在个人项目中即可一键运行。

Limiiiing的博客 2377

腾讯滑块验证码防水墙 tdc.js 补环境实录

腾讯滑块验证码破解研究摘要 本文记录了破解腾讯防水墙滑块验证码(tdc.js)的全过程。研究重点包括: 流程分析:通过抓包分析验证码完整链路,识别出关键参数collect和eks需从tdc.js虚拟机获取 环境模拟:采用渐进式补环境方法,针对字节码虚拟机特性构建完整的window对象,包括navigator、screen、canvas等API的精确模拟 核心破解:成功调用TDC.getData()和TDC.getInfo()获取关键参数,解决POW计算和滑块缺口识别问题 优化调整:针对errorCode 5

码王吴彦祖的博客 234

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

上一篇: Tensorflow2.0之BatchNorm层
下一篇: Mqtt.js 文档
AndSonder
博客等级 码龄7年 364粉丝 154原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值