卷积神经网络CNN小结(简单实现代码mnist数据集)

2023-11-20

 由于全连接神经网络处理图像中的需要训练参数过多的问题。而卷积神经网络中,卷积层的神经元只与前一层的部分

神经元节点相连,既它的神经元的连接是非全连接的。且同一层某些神经元之间的连接的权重w和偏移b是共享的,这样大量减少了训练参数的数量。

 

(图1)

卷积神经网络的结构一般包含几个层:

输入层:用于数据的输入

卷积层:使用卷积核进行特征提取和特征映射

激励层:由于卷积也是一种线性运算,因此需要增加非线性映射

池化层:进行下采样,对特征图做稀疏处理,减少数据运算量。

全连接层:通常在Cnn的尾部进行重新拟合,减少特征信息的损失。

输出层:用于输出结果

还有一些其他的层次比如归一化层:在Cnn中对特征的归一化,切分层:对某些数据的进行分区域的单独学习,融合层:对分区域进行特征学习的分支进行融合

 卷积神经网络中,隐藏层中的神经元的感受视野比较小,只能看到上一次的部分特征,上一层的其他特征可以通过平移感受视野来得到同一层的其他神经元,由同一层其他神经元来看。

动态模型

(图2)

 

(数学模型3*3)

(图3)

模型是一个立体模型 长宽会减小,高度会增加 

一个感受视野带有一个卷积核,我们将感受视野中的权重w矩阵称为卷积核:将感受视野对输入的扫描间隔成为步长;如果步长过大会出界这个时候需要对边界扩充pad,边界扩充可以设为0或者其他值。

如图(1)所示其特征映射图的权重和偏置都是共同的

卷积核不要设置太大卷积核长宽自定一般3*3左右吧

参数设置:

       self.x=tf.placeholder(tf.float32,[None,28,28,1])
        # 输入y(标签)
        self.y=tf.placeholder(tf.float32,[None,10])
        # ----------------------------卷积初始化--------------------------------
        #卷积第一层
        self.conv1_w=tf.Variable(tf.random_normal([3,3,1,16],dtype=tf.float32,stddev=0.1))
        # 卷积第一层偏移
        self.convb1=tf.Variable(tf.zeros([16]))
        # 卷积第二层
        self.conv2_w = tf.Variable(tf.random_normal([3,3,16,32],dtype=tf.float32,stddev=0.1))
        # 卷积第二层偏移
        self.convb2=tf.Variable(tf.zeros([32]))
        #--------------------------------全连接初始化---------------------------------------
        # 第一层全连接w
        self.W = tf.Variable(tf.random_normal([7*7*32,128],dtype=tf.float32,stddev=0.1))
        # 第一层全连接b
        self.B = tf.Variable(tf.zeros([128]))
        # 第二层全连接w
        self.W1 = tf.Variable(tf.random_normal([128,10],dtype=tf.float32,stddev=0.1))
        # 第二层全连接b
        self.B1 = tf.Variable(tf.zeros([10]))

前项计算:

   # ------------------------------卷积层-----------------------------------
        # 卷积第一层实现
        self.conv1=tf.nn.relu(tf.nn.conv2d(self.x,self.conv1_w,strides=[1,1,1,1],padding="SAME")+self.convb1)
        # 第一层池化
        self.pool1=tf.nn.max_pool(self.conv1,ksize=[1,2,2,1],strides=[1,2,2,1],padding="SAME")
        # 卷积第二层实现
        self.conv2=tf.nn.relu(tf.nn.conv2d(self.pool1,self.conv2_w,strides=[1,1,1,1],padding="SAME")+self.convb2)
        # 卷积第二层池化
        self.pool2=tf.nn.max_pool(self.conv2,ksize=[1,2,2,1],strides=[1,2,2,1],padding="SAME")
        # 均值tf.nn.avg_pool
        # 归一化层tf.nn.batch_normalization
        # 形状处理
        self.flat = tf.reshape(self.pool2,[-1,7*7*32])
        # ---------------------------------全链接层-------------------------------------------
        self.y0 = tf.nn.relu(tf.matmul(self.flat,self.W)+self.B)
        self.yo = tf.nn.softmax(tf.matmul(self.y0,self.W1)+self.B1)

后项计算:

       self.cross_entropy = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(logits=self.yo, labels=self.y))
        self.optimizer = tf.train.AdamOptimizer(0.003).minimize(self.cross_entropy)

训练

if __name__ == '__main__':
    net = Net()
    net.forward()
    net.backword()
    init=tf.global_variables_initializer()
with tf.Session() as sess:
    sess.run(init)
    for  i in range(100000):
        xs,ys = mnist.train.next_batch(128)
        cg=xs.reshape([128,28,28,1])
        rs,loss,_=sess.run([net.acc,net.cross_entropy,net.optimizer],feed_dict={net.x:cg,net.y:ys})
        if i % 100==0:
            # print(loss)

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

卷积神经网络CNN小结(简单实现代码mnist数据集) 的相关文章

  • 基于Hexo+Matery的LuckyBlog开源搭建教程

    前言 之前在B站上发布了个人博客的视频 播放量也破千了 有网友私聊也想要搭建一个这样的博客 经过一段时间的准备 现将本人博客的源代码公布出来 大家只需要根据以下的步骤 即可快速搭建一个漂亮完善的博客 0x01 LuckyBlog 介绍 上一
  • OJ编程之多组输入----牛客网----BC41 你是天才吗?

    OJ编程之多组输入 牛客网 BC41 你是天才吗 题目要求 错误代码 include
  • JavaScript 简介

    简介 JavaScript是一门脚本语言 这门语言主要用于 HTML 和 web 更可广泛用于服务器 PC 笔记本电脑 平板电脑和智能手机等设备 前端开发中JavaScript代码可以被插入到HTML页面代码中使用 并由浏览器来执行 示例
  • 关于打代码的一些些心得

    些许废话 零零散散也正式以打代码为生快一年半了 从代码写的稀碎到稍微能总结出一点东西 也算是一个一直在向上缓慢行走的状态了 很难说我喜欢代码这件事 原本选择也只是为了糊口 但从面向百度编程 到一点点写出带着自己风格的代码 再到可以略微静下来

随机推荐

  • Qt 实现压缩文件、文件夹和解压缩操作zip

    一 实现方式 通过Qt自带的库来实现 使用多线程方式 通过信号和槽来触发压缩与解压缩 并将压缩和解压缩结果回传过来 使用的类 include QtGui private qzipreader p h include QtGui privat
  • 同时有线内网无线外网的解决方案

    内网有线环境下先固定好自己的IP地址 子网掩码和网关地址 DNS 连接WIFI后 用管理员权限打开CMD命令行 第一步 输入route print 后按回车 会看到左侧网络目标里有两个0 0 0 0的地址 这样就会路由冲突 出现要么只能上内
  • “传统技术”快速搭建AI产品的利器——LLM技术

    文章首发地址 LLM原理 LLM Learning Localization and Mapping 技术的原理是将学习 定位和建图结合起来 实现机器人对环境的感知 定位和地图构建 下面是LLM技术的基本原理 学习 Learning LLM
  • html颜色怎么渐变效果,html怎么设置颜色渐变

    html设置颜色渐变的方法 首先创建一个HTML示例文件 然后使用div标签创建一个模块 接着在css标签内通过 id colorchange 来设置div样式 最后通过linear gradient属性设置div的背景颜色渐变效果即可 本
  • 讲解 最大流问题+最小花费问题+python(ortool库)实现

    文章目录 基本概念 图 邻接矩阵 最大流问题 python解决最大流问题 python解决最大流最小费用问题 喜欢的话请关注我们的微信公众号 你好世界炼丹师 公众号主要讲统计学 数据科学 机器学习 深度学习 以及一些参加Kaggle竞赛的经
  • ul里面可以放div吗?

    在HTML中 ul 标签代表无序列表 可以用来展示项目列表 而 div 标签则是div容器用于分组内容 提供独立于文档的CSS样式和JavaScript事件处理 那么 ul里面可以放div吗 答案是肯定的 下面从多个方面进行详细阐述 一 语
  • MacBook安装使用XMind

    MacBook安装使用XMind XMind简介 官方地址 https www xmind cn XMind 是一个全功能的思维导图和头脑风暴软件 为激发灵感和创意而生 作为一款有效提升工作和生活效率的生产力工具 受到全球百千万用户的青睐
  • 计算机内存插在主板的哪个槽,四个内存插槽,这是正确的安装顺序

    具有防呆设计的主板插槽几乎不可能错误地插入 因此很有可能在第一个插槽中安装了内存 尽管可以 但是会阻止内存在最佳状态下工作 主板手册中有这样一句话 说明 为便于理解 首先对内存插槽编号 从靠近CPU插槽的位置开始 主板 针对不同情况的最佳安
  • 区域生长算法及其实现

    区域生长算法及其实现 背景 前面我们已经介绍了 最大熵分割法 OTSU算法 他们都有各自的优缺点 通常都不是单独使用这些算法 需要和其它算法来结合使用 前面两类算法都是单独对图像的灰度信息进行处理 不包含图像的空间信息 而区域生长算法则包含
  • 云计算与大数据概论第十一周

    分布式计算 分布式计算是一种计算方法 和集中式计算是相对的 随着计算技术的发展 有些应用需要非常巨大的计算能力才能完成 如果采用集中式计算 需要耗费相当长的时间来完成 分布式计算将该应用分解成许多小的部分 分配给多台计算机进行处理 这样可以
  • 如何快速开发一个简单实用的MES系统?

    01 如何快速开发一个简单实用的MES系统 MES生产管理系统 又称制造执行系统 是一种集成了计划 生产 质量控制 库存管理和材料申请等生产流程的管理系统 是企业中实现高效生产的重要一环 根据题主描述 通过产品条形码实现对生产计划下的产品追
  • 小程序的基础(三)

    文章目录 前言 一 navigator 二 rich text 作用 1 nodes属性 注意 三 button open type 的 contact的实现流程 代码示例 1 contact 直接打开 客服对话功能 需要在微信小程序的后台
  • int argc,char*argv[ ]的简洁解释

    1 arguments argument counter 计数个数 和 argument vector 矢量 带有方向的变量参数 也就是指针 argc命令行输入参数的个数 int main int argc char argv int i
  • 【操作系统】王道考研 p42 段页式管理方式

    段页式管理方式 知识总览 分段 分页管理方式中最大的优缺点 关于段式管理会产生外部碎片 ps 分段管理中产生的外部碎片也可以用 紧凑 来解决 只是需要付出较大的时间代价 分段 分页 段页式管理 示意图 先分段 后分页 段页式管理的逻辑地址结
  • oracle 的路径不一致,DG环境搭建,在备库遇到问题,主备库的路径不一致

    现在在做oracle DG的环境搭建 因为实际生产的原因 主备库的路径是不一致的 我把主库的rman文件传到备库后 在备库进行恢复 无法恢复 求指导 oracle std bak rman target sys 123456 pri aux
  • java变量作用域和堆栈

    一 作用域决定了变量的可见性和生命周期 java中变量分为成员变量和局部变量 如下 1 成员变量 在类的所有方法外部声明的变量 即类所拥有的变量 可以被系统初始化 1 1静态成员变量 类被加载时被创建 其生命周期与该类的生命周期相同 1 2
  • 在自己的bash脚本中实现自动补全

    在90年代Linux和DOS共存的年代里 Linux的Shell们有一个最微不足道但也最实用的小功能 就是命令自动补全 而DOS那个笨蛋一直到死都没学会什么叫易用 Linux的这个微不足道的小传统一直延续至今 虽然看似微不足道 其实也极大的
  • stm32无法唤醒DTH11温湿度传感器解决

    关于DTH11的介绍和使用方法可以随便搜索一下别的文章 直接搜索DTH11即可 这里使用艾克姆科技的例程 却无法成功运行 上了示波器才发现拉低时间无法达到18ms 因此无法唤醒DTH11 总线由stm32拉低12ms左右之后就一直处于高电平
  • CString字符串查找和截取

    1 Find 该函数从左侧0索引开始 查找第一个出现的字符位置 CString str abc int postion str Find a 如果查到 返回以0索引起始的位置 未查到 返回 1 如果查到 返回以0索引起始的位置 未查到 返回
  • 卷积神经网络CNN小结(简单实现代码mnist数据集)

    由于全连接神经网络处理图像中的需要训练参数过多的问题 而卷积神经网络中 卷积层的神经元只与前一层的部分 神经元节点相连 既它的神经元的连接是非全连接的 且同一层某些神经元之间的连接的权重w和偏移b是共享的 这样大量减少了训练参数的数量 图1