复现 DenseNet (Keras)

2024-01-28 13:50
文章标签 复现 keras densenet

本文主要是介绍复现 DenseNet (Keras),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 前言
  • 一、什么是DenseNet?
  • 二、keras 复现(完整版)
    • 1.Conv Block
    • 2.Dense Block
    • 3.Transition Block
  • 三、Keras 复现(简洁版)
  • 总结


前言

据说DenseNet 是优于ResNet的网络结构,有性能优越的特点并且实现思路很简单。但是特征层的重用会导致模型需要的显存比较大,计算速度会相对比较慢。但效果确实不错。

表面上好像是跨连接,实际上是concatenate 特征图。
注意:完整版代码参照官方书写,理解起来比较困难,建议大家参照简洁版,体会DenseNet 的思想和实现方式,用于修改自己的网络

一、什么是DenseNet?

先来看一张图

上图描述的就是DneseBlock的计算过程,它并不是像ResNet 一样 对卷积计算的结果进行Add,而是利用每次计算的特征图进行堆叠。对于一般的卷积神经网络。计算规则如公式所示:
对于DenseNet 而言:
也就是对特征层的重用。

了解到这些之后,相信聪明的小伙伴已经意识到这个一个问题。想如此堆叠特征层必然会引来特征层通道数过多的问题,同时特征层的大小要和输入时的一致,这样势必会倒是网络的参数过多。于是作者引入了transition_block,如下图红色方框中所示:
在这里插入图片描述

transition_block 包含一个1x1的卷积,用来调整通道数,和一个 2x2 的池化来缩小特征层的大小。这样每个Dense Block中进行计算时 特征保持不变,直到进入下一个Dense Block。 这就是Dense Block的实现思路了。

二、keras 复现(完整版)

1.Conv Block

该部分是用于Dense Block 中进行卷积运算的块。每个参数的含义 已经写在代码的注释中。
代码如下(示例):

def conv_block(x,stage,branch,nb_filter,dropout_rate = None):#  参数#     x: input tensor  #输入张量#     stage: index for dense block  #第几个dense_block #     branch: layer index within each dense block  #dense_block 中各层的索引#     nb_filter: number of filters  #卷积核的个数#     dropout_rate: dropout rate  #dropout 参数eps = 1.1e-5bn_axis =3conv_name_base = 'conv' + str(stage) + '_' + str(branch)relu_name_base = 'relu' + str(stage) + '_' + str(branch)inter_channels = 4 * nb_filter# 1x1 的卷积用于调整输入tensor 的通道数x = BatchNormalization(epsilon=eps,axis=bn_axis,name=conv_name_base+'_x1_bn')(x)x = Activation('relu',name=relu_name_base+'_x1')(x)x = Conv2D(inter_channels,1,1,name=conv_name_base+'_x1',use_bias=False)(x)print("x in conv: ",x.shape)if dropout_rate:x = Dropout(dropout_rate)(x)# 3x3 的卷积x = BatchNormalization(epsilon=eps,axis=bn_axis,name=conv_name_base+'_x2_bn')(x)x = Activation('relu',name=relu_name_base+'_x2')(x)x = ZeroPadding2D((1, 1), name=conv_name_base+'_x2_zeropadding')(x)x = Conv2D(nb_filter, 3, 1, name=conv_name_base+'_x2', use_bias=False)(x)print("x in conv2: ",x.shape)if dropout_rate:x = Dropout(dropout_rate)(x)return x

2.Dense Block

通过定义好的conv_block 去声明 Dense Block。

def dense_block(x, stage, nb_layers, nb_filter, growth_rate, dropout_rate=None,grow_nb_filters=True):#  Build a dense_block where the output of each conv_block is fed to subsequent ones#     # Arguments#         x: input tensor  #         stage: index for dense block#         nb_layers: the number of layers of conv_block to append to the model. 添加卷积块的个数#         nb_filter: number of filters  卷积核的个数#         growth_rate: growth rate  增长率#         dropout_rate: dropout rate  dropout#         grow_nb_filters: flag to decide to allow number of filters to grow 是否允许卷积核的个数变多concat_feat = xfor i  in range(nb_layers):branch = i + 1x = conv_block(concat_feat,stage,branch,growth_rate,dropout_rate)concat_feat = layers.Concatenate(axis=3,name='concat_'+str(stage)+'_'+str(branch))([concat_feat,x])

这篇关于复现 DenseNet (Keras)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/653806

相关文章

Detectorn2预训练模型复现:数据准备、训练命令、日志分析与输出目录

Detectorn2预训练模型复现:数据准备、训练命令、日志分析与输出目录 在深度学习项目中,目标检测是一项重要的任务。本文将详细介绍如何使用Detectron2进行目标检测模型的复现训练,涵盖训练数据准备、训练命令、训练日志分析、训练指标以及训练输出目录的各个文件及其作用。特别地,我们将演示在训练过程中出现中断后,如何使用 resume 功能继续训练,并将我们复现的模型与Model Zoo中的

UMI复现代码运行逻辑全流程(一)——eval_real.py(尚在更新)

一、文件夹功能解析 全文件夹如下 其中,核心文件作用为: diffusion_policy:扩散策略核心文件夹,包含了众多模型及基础库 example:标定及配置文件 scripts/scripts_real:测试脚本文件,区别在于前者倾向于单体运行,后者为整体运行 scripts_slam_pipeline:orb_slam3运行全部文件 umi:核心交互文件夹,作用在于构建真

文章解读与仿真程序复现思路——电力自动化设备EI\CSCD\北大核心《考虑燃料电池和电解槽虚拟惯量支撑的电力系统优化调度方法》

本专栏栏目提供文章与程序复现思路,具体已有的论文与论文源程序可翻阅本博主免费的专栏栏目《论文与完整程序》 论文与完整源程序_电网论文源程序的博客-CSDN博客https://blog.csdn.net/liang674027206/category_12531414.html 电网论文源程序-CSDN博客电网论文源程序擅长文章解读,论文与完整源程序,等方面的知识,电网论文源程序关注python

【vulhub】thinkphp5 2-rce 5.0.23-rce 5-rce 漏洞复现

2-rec 1.启动环境  cd /.../vulhub/thinkphp/2-rce # cd进入2-rce靶场文件环境下docker-compose up -d # docker-compose启动靶场docker ps -a # 查看开启的靶场信息 2.访问192.168.146.136:8080网页 3.构造payload http

【漏洞复现】赛蓝企业管理系统 GetJSFile 任意文件读取漏洞

免责声明:         本文内容旨在提供有关特定漏洞或安全漏洞的信息,以帮助用户更好地了解可能存在的风险。公布此类信息的目的在于促进网络安全意识和技术进步,并非出于任何恶意目的。阅读者应该明白,在利用本文提到的漏洞信息或进行相关测试时,可能会违反某些法律法规或服务协议。同时,未经授权地访问系统、网络或应用程序可能导致法律责任或其他严重后果。作者不对读者基于本文内容而产生的任何行为或后果承担

深度学习每周学习总结N9:transformer复现

🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍖 原作者:K同学啊 | 接辅导、项目定制 目录 多头注意力机制前馈传播位置编码编码层解码层Transformer模型构建使用示例 本文为TR3学习打卡,为了保证记录顺序我这里写为N9 总结: 之前有学习过文本预处理的环节,对文本处理的主要方式有以下三种: 1:词袋模型(one-hot编码) 2:TF-I

【达梦数据库】误删数据库目录问题复现解决方式

目录 1、环境搭建1.1、查询数据库版本1.2、创建表1.3、插入数据1.4、查询数据 2、故障重演2.1、服务器内直接删除整个库文件2.2、查询数据:数据可查2.3、查看进程:进程存在2.4、查看proc进程文件:deleted 3、数据恢复3.1、逻辑导出导入-(数据丢失,废弃)3.1.1、全库导出3.1.2、重新初始化库3.1.3、全库导入3.1.4、查询数据:数据丢失

【漏洞复现】锐捷 校园网自助服务系统 login_judge.jsf 任意文件读取漏洞

免责声明:         本文内容旨在提供有关特定漏洞或安全漏洞的信息,以帮助用户更好地了解可能存在的风险。公布此类信息的目的在于促进网络安全意识和技术进步,并非出于任何恶意目的。阅读者应该明白,在利用本文提到的漏洞信息或进行相关测试时,可能会违反某些法律法规或服务协议。同时,未经授权地访问系统、网络或应用程序可能导致法律责任或其他严重后果。作者不对读者基于本文内容而产生的任何行为或后果承担

Kaggle刷比赛的利器,LR,LGBM,XGBoost,Keras

刷比赛利器,感谢分享的人。 摘要 最近打各种比赛,在这里分享一些General Model,稍微改改就能用的 环境: python 3.5.2 XGBoost调参大全: http://blog.csdn.net/han_xiaoyang/article/details/52665396 XGBoost 官方API: http://xgboost.readthedocs.io/en

深度学习 之 keras

注意使用keras 首先压迫安装theano 或者tensorflow,keras默认使用tensorflow   首先创建一个moel from keras.models import Sequentialmodel = Sequential()   然后添加神经层及激活函数 from keras.layers import Dense, Activationmodel.ad