当前位置: 首页 > news >正文

CV预测:快速使用DenseNet神经网络

AI预测相关目录

AI预测流程,包括ETL、算法策略、算法模型、模型评估、可视化等相关内容
最好有基础的python算法预测经验

  1. EEMD策略及踩坑
  2. VMD-CNN-LSTM时序预测
  3. 对双向LSTM等模型添加自注意力机制
  4. K折叠交叉验证
  5. optuna超参数优化框架
  6. 多任务学习-模型融合策略
  7. Transformer模型及Paddle实现
  8. 迁移学习在预测任务上的tensoflow2.0实现
  9. holt提取时序序列特征
  10. TCN时序预测及tf实现
  11. 注意力机制/多头注意力机制及其tensorflow实现
  12. 一文解析AI预测数据工程
  13. FITS:一个轻量级而又功能强大的时间序列分析模型
  14. DLinear:未来预测聚合历史信息的最简单网络
  15. LightGBM:更好更快地用于工业实践集成学习算法
  16. 面向多特征的AI预测指南
  17. 大模型时序预测初步调研【20240506】
  18. Time-LLM :超越了现有时间序列预测模型的学习器
  19. CV预测:快速使用LeNet-5卷积神经网络
  20. CV预测:快速使用ResNet深度残差神经网络并创建自己的训练集
  21. CV预测:快速使用DenseNet神经网络

文章目录

  • AI预测相关目录
  • DenseNet简介
  • 代码


DenseNet简介

DenseNet在ResNet基础上做出了改进,其主要优势点如下:

  • 1.提出了稠密连接的思想。将一个稠密块中的所有层直接相互连接,确保了网络中各层之间最大的信息流。同时减轻了梯度弥散的问题,增强了特征传播,鼓励了特征重用。
  • 2.采用了过渡层进行下采样。这一点和ResNet有明显的区别。
  • 3.提出了增长率k,指的是每个瓶颈层H,产生的特征图个数。相对较小的增长率(比如K=12)就足以在测试的数据集上获得最先进的结果。
  • 4.每个稠密块之后,使用压缩因子0对特征图通道数进行压缩。

在这里插入图片描述
基本设计如上图所示:
传统的卷积神经网络:将第1- 1层的输出作为第1层的输入,用公式可表示为: x= H(x1-1)
深度残差网络ResNet:ResNets添加了一个捷径连接,该连接使用恒等映射绕过了非线性变换H用公式可表示为:x= H(x-1)+ x1-1
稠密卷积网络DenseNet:为了进一步改善各层之间的信息流,提出了一种不同的连接模式–稠密连接:引入了从任何层到所有后续层的直接连接。该网络以前馈方式将每一层连接到其他每一层。对于每一层,所有先前层的特征图都用作输入,而其自身的特征图则用作所有后续层的输入。这种连接方式确保了网络中各层之间最大的信息流。

稠密连接的优点:
1.减轻了梯度弥散,增强了特征传播,鼓励了特征重用
2.在整个网络中改善了信息流和梯度,使得模型更易于训练
3.稠密连接具有正则化效果,减少了训练集较小任务的过度拟合

代码

MODEL

import tensorflow as tf
from tensorflow.keras import layers# 瓶颈层,相当于每一个稠密块中若干个相同的H函数
class BottleNeck(layers.Layer):# growth_rate对应的是论文中的增长率k,指经过一个BottleNet输出的特征图的通道数;drop_rate指失活率。def __init__(self, growth_rate, drop_rate):super(BottleNeck, self).__init__()self.bn1 = layers.BatchNormalization()self.conv1 = layers.Conv2D(filters=4 * growth_rate,  # 使用1*1卷积核将通道数降维到4*kkernel_size=(1, 1),strides=1,padding="same")self.bn2 = layers.BatchNormalization()self.conv2 = layers.Conv2D(filters=growth_rate,  # 使用3*3卷积核,使得输出维度(通道数)为kkernel_size=(3, 3),strides=1,padding="same")self.dropout = layers.Dropout(rate=drop_rate)# 将网络层存入一个列表中self.listLayers = [self.bn1,layers.Activation("relu"),self.conv1,self.bn2,layers.Activation("relu"),self.conv2,self.dropout]def call(self, x):y = xfor layer in self.listLayers.layers:y = layer(y)# 每经过一个BottleNet,将输入和输出按通道连结。作用是:将前l层的输入连结起来,作为下一个BottleNet的输入。y = layers.concatenate([x, y], axis=-1)return y# 稠密块,由若干个相同的瓶颈层构成
class DenseBlock(layers.Layer):# num_layers表示该稠密块存在BottleNet的个数,也就是一个稠密块的层数Ldef __init__(self, num_layers, growth_rate, drop_rate=0.5):super(DenseBlock, self).__init__()self.num_layers = num_layersself.growth_rate = growth_rateself.drop_rate = drop_rateself.listLayers = []# 一个DenseBlock由多个相同的BottleNeck构成,我们将它们放入一个列表中。for _ in range(num_layers):self.listLayers.append(BottleNeck(growth_rate=self.growth_rate, drop_rate=self.drop_rate))def call(self, x):for layer in self.listLayers.layers:x = layer(x)return x# 过渡层
class TransitionLayer(layers.Layer):# out_channels代表输出通道数def __init__(self, out_channels):super(TransitionLayer, self).__init__()self.bn = layers.BatchNormalization()self.conv = layers.Conv2D(filters=out_channels,kernel_size=(1, 1),strides=1,padding="same")self.pool = layers.MaxPool2D(pool_size=(2, 2),   # 2倍下采样strides=2,padding="same")def call(self, inputs):x = self.bn(inputs)x = tf.keras.activations.relu(x)x = self.conv(x)x = self.pool(x)return x# DenseNet整体网络结构
class DenseNet(tf.keras.Model):# num_init_features:代表初始的通道数,即输入稠密块时的通道数# growth_rate:对应的是论文中的增长率k,指经过一个BottleNet输出的特征图的通道数# block_layers:每个稠密块中的BottleNet的个数# compression_rate:压缩因子,其值在(0,1]范围内# drop_rate:失活率def __init__(self, num_init_features, growth_rate, block_layers, compression_rate, drop_rate):super(DenseNet, self).__init__()# 第一层,7*7的卷积层,2倍下采样。self.conv = layers.Conv2D(filters=num_init_features,kernel_size=(7, 7),strides=2,padding="same")self.bn = layers.BatchNormalization()# 最大池化层,3*3卷积核,2倍下采样self.pool = layers.MaxPool2D(pool_size=(3, 3), strides=2, padding="same")# 稠密块 Dense Block(1)self.num_channels = num_init_featuresself.dense_block_1 = DenseBlock(num_layers=block_layers[0], growth_rate=growth_rate, drop_rate=drop_rate)# 该稠密块总的输出的通道数self.num_channels += growth_rate * block_layers[0]# 对特征图的通道数进行压缩self.num_channels = compression_rate * self.num_channels# 过渡层1,过渡层进行下采样self.transition_1 = TransitionLayer(out_channels=int(self.num_channels))# 稠密块 Dense Block(2)self.dense_block_2 = DenseBlock(num_layers=block_layers[1], growth_rate=growth_rate, drop_rate=drop_rate)self.num_channels += growth_rate * block_layers[1]self.num_channels = compression_rate * self.num_channels# 过渡层2,2倍下采样,输出:14*14self.transition_2 = TransitionLayer(out_channels=int(self.num_channels))# 稠密块 Dense Block(3)self.dense_block_3 = DenseBlock(num_layers=block_layers[2], growth_rate=growth_rate, drop_rate=drop_rate)self.num_channels += growth_rate * block_layers[2]self.num_channels = compression_rate * self.num_channels# 过渡层3,2倍下采样self.transition_3 = TransitionLayer(out_channels=int(self.num_channels))# 稠密块 Dense Block(4)self.dense_block_4 = DenseBlock(num_layers=block_layers[3], growth_rate=growth_rate, drop_rate=drop_rate)# 全局平均池化,输出size:1*1self.avgpool = layers.GlobalAveragePooling2D()# 全连接层,进行10分类self.fc = layers.Dense(units=10, activation=tf.keras.activations.softmax)def call(self, inputs):x = self.conv(inputs)x = self.bn(x)x = tf.keras.activations.relu(x)x = self.pool(x)x = self.dense_block_1(x)x = self.transition_1(x)x = self.dense_block_2(x)x = self.transition_2(x)x = self.dense_block_3(x)x = self.transition_3(x,)x = self.dense_block_4(x)x = self.avgpool(x)x = self.fc(x)return xdef densenet():return DenseNet(num_init_features=64, growth_rate=32, block_layers=[2,2,2,2], compression_rate=0.5, drop_rate=0.5)# return DenseNet(num_init_features=64, growth_rate=32, block_layers=[4, 4, 4, 4], compression_rate=0.5, drop_rate=0.5)
mynet=densenet()

TRAIN

import tensorflow as tf
from model import mynet
import matplotlib.pyplot as plt# 数据集准备
# (x_train, y_train), (x_test, y_test) = tf.keras.datasets.cifar10.load_data()
(x_train, y_train), (x_test, y_test) = tf.keras.datasets.fashion_mnist.load_data()
x_train = x_train.reshape((60000, 28, 28, 1)).astype('float32') / 255
x_test = x_test.reshape((10000, 28, 28, 1)).astype('float32') / 255mynet.compile(loss='sparse_categorical_crossentropy',optimizer=tf.keras.optimizers.SGD(),metrics=['accuracy'])history = mynet.fit(x_train, y_train,batch_size=64,epochs=5,validation_split=0.2)
# test_scores = mynet.evaluate(x_test, y_test, verbose=2)plt.plot(history.history['accuracy'])
plt.plot(history.history['val_accuracy'])
plt.legend(['training', 'validation'], loc='upper left')
plt.show()

相关文章:

CV预测:快速使用DenseNet神经网络

AI预测相关目录 AI预测流程,包括ETL、算法策略、算法模型、模型评估、可视化等相关内容 最好有基础的python算法预测经验 EEMD策略及踩坑VMD-CNN-LSTM时序预测对双向LSTM等模型添加自注意力机制K折叠交叉验证optuna超参数优化框架多任务学习-模型融合策略Transform…...

竞赛选题 python 机器视觉 车牌识别 - opencv 深度学习 机器学习

1 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 基于python 机器视觉 的车牌识别系统 🥇学长这里给一个题目综合评分(每项满分5分) 难度系数:3分工作量:3分创新点:3分 🧿 更多资…...

zerotier-one自建根服务器方法二

一、简介 zerotier-one免费账户有25设备的限制,如果自己的设备多了就需要付费。不过zerotier-one是开源软件,我们可以自己建立根服务器,不用付费速度还很快。 由于时间关系上一篇文章没有写完,今天继续。 二、准备工作 准备一…...

【论文通读】SeeClick: Harnessing GUI Grounding for Advanced Visual GUI Agents

SeeClick: Harnessing GUI Grounding for Advanced Visual GUI Agents 前言AbstractMotivationMethodGUI grounding for LVLMsData ConstructionTraining Details ScreenSpotExperimentsGUI Grounding on ScreenSpotVisual GUI Agent TasksMiniWobAITWMind2WebOther experiment…...

Ubuntu20.04离线安装Docker

1.下载3个docker离线安装包,下载网址: https://download.docker.com/linux/ubuntu/dists/xenial/pool/stable/amd64/ 2.把3个离线安装包拷贝到ubuntu本地执行以下命令 sudo dpkg -i containerd.io_1.4.6-1_amd64.deb sudo dpkg -i docker-ce-cli_20.1…...

AI大模型战争:通用与垂直,谁将领跑未来?

文章目录 📑引言一、通用大模型:广泛适用,实力不容小觑1.1 强大的泛化能力1.2 广泛的适用场景 二、垂直大模型:专注深度,精准解决问题2.1 深度专注,精准度高2.2 快速落地与普及 三、通用与垂直:…...

计算机网络之TCP的三次握手和四次挥手

一.有关TCP协议的几个概念 1.1TCP协议的基本概念: TCP协议是传输层的一个协议,它支持全双工通信,是主机对主机之间数据的可靠传输,是一个连接导向的协议。 1.2连接: 连接是通信双方的一个约定,它的目的是让…...

JupyterLab使用指南(八):更改JupterLab左侧默认打开目录

在JupyterLab中,默认打开路径通常是由其配置文件中的root_dir设置决定的。如果你没有特意设置这个配置项,JupyterLab可能会使用当前用户的主目录或者上一次关闭时的路径作为默认打开路径。 更改JupyterLab默认路径的操作在不同操作系统下大体相似&…...

Android SurfaceFlinger——HWC Adapter初始化(五)

上一篇文章对 HWC 硬件加载流程进行了分析,在加载完成后开始创建 HAL 实例时,首先需要对 hwc2_device_t 的适配器进行初始化,这里我们主要分析 HWC Adapter 的创建流程。 一、创建HWC Adapter 在创建 HAL 实例之前,我们先来看一下 HWC Adapter 的创建。 1、createHalWith…...

泛微开发修炼之旅--17基于Ecology短信平台,实现后端自定义二开短信发送方案及代码示例

文章链接:17基于Ecology短信平台,实现后端自定义二开短信发送方案及代码示例...

SpringMVC系列二: 请求方式介绍

RequestMapping 💞基本使用💞RequestMapping注解其它使用方式可以修饰类和方法可以指定请求方式可以指定params和headers支持简单表达式支持Ant 风格资源地址配合PathVariable 映射 URL 绑定的占位符注意事项和使用细节课后作业 上一讲, 我们学习的是Spr…...

大学湖北中医药大学法医学试题及答案,分享几个实用搜题和学习工具 #微信#学习方法#职场发展

今天分享拥有拍照搜题、文字搜题、语音搜题、多重搜题等搜题模式,可以快速查找问题解析,加深对题目答案的理解。 1.快练题 这是一个网站 找题的网站海量题库,在线搜题,快速刷题~为您提供百万优质题库,直接搜索题库名称,支持多种刷题模式:顺序练习、语…...

C# 关于通讯观察线程(1) -- 开启通讯线程

通讯观察线程是个有意思,又是非常实用的功能。 具体怎么实现呢,我们来看看主要过程的伪代码。对于高手这也许很简单,但是要用好也是需要实践到通讯的流程正确,同时应对好网络故障等。 先在合适的地方启动观察线程: …...

15.树形虚拟列表实现(支持10000+以上的数据)el-tree(1万+数据页面卡死)

1.问题使用el-tree渲染的树形结构&#xff0c;当数据超过一万条以上的时候页面卡死 2.解决方法&#xff1a; 使用vue-easy-tree来实现树形虚拟列表&#xff0c;注意&#xff1a;vue-easy-tree需要设置高度 3.代码如下 <template><div class"ve-tree" st…...

【服务器07】之【GitHub项目管理】及【Unity异步加载场景】

登录GitHub官网 GitHub: Let’s build from here GitHub 注册账号 登录账号 输入一个自定义名字&#xff0c;点击创建存储库就可以了 现在我们下载Fork Fork - a fast and friendly git client for Mac and Windows (git-fork.com) 免费的 下载完成之后点击File下的Clone …...

ansible提权之become_method与become_flags详解

目录 常见become_methodbecome_flagssu 常见选项总结sudo 常见选项总结pbrun 常见选项总结pfexec 常见选项总结doas 常见选项总结示例使用 sudo 的示例&#xff1a;使用 pbrun 的示例&#xff1a;使用 pfexec 的示例&#xff1a;使用 doas 的示例&#xff1a; 配置方式1. 配置文…...

elementui的el-dialog组件与el-tabs同时用导致浏览器卡死的原因解决

在el-dialog弹出框中&#xff0c;如果使用el-tabs&#xff0c;点击弹框的关闭按钮时&#xff0c;会导致弹出框无法关闭&#xff0c;且浏览器卡死。 解决方式&#xff08;一&#xff09;&#xff1a; 在el-talbs的面板中不放任何内容&#xff1a; <el-tab-pane label"…...

基于图扑 HT for Web 实现拓扑关系图

拓扑结构在计算机网络设计和通信领域中非常重要&#xff0c;因为它描述了网络中的设备&#xff08;即“点”&#xff09;如何相互连接&#xff08;即通过“线”&#xff09;。这种结构不仅涉及物理布局&#xff0c;即物理拓扑&#xff0c;还可以涉及逻辑或虚拟的连接方式&#…...

linux笔记10--编辑器之神VIM

文章目录 1. 简单介绍① 为什么叫vim② linux常见的编辑器③ 注意事项④ 其它 2. 操作模式的划分① 两种 -- 国际上普通模式(命令操作模式)插入模式 ② 三种 -- 国内普通模式如何进入与退出界面 插入模式如何进入与退出界面 命令模式如何进入与退出界面常见的命令模式 ③ 区别④…...

安全管理中心-集中管控(6点)

记忆内容&#xff1a; 应划分出特定的管理区域&#xff0c;对分布在网络中的安全设备或安全组件进行管控。&#xff08;三级新增&#xff09; 应能够建立一条安全的信息传输路径&#xff0c;对网络中的安全设备或安全组件进行管理。&#xff08;三级新增&#xff09; 应对网络…...

系统设计 --- MongoDB亿级数据查询优化策略

系统设计 --- MongoDB亿级数据查询分表策略 背景Solution --- 分表 背景 使用audit log实现Audi Trail功能 Audit Trail范围: 六个月数据量: 每秒5-7条audi log&#xff0c;共计7千万 – 1亿条数据需要实现全文检索按照时间倒序因为license问题&#xff0c;不能使用ELK只能使用…...

Qwen3-Embedding-0.6B深度解析:多语言语义检索的轻量级利器

第一章 引言&#xff1a;语义表示的新时代挑战与Qwen3的破局之路 1.1 文本嵌入的核心价值与技术演进 在人工智能领域&#xff0c;文本嵌入技术如同连接自然语言与机器理解的“神经突触”——它将人类语言转化为计算机可计算的语义向量&#xff0c;支撑着搜索引擎、推荐系统、…...

spring:实例工厂方法获取bean

spring处理使用静态工厂方法获取bean实例&#xff0c;也可以通过实例工厂方法获取bean实例。 实例工厂方法步骤如下&#xff1a; 定义实例工厂类&#xff08;Java代码&#xff09;&#xff0c;定义实例工厂&#xff08;xml&#xff09;&#xff0c;定义调用实例工厂&#xff…...

从零开始打造 OpenSTLinux 6.6 Yocto 系统(基于STM32CubeMX)(九)

设备树移植 和uboot设备树修改的内容同步到kernel将设备树stm32mp157d-stm32mp157daa1-mx.dts复制到内核源码目录下 源码修改及编译 修改arch/arm/boot/dts/st/Makefile&#xff0c;新增设备树编译 stm32mp157f-ev1-m4-examples.dtb \stm32mp157d-stm32mp157daa1-mx.dtb修改…...

IoT/HCIP实验-3/LiteOS操作系统内核实验(任务、内存、信号量、CMSIS..)

文章目录 概述HelloWorld 工程C/C配置编译器主配置Makefile脚本烧录器主配置运行结果程序调用栈 任务管理实验实验结果osal 系统适配层osal_task_create 其他实验实验源码内存管理实验互斥锁实验信号量实验 CMISIS接口实验还是得JlINKCMSIS 简介LiteOS->CMSIS任务间消息交互…...

html-<abbr> 缩写或首字母缩略词

定义与作用 <abbr> 标签用于表示缩写或首字母缩略词&#xff0c;它可以帮助用户更好地理解缩写的含义&#xff0c;尤其是对于那些不熟悉该缩写的用户。 title 属性的内容提供了缩写的详细说明。当用户将鼠标悬停在缩写上时&#xff0c;会显示一个提示框。 示例&#x…...

Web后端基础(基础知识)

BS架构&#xff1a;Browser/Server&#xff0c;浏览器/服务器架构模式。客户端只需要浏览器&#xff0c;应用程序的逻辑和数据都存储在服务端。 优点&#xff1a;维护方便缺点&#xff1a;体验一般 CS架构&#xff1a;Client/Server&#xff0c;客户端/服务器架构模式。需要单独…...

Golang——7、包与接口详解

包与接口详解 1、Golang包详解1.1、Golang中包的定义和介绍1.2、Golang包管理工具go mod1.3、Golang中自定义包1.4、Golang中使用第三包1.5、init函数 2、接口详解2.1、接口的定义2.2、空接口2.3、类型断言2.4、结构体值接收者和指针接收者实现接口的区别2.5、一个结构体实现多…...

Scrapy-Redis分布式爬虫架构的可扩展性与容错性增强:基于微服务与容器化的解决方案

在大数据时代&#xff0c;海量数据的采集与处理成为企业和研究机构获取信息的关键环节。Scrapy-Redis作为一种经典的分布式爬虫架构&#xff0c;在处理大规模数据抓取任务时展现出强大的能力。然而&#xff0c;随着业务规模的不断扩大和数据抓取需求的日益复杂&#xff0c;传统…...

Python常用模块:time、os、shutil与flask初探

一、Flask初探 & PyCharm终端配置 目的: 快速搭建小型Web服务器以提供数据。 工具: 第三方Web框架 Flask (需 pip install flask 安装)。 安装 Flask: 建议: 使用 PyCharm 内置的 Terminal (模拟命令行) 进行安装,避免频繁切换。 PyCharm Terminal 配置建议: 打开 Py…...