【DeepLearning-7】 CNN 和Transformer的混合神经网络结构

构造函数__init__

def __init__(self, channel, dim, depth=2, kernel_size=3, patch_size=(2, 2), mlp_dim=int(64*2), dropout=0.):
  • 初始化函数定义了网络的主要结构和参数。
  • channel: 输入特征的通道数。
  • dim: Transformer部分的特征维度。
  • depth: Transformer的层数。
  • kernel_size: 卷积层的核大小。
  • patch_size: 将图像分割为patches的尺寸。
  • mlp_dim: Transformer中前馈网络的维度。
  • dropout: Dropout比率,用于正则化。

网络层的定义

self.mv01 = IRBlock(channel, channel)
self.conv1 = conv_nxn_bn(channel, channel, kernel_size)
self.conv3 = conv_1x1_bn(dim, channel)
self.conv2 = conv_1x1_bn(channel, dim)
self.transformer = UserDefined(dim, depth, 4, 8, mlp_dim, dropout)
self.conv4 = conv_nxn_bn(2 * channel, channel, kernel_size)
  • IRBlockconv_nxn_bn, conv_1x1_bn 用于特征提取和维度变换。
  • UserDefined 是之前提到的基于Transformer的结构,用于处理序列数据。
  • 这些层的组合利用了CNN的空间特征提取能力和Transformer的序列处理能力。

def conv_1x1_bn(inp, oup):

    return nn.Sequential(

        nn.Conv2d(inp, oup, 1, 1, 0, bias=False),

        nn.BatchNorm2d(oup),

        nn.SiLU()

    )

def conv_nxn_bn(inp, oup, kernal_size=3, stride=1):

    return nn.Sequential(

        nn.Conv2d(inp, oup, kernal_size, stride, 1, bias=False),

        nn.BatchNorm2d(oup),

        nn.SiLU()

    )

 

前向传播 forward

def forward(self, x):y = x.clone()x = self.conv1(x)x = self.conv2(x)z = x.clone()_, _, h, w = x.shapex = rearrange(x, 'b d (h ph) (w pw) -> b (ph pw) (h w) d', ph=self.ph, pw=self.pw)x = self.transformer(x)x = rearrange(x, 'b (ph pw) (h w) d -> b d (h ph) (w pw)', h=h//self.ph, w=w//self.pw, ph=self.ph, pw=self.pw)x = self.conv3(x)x = torch.cat((x, z), 1)x = self.conv4(x)x = x + yx = self.mv01(x)return x
  • forward方法定义了数据通过网络的流程。
  • 输入 x 首先经过几个卷积层进行特征提取和维度变换。
  • 输入被重组(rearrange),准备送入Transformer结构。
  • Transformer处理重组后的数据再被重组回原来的形状。
  • 经过进一步的卷积处理后,使用残差连接,并通过另一个 IRBlock

完整代码: 

class MobileViTBv3(nn.Module):def __init__(self, channel, dim, depth=2, kernel_size=3, patch_size=(2, 2), mlp_dim=int(64*2), dropout=0.):super().__init__()self.ph, self.pw = patch_sizeself.mv01 = IRBlock(channel, channel) self.conv1 = conv_nxn_bn(channel, channel, kernel_size)self.conv3 = conv_1x1_bn(dim, channel)self.conv2 = conv_1x1_bn(channel, dim)self.transformer = UserDefined(dim, depth, 4, 8, mlp_dim, dropout)self.conv4 = conv_nxn_bn(2 * channel, channel, kernel_size)def forward(self, x):y = x.clone()x = self.conv1(x)x = self.conv2(x)z = x.clone()_, _, h, w = x.shapex = rearrange(x, 'b d (h ph) (w pw) -> b (ph pw) (h w) d', ph=self.ph, pw=self.pw)x = self.transformer(x)x = rearrange(x, 'b (ph pw) (h w) d -> b d (h ph) (w pw)', h=h//self.ph, w=w//self.pw, ph=self.ph, pw=self.pw)x = self.conv3(x)x = torch.cat((x, z), 1)x = self.conv4(x)x = x + yx = self.mv01(x)return x

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

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

相关文章

ios和安卓虚拟定位

ios 下载好爱思助手 连接手机 电脑上打开爱思助手,打开工具箱,选择虚拟定位。 选择位置即可 重启可以恢复定位 安卓 fake gps。这个需要我们打开 google play 去下载。

2024-01-06-AI 大模型全栈工程师 - 大模型时代的 AI 产品新挑战

摘要 2024-01-06 周六 杭州 晴 课程内容 1. 上一代 AI 能做什么? 2. AI 的能力演进 3. LLMS 带来了哪些变化 4. LLMS 存在哪些问题 5. LLMS 落地的三个关键要素 6. LLMS 短期落地的方向-内容生成 7. LLMS 中期落地的方向-智能体 8. 从 LLMS 到可落地的应用 9. LL…

八种Flink任务监控告警方式

目录 一、Flink应用分析 1.1 Flink任务生命周期 1.2 Flink应用告警视角分析 二、监控告警方案说明 2.1 监控消息队中间件消费者偏移量 2.2 通过调度系统监控Flink任务运行状态 2.3 引入开源服的SDK工具实现 2.4 调用FlinkRestApi实现任务监控告警 2.5 定时去查询目标库…

【数据结构(C语言)】树、二叉树详解

目录 文章目录 前言 一、树的概念及结构 1.1 树的概念 1.2 树的相关概念 1.3 树的表示 1.4 树在实际中的运用 二、二叉树的概念及结构 2.1 二叉树的概念 2.2 二叉树的基本形态 ​编辑2.3 特殊的二叉树 2.4 二叉树的性质 2.5 二叉树的存储结构 三、二叉树的顺序结…

堆溢出:深入理解与防范

在计算机安全领域中,堆溢出是一种常见的安全漏洞,它涉及到程序中的内存分配和管理。本文将深入探讨堆溢出的概念、原因以及防范措施。 首先,我们需要了解什么是堆。在许多编程语言中,如C和C,堆是用于动态内存分配的区…

adb push 将电脑中的文件传输到安卓开发板

1. adb remount 重新挂载设备的文件系统,以便可以对设备进行读写操作,通常情况下,安卓开发板在连接到计算机后,设备的文件系统会被挂载为只读文件系统,重新挂载后变成可读可写权限 C:\Users\Administrator>adb re…

Dart 语言入门

引言 在学习Flutter之前&#xff0c;还是得先把基础打好&#xff0c;先来学习一下Dart的基础知识。 第一个dart import package:dart/dart.dart as dart;main(List<String> arguments) {print(Hello world: ${dart.calculate()}!); } 变量与常量 1.变量 Dart是一个强…

高等数学:积分

本文主要参考&#xff1a; 【建议收藏】同济七版《高等数学》精讲视频 | 期末考试 | 考研零基础 | 高数小白_哔哩哔哩_bilibili 4.1.1.1 定积分引例_哔哩哔哩_bilibili 仅供本人学习使用。 积分是一个在多个领域都广泛使用的概念&#xff0c;特别是在数学和物理学中。 以下是积…

深入了解c语言字符串 2

深入了解c语言字符串 2 一 使用 scanf进行字符串的输入&#xff1a;1.1输入单词&#xff08;不包含空格&#xff09;&#xff1a;1.2 输入带空格的整行文本&#xff1a;1.3 处理输入缓冲区&#xff1a;1.4 注意安全性&#xff1a; 二 使用 printf 字符串的输出&#xff1a;三 输…

春招秋招,在线测评到底难不难?

现在很多企业在春招的时候&#xff0c;都会有一个在线测评的环节&#xff0c;目的当然就是希望更加了解清楚毕业生的综合能力以及其他方面的素质&#xff0c;好让HR可以根据岗位筛选出能力达标的人才。所以&#xff0c;现在不少即将面对春招的大学毕业生&#xff0c;比较关心的…

sklearn缺失值处理:SimpleImputer模块 补全缺失值

文章目录 SimpleImputer参数详解参数含义常用方法sklearn.impute工具介绍SimpleImputer参数详解 class sklearn.impute.SimpleImputer(*, missing_values=nan, strategy=‘mean’, fi

uniapp中组件库Mask 遮罩层 的使用方法

目录 #平台差异说明 #基本使用 #嵌入内容 #遮罩样式 #API #Props #Events #Slot 创建一个遮罩层&#xff0c;用于强调特定的页面元素&#xff0c;并阻止用户对遮罩下层的内容进行操作&#xff0c;一般用于弹窗场景 #平台差异说明 AppH5微信小程序支付宝小程序百度小程…

Orika MapperFacade 对象属性复制在SpringBoot项目中的使用

文章目录 前言正文一、项目代码1.1 maven依赖1.2 核心配置文件1.3 时间工具类1.4 实体类1.5 转换对象的调用 二、MapperFacade API 前言 众所周知&#xff0c;在Java项目中经常会有用到各种对象属性复制的情况&#xff0c;以及从一个对象转换为另一个对象。 之前我们可能会使…

rust 泛型、多态

一&#xff0c;泛型 1&#xff0c;泛型函数 下面是一个手动实现vec翻转的例子&#xff1a; fn vector_reverse<T:Clone> (v:&Vec<T>)->Vec<T>{let mut ans Vec::new();let mut i v.len();loop {if i0{break;}i-1;ans.push(v[i].clone());}return…

没有外网Nginx如何配置如何开启https

判断是否支持open-ssl 在服务器执行如下命令 openssl version没有则安装open-ssl&#xff0c;由于服务器没有外网&#xff0c;可以离线安装openssl-3.0.1.tar.gz&#xff0c;我是在有网的服务器直接下载的&#xff0c;然后再上传到这台无网的服务器上 wget https://www.open…

C++内存管理与模板

C内存管理与模板 文章目录 C内存管理与模板前言&#xff1a;一.new和delete基本用法二.底层实现三.定位new四.模板4.1函数模板4.2调用选择4.3类模板4.4声明定义分离 前言&#xff1a; C的内存管理和C语言中动态内存分配是相似的&#xff0c;在这一篇我们会学到更符合面向对象的…

如何快速写出高效的软件测试用例

&#x1f345; 视频学习&#xff1a;文末有免费的配套视频可观看 &#x1f345; 点击文末小卡片&#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 前言 编写测试用例的目的就是确保测试过程全面高效、有据可查。但要编写出高效的测试用例&#…

【Django-ninja】django-ninja的hello world

django-ninja简介 Django Ninja是一个用于使用Django和Python 3.6类型提示构建API的Web框架。 主要特点&#xff1a; 易用性&#xff1a;旨在易于使用和直观。 高性能执行&#xff1a;由于Pydantic和异步支持&#xff0c;具有非常高的性能。 编码效率高&#xff1a;类型提…

鸿蒙harmony--TypeScript基础语法

把青春献给身后那座辉煌的都市&#xff0c;为了这个美梦我们付出着代价 目录 一&#xff0c;基础类型 二&#xff0c;数组 三&#xff0c;any 四&#xff0c;变量的类型注释 五&#xff0c;函数 5.1 参数类型注解 5.2 返回类型注解 5.3 匿名函数 六&#xff0c;对象类型 可选属…

APP攻防-资产收集篇反证书检验XP框架反代理VPN数据转发反模拟器

知识点 1、APP资产-抓包突破&反模拟器 2、APP资产-抓包突破&反证书检验 3、APP资产-抓包突破&反代理VPN 章节点&#xff1a; 1、APP资产-内在提取&外在抓包 2、APP逆向-反编译&删验证&重打包 3、APP安全-存储&服务&组件&注册等 专题点&…