图像分类——ResNet

news2024/12/24 2:53:34

目录

  • 残差块
  • ResNet模型
  • 手写数字识别

残差块

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
左图残差块实现如下
在这里插入图片描述

import tensorflow as tf
from tensorflow.keras import layers,activations
#残差块
class Residul(tf.keras.Model):
    def __init__(self,num_channels,use_1x1conv=False,strides=1):
        super(Residul,self).__init__() #调用基类init方法
        self.conv1=layers.Conv2D(num_channels,kernel_size=3,padding='same',strides=strides)
        self.conv2=layers.Conv2D(num_channels,kernel_size=3,strides=strides)
        if use_1x1conv:
            self.conv3=layers.Conv2D(num_channels,kernel_size=1,strides=strides)
        else:
            self.conv3=None
        self.bn1=layers.BatchNormalization()
        self.bn2=layers.BatchNormalization()
            
    def call(self,x):
        y=activations.relu(self.bn1(self.conv1(x)))
        y=self.bn2(self.conv2(y))
        if self.conv3:
            x=self.conv3(x)
        outputs=activations.relu(y+x)
        return outputs

ResNet模型

在这里插入图片描述

#残差模块
class ResnetBlock(tf.keras.layers.Layer):
    def __init__(self,num_channels,num_res,first_block=False):
        super(ResnetBlock,self).__init__()
        #存储残差块
        self.listLayers=[]
        #遍历残差数目生成模块
        for i in range(num_res):
            #如果是第一个残差块而且不是第一个模块时
            if i ==0 and not first_block:
                self.listLayers.append(Residul(num_channels,use_1x1conv=True,strides=2))
            else:
                self.listLayers.append(Residul(num_channels))
        
    def call(self,x):
        for layers in self.listLayers:
            x=layers(x)
        return x
#构建resNet网络
class ResNet(tf.keras.Model):
    def __init__(self,num_blocks):
        super(ResNet,self).__init__()
        self.conv=layers.Conv2D(64,kernel_size=7,strides=2,padding='same')
        self.bn=layers.BatchNormalization()
        self.relu=layers.Activation('relu')
        self.mp=layers.MaxPool2D(pool_size=3,strides=2,padding='same')
        #残差模块
        self.res_block1=ResnetBlock(64,num_blocks[0],first_block=True)
        self.res_block2=ResnetBlock(128,num_blocks[1])
        self.res_block3=ResnetBlock(256,num_blocks[2])
        self.res_block4=ResnetBlock(512,num_blocks[3])
        #GAP
        self.gap=layers.GlobalAveragePooling2D() #全局平均池化
        #全连接层
        self.fc=layers.Dense(units=10,activation=tf.keras.activations.softmax)
    
    def call(self,x):
        #输入部分的传输过程
        x=self.conv(x)
        x=self.bn(x)
        x=self.relu(x)
        x=self.mp(x)
        #block
        x=self.res_block1(x)
        x=self.res_block2(x)
        x=self.res_block3(x)
        x=self.res_block4(x)
        #输出部分的传输
        x=self.gap(x)
        x=self.fc(x)
        return x
mynet=ResNet([2,2,2,2])
X=tf.random.uniform((1,224,224,1))
y=mynet(X)
mynet.summary()

手写数字识别

和Alex Net一样

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

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

相关文章

2023年最值得关注的APP开发工具

随着越来越多的开发人员转向移动应用程序开发,行业和企业都在寻找最好的工具来帮助他们。随着市场的变化,客户越来越注重质量和开发效率。 无论您是要创建一个全新的 APP,还是要寻找一种可快速部署的工具来满足您的需求,这篇文章…

RT1176 将代码放到RAM上运行

为了实现IAP固件升级,需要擦写Flash。如果代码在Nor Flash上运行,同时擦写该Flash,代码就会乱了无法正常执行。所以我们要先将代码放到RAM上运行。 但又不能像官方SDK Demo那样将代码直接烧录到RAM上或SDRAM上,否则掉电后代码丢失…

CSS样式表的学习

CSS样式,在前面学习HTML的结构时,也讲过一点。大概知道CSS样式如何使用。现在,系统的讲述一下CSS的用法,以及关于CSS样式的一些结构。 参考文章:CSS 背景图像重复 (w3schools.com) 一、CSS介绍 CSS 代表 层叠样式表…

蚂蚁集团开源可信隐私计算框架「隐语」:开放、通用

7 月 4 日,蚂蚁集团宣布面向全球开发者正式开源可信隐私计算框架 “隐语”。 隐语是蚂蚁集团历时 6 年自主研发,以安全、开放为核心设计理念打造的可信隐私计算技术框架,涵盖了当前几乎所有主流隐私计算技术。 据介绍,隐语内置 MPC、TEE、同态等多种密态计算虚拟设备,提…

【Java实现AES加解密】

Java实现AES加解密 这篇文章主要介绍了使用Java实现加密之AES加解密,AES为最常见的对称加密算法,对称加密算法也就是加密和解密用相同的密钥,需要的朋友可以参考下在Vue中,Vue加密:Java解密: 这篇文章主要介绍了使用Java实现加密之AES加解密,…

Linux开发工具【vim】

Linux开发工具之【vim】 文章目录: Linux开发工具之【vim】1. Linux软件包管理器yum1.1 查看软件1.2. 下载软件1.3 卸载软件 2. vim编辑器的使用2.1 vim常用模式2.2 vim基本操作2.3 vim命令模式命令集2.3.1 移动光标2.3.2 删除文字2.3.3 复制文本内容2.3.4 替换文本…

设计模式——组合模式

组合模式 定义 组合模式(Composite Pattern)又称为合成模式、部分-整体模式(Part-Whole),主要用来描述部分与整体的关系。 定义:将对象组合成树形结构以表示“部分-整体”的层次结构,使用户对…

【C#】并行编程实战:同步原语(2)

在第4章中讨论了并行编程的潜在问题,其中之一就是同步开销。当将工作分解为多个工作项并由任务处理时,就需要同步每个线程的结果。线程局部存储和分区局部存储,某种程度上可以解决同步问题。但是,当数据共享时,就需要用…

电商项目“商品分类浏览”如何测试?附详细思维导图

电商项目无论是工作中,还是面试中,都是一个高频出现的词。面试官非常热衷提问关于电商项目的问题。例如商品分类怎么测试?购物车怎么测试?订单怎么测试?优惠券怎么测试?支付怎么测试?等等 今天…

【Spring Cloud系列】- Ribbon详解与实战

【Spring Cloud系列】- Ribbon详解与实战 文章目录 【Spring Cloud系列】- Ribbon详解与实战一、什么是Ribbon二、Spring Cloud中Ribbon应用Ribbon使用步骤如下 三、Ribbon负载均衡策略设置3.1 全局策略设置3.2 基于注解的针对单个服务的 Ribbon 负载均衡策略3.2.1 注解方式3.2…

『赠书活动 | 第十五期』《Java核心技术·卷II》

💗wei_shuo的个人主页 💫wei_shuo的学习社区 🌐Hello World ! 『赠书活动 | 第十五期』 本期书籍:《Java核心技术卷II》 公众号赠书:第六期 参与方式:关注公众号:低调而…

折叠屏手机的屏幕,华为Mate X3给出了一份“内外兼修”的解决方案

说起折叠屏手机,屏幕一直都是这个领域的重头戏,很多人都对折叠屏手机有一种刻板印象,那就是脆弱。但是,3月份华为最新推出的Mate X3可以说是非常的亮眼,在内外屏幕、水滴铰链、影像系统等多个核心部件的全方位提升&…

MKPFMSEG字段增强后 关于 BAPI_GOODSMVT_CREATE 的extensionin的增强参数带入。

首先在MKPF 的增强表结构 BAPI_TE_XMKPF 增强字段 如果是行项目上的 BAPI_TE_XMSEG 然后在实际赋值的时候 前面14位数是 10位物料凭证号 4位 年度 CLEAR: ls_extensionin.ls_extensionin-STRUCTURE BAPI_TE_XMKPF.ls_extensionin-valuepart114(50) ls_…

告诉你有哪些音频转换成mp3免费软件

曾经有一个名叫小华的音乐爱好者,他对于收集和欣赏各种类型的音频文件情有独钟。然而,他在构建自己的音乐库时遇到了一个困扰:不同设备和平台支持的音频格式千差万别,这让他无法顺利地播放和分享自己喜爱的音乐。幸运的是&#xf…

GTK列表显示文本和图片

使用GtkTreeView控件显示包含文本和图片的列表,GtkTreeView/GtkListStore或者GtkTreeView/GtkTreeModel使用的是MVC设计理念。 关于MVC: M层: model 数据模型层(处理数据的增删改查) 提供数据 V层: Views 视图层 (数据展示) 渲染数据 C层: controller 控制层(处理业…

【UI框架-uView】Input输入框如何使用前后槽?

【UI框架-uView】Input输入框如何使用前后槽? 官方链接如下:Input输入框 - 前后槽 前槽如下: 后槽如下: 可以看到,前后槽的灵活使用,不仅方便我们的布局,还可以在input中实现复杂的应用。 注意…

Vue 组件化开发

文章目录 前言组件化开发父子组件相互传数据父传子:自定义属性子传父:自定义事件父子组件互传案例 插槽 slot多个插槽 总结组件化开发总结Vue组件的基本组成子组件使用的三个步骤父子组件相互传递数据 前言 提示:这里可以添加本文要记录的大…

jenkins 创建项目的ci

一.创建视图 1.点击加号 选择列表视图 2.输入名称,点击确定 二.创建任务 1.点击到你新建的视图之后,再点击文本中的创建一个新的任务。 2.进入创建页面后首先填写描述 三.选择丢弃旧的构建 保持构建的天数是指:是指保留多少天内的构建 …

【基于FPGA的芯片设计】RISC-V的20条指令CPU设计

实验板卡:xc7a100tlc sg324-2L,共20个开关 实验要求:

【C#】并行编程实战:同步原语(1)

在第4章中讨论了并行编程的潜在问题,其中之一就是同步开销。当将工作分解为多个工作项并由任务处理时,就需要同步每个线程的结果。线程局部存储和分区局部存储,某种程度上可以解决同步问题。但是,当数据共享时,就需要用…