10 卷积神经网络及python实现
1 卷积神经网络简介
卷积神经网络(Convolutional Neural Network, CNN)由LeCun在上世纪90年代提出。
LeCun Y., Bottou L., Bengio Y., and Haffner P., Gradient-based learning applied to document recognition, Proceedings of the IEEE, pp. 1-7, 1998.

卷积核和特征图:

如果我们用6个卷积核,就能获得6个特征图(feature map)。你也可以把产生的6个特征图看成一个新的“图像”,其height, width, channel数目分别是28,28,6。

2 基本操作
2.1 卷积层
卷积层:特征提取
可以将图像卷积看成全连接网络的权值共享(weight sharing)

p1=w1∗x1+w2∗x2+w3∗x4+w4∗x5+b1p2=w1∗x2+w2∗x3+w3∗x5+w4∗x6+b2p3=w1∗x4+w2∗x5+w3∗x7+w4∗x8+b3p4=w1∗x5+w2∗x6+w3∗x8+w4∗x9+b4\begin{array}{l} p_1 = w_1 * x_1 + w_2 * x_2 + w_3 * x_4 + w_4 * x_5 + b_1 \\ p_2 = w_1 * x_2 + w_2 * x_3 + w_3 * x_5 + w_4 * x_6 + b_2 \\ p_3 = w_1 * x_4 + w_2 * x_5 + w_3 * x_7 + w_4 * x_8 + b_3 \\ p_4 = w_1 * x_5 + w_2 * x_6 + w_3 * x_8 + w_4 * x_9 + b_4 \end{array} p1=w1∗x1+w2∗x2+w3∗x4+w4∗x5+b1p2=w1∗x2+w2∗x3+w3∗x5+w4∗x6+b2p3=w1∗x4+w2∗x5+w3∗x7+w4∗x8+b3p4=w1∗x5+w2∗x6+w3∗x8+w4∗x9+b4
上一页中的卷积操作,等价于如下权值共享网络:


参数个数计算:
第1层(convolutional layer): (55+1)6=156
第2层(subsampling layer): 0
第3层(convolutional layer): (556+1)16=2416
第4层(subsampling layer): 0
第5层(fully connected layer): (55*16+1)*120=48120
第6层(fully connected layer): (120+1)*84=10164
第7层(fully connected layer): (84+1)*10=850
参数总数:61,706
2.2 ReLU 激活层
加入非线性因素,将卷积层输出结果做非线性映射。
ReLU 函数:
- 对于输入负值,输出全为0;
- 正值原样输出。

2.3 池化层
提取重要的特征信息。
将输入图像进行缩小,减少像素信息,保留重要信息。
取最大值、平均值等。

2.4 单层卷积神经网络
卷积、激活函数、池化组合在一起。

2.5 全连接层
全连接层在整个卷积神经网络中起到“分类器”的作用,即通过卷积、池化等深度网络后,再经过全连接层对结果进行识别分类。

2.6 卷积神经网络流程

3 代码分析
1.引入头文件,加载数据
将数据读入数据集 独热编码
2.封装函数,方便网络搭建多处调用
(1)构建权重www,产生随机变量
(2)构建偏置bbb
(3)卷积层准备:卷积函数实现
(4)卷积层 激活函数xxx与0作比较
(5)池化层:小一倍数据 特征图
3.特征标签的占位符
4.开始网络搭建 CNN构建
1)卷积层 ,创建patch=5*5卷积核
构建w,bw, bw,b
([卷积核大小5 5,输入数据的维度1(灰度处理),输出的高度32])
(2)第一层卷积层,调用函数
(3)激活relu
(4)池化
2)第二层卷积
和第一层差不多,注意几个点
构建w\b 上一层的输出是这一层的输入,这一层的输出2的次方
第一层卷积层(上一层池化的结果,这一层的w)
3)全连层
据拍平、提纯、分类
(1)第一层全连层:前馈神经网络 输入:第二次池化结果 7764 假设神经元1024个
(2)第二层全连层:分类器
上层输出1024是这层输入,总的分类数为这层输出
5.构建损失函数
6.优化器
"""
卷积神经网络:手写数字模型
"""
import tensorflow as tf
# 加载数据
from tensorflow.examples.tutorials.mnist import input_data
# 将数据读入数据集 独热编码
input_data.read_data_sets('MNIST_data/',one_hot=True)input_size=28*28
# 分类
num_class=10# 创建函数:构建权重w,产生随机变量
def weight_variable(shape):"""构建权重w,产生随机变量:param shape::return:"""w=tf.random_normal(shape=shape,stddev=0.01)return tf.Variable(w)def bias_variable(shape):"""构建偏置b:param shape::return:"""b=tf.constant(0.01,shape=shape)return tf.Variable(b)def con2d(x,w):"""卷积层准备:卷积函数实现:param x: 图像矩阵信息:param w: 卷积核的值:return: conv2d"""# strides:卷积步长[上、右、下、左]return tf.nn.conv2d(x,w,strides=[1,1,1,1],padding='SAME')def relu_con(x):"""卷积层 激活x与0作比较:param x::return:"""return tf.nn.relu(x)def max_pool_con2x2(x):"""池化层:小一倍数据 特征图:param x: 图片的矩阵信息:return:value,ksize,strides,【上、右、下、左】右、下两个单位padding,data_format="NHWC",name=None,input=None"""return tf.nn.max_pool(x,ksize=[1,2,2,1],strides=[1,2,2,1],padding='SAME')# 网络搭建
# 1.特征标签的占位符
# # 1.占位符---输入层 x:数据输入到图中进行计算 y:识别的数字,有几个类别输入几个数字
xs= tf.placeholder(tf.float32,shape=[None,input_size]) #64列不知道几行
ys = tf.placeholder(tf.float32,shape=[None,num_class])#10类不知道多少个# 将xs灰度处理:拍平变成一维[-1任意一张图片,28,28矩阵大小,1深度]
# 将该数据放到卷积层操作
x_image=tf.reshape(xs,[-1,28,28,1])
# CNN构建
# 第一层:卷积层 创建patch=5*5卷积核
# ([卷积核大小5 5,输入数据的维度1(灰度处理),输出的高度32])
# 构建w\b
w_conv1=weight_variable([5,5,1,32])
b_conv1=bias_variable([32])
# 第一层卷积层
conv1 = con2d(x_image,w_conv1)
# 激活relu
h_conv1=relu_con(conv1+b_conv1)
# 池化
h_pool1=max_pool_con2x2(h_conv1)# 第二层=====# 第二层:卷积层 创建patch=5*5卷积核
# ([卷积核大小5 5,输入数据的维度1(灰度处理),输出的高度32])
# 构建w\b 上一层的输出是这一层的输入,这一层的输出2的次方
w_conv2=weight_variable([5,5,32,64])# 14*14*32
b_conv2=bias_variable([64])
# 第一层卷积层(上一层池化的结果,这一层的w)
conv2 = con2d(h_pool1,w_conv2)
# 激活relu
h_conv2=relu_con(conv2+b_conv2)
# 池化
h_pool2=max_pool_con2x2(h_conv2)# 全连层 数据拍平、提纯、分类
# 不再做卷积了
# 全连接第一层:前馈神经网络 输入:第二次池化结果 7*7*64 假设神经元1024个
w_fc1=weight_variable([7*7*64,1024])
b_fc1=bias_variable([1024])
# 输出矩阵 几行不管 列:7*7*64
h_pool2_flat=tf.reshape(h_pool2,[-1,7*7*64])
# 前馈神经网络wx+b
h_fc1=tf.matmul(h_pool2_flat,w_fc1)+b_fc1
# 激活
h_flc1=relu_con(h_fc1)# 第二层全连层:分类
w_fc2=weight_variable([1024,num_class])
b_fc2=bias_variable([num_class])
# 计算并激活
# 前馈神经网络wx+b
h_fc2=tf.matmul(h_flc1,w_fc2)+b_fc2
# 激活---分类 返回每种情况的概率
predict=h_flc2=tf.nn.softmax(h_fc2)# 构建损失函数
# 优化器相关文章:
10 卷积神经网络及python实现
1 卷积神经网络简介 卷积神经网络(Convolutional Neural Network, CNN)由LeCun在上世纪90年代提出。 LeCun Y., Bottou L., Bengio Y., and Haffner P., Gradient-based learning applied to document recognition, Proceedings of the IEEE, pp. 1-7, 1998. 卷积核和特征图&…...
【立体匹配论文阅读】AANet: Adaptive Aggregation Network for Efficient Stereo Matching
Authors: Haofei Xu, Juyong Zhang Link: https://arxiv.org/abs/2004.09548 Years: 2020 Credit Novelty and Question set up 主流的立体匹配模型的代价聚合操作主要用了3D卷积,这部分操作的算力和内存消耗过大,因此作者提出一种新的模型AANet&#x…...
服务器防入侵攻击,安全加固措施
服务器防入侵攻击,安全加固措施当服务器被入侵,被攻击的时候,很多服务器维护人员不懂得如何去防止入侵,防止黑客的攻击,只能眼巴巴的看着服务器被任意的攻击,给服务器上的网站造成严重的经济损失࿰…...
解读:“出境标准合同”与“出境安全评估”要点与异同
《数据安全法》第四条及《个人信息保护法》第三章对数据出境、个人信息跨境提出明确要求,《数据安全法》与《个人信息保护法》存在互相包含、被包含、衔接、特性、独立性、相互补充等内涵。本文通过上位法互相衔接、关联、特性的思路,去观察《个人信息出…...
python带你成功复刻热门手机游戏——飞翔的小鸟
前言 大家早好、午好、晚好吖 ❤ ~欢迎光临本文章 飞翔的小鸟(游戏英文名:Flappy Bird) 一款由越南独立开发者开发的手机游戏,是之前非常流行的一款手机游戏 小游戏目标:让小鸟穿过管子,不要碰到任何物体…...
YOLOv8初体验:检测、跟踪、模型部署
安装 YOLOv8有两种安装方式,一种是直接用pip命令安装: pip install ultralytics另外一种是通过源码安装: git clone https://github.com/ultralytics/ultralytics cd ultralytics pip install -e .[dev]安装完成后就可以通过yolo命令在命令…...
Vue 监听(watch handler)
普通监听 缺点:不能深度监听(对象属性的改变),刷新或首次加载不能执行。 watch: { carts: function (val, oldVal) { console.log(new: %s, old: %s, val, oldVal) } } 高级监…...
前端代码质量-圈复杂度原理和实践
1. 导读 你们是否也有过下面的想法? 重构一个项目还不如新开发一个项目…这代码是谁写的,我真想… 你们的项目中是否也存在下面的问题? 单个项目也越来越庞大,团队成员代码风格不一致,无法对整体的代码质量做全面的…...
汽车微控制器芯片F280039CPZRQ1、F280039CSPM、F280039CSPN规格参数
F280039CPZRQ1、F280039CSPM、F280039CSPN是C2000实时微控制器系列中的一款器件。C2000微控制器是可扩展、超低延迟器件,旨在提高电力电子设备的效率,包括但不限于:高功率密度、高开关频率,并支持使用 GaN和SiC技术。F280039CPZRQ…...
禾观科技三面经历
智力题 一天中时针和分钟重合多少次 由于时针1分钟旋转的圆心角度数为0.5度(30/60min) 分针1分钟旋转的圆心角度为6度(30/5min) 当两针第一次重合时后到第二次重合,分针比时针多旋转过的圆心角度数为360度。(快的比慢的多跑一圈,也就是360度) 这类问题实际上是分针追时…...
Spring Boot 实现接口幂等性的 4 种方案
一、什么是幂等性 幂等是一个数学与计算机学概念,在数学中某一元运算为幂等时,其作用在任一元素两次后会和其作用一次的结果相同。 在计算机中编程中,一个幂等操作的特点是其任意多次执行所产生的影响均与一次执行的影响相同。幂等函数或幂…...
Android Studio开发APP
1.下载Android Studio 官网下载:Android Studio for Window ... 百度云下载:android-studio-bundle-141.1903250-windows.exe Android Studio 是谷歌推出的一个Android集成开发工具,基于IntelliJ IDEA. 类似 Eclipse ADT,Android Studio 提供了集成的 Android 开发工具用…...
Spring之实例化Bean _ @Resource和@Autowired实现原理(3)
目录 1. 搜集注解信息 applyMergedBeanDefinitionPostProcessor(*) 2. 将实例化的Bean放入3级缓存中 addSingletonFactory(***)为循环依赖做准备 3. 根…...
华为HCIE学习之Openstack Cinder组件(cinder对接glusterfs)
文章目录一、MQ的作用二、cinder架构图三、各组件的作用四、cinder对接glusterfs一、MQ的作用 服务内各组件交互通过MQ进行 二、cinder架构图 IET,Linux用软件做存储,CNA识别过去就是IETTGT,物理存储,CNA识别过去就是TGT 三、…...
关于Go语言的底层,你想知道的都在这里!
文章目录1. GoLang语言1.1 Slice1.2 Map1.3 Channel1.4 Goroutine1.5 GMP调度1.6 垃圾回收机制1.7 其他知识点2. Web框架Gin和微服务框架Micro2.1 Gin框架2.2 Micro框架2.3 Viper2.4 Swagger2.5 Zap2.6 JWT文章字数大约1.95万字,阅读大概需要65分钟,建议…...
每日一问-ChapGPT-20230308-关于技术与思考的问题
文章目录每日一问-ChapGPT系列起因每日一问-ChapGPT-20230308-关于技术与思考的问题matplotlib_venn 中 venn2函数调用时,subsets传入A list (or a tuple) containing two set objects,怎么理解plt.pie() 包含哪些参数,以及每个参数的意义mat…...
Oracle表分区的创建、新增、拆分
Oracle中为了方便管理、查询数据当数据量大于500w或者2G时最好用分区表,常见的一种是使用时间作为分区。 分区表添加新的分区有 2 种情况: (1) 原分区里边界是 maxvalue 或者 default。 这种情况下,我们需要把边界分区 drop 掉,加…...
如何快速升级Java 8 到Java11
老板让我把一个项目从 Java 8 迁移到 Java 11,我该怎么办呢? 最简单的办法,当然是直接强行升级,遇到一个错就改一个错,别看它 low,但是对于一个小型且非核心的项目来说,已经足够了。 当然,对于比较重要的项目,且代码行数不少的情况,最标准的姿势就是对着官方文档进…...
内卷把同事逼成了“扫地僧”,把Git上所有面试题整理成足足24W字Java八股文
互联网大厂更多的是看重学历还是技术?毫无疑问,是技术,技术水平相近的情况下,肯定学历高/好的会优先一点,这点大家肯定都理解。说实话,学弟学妹们找工作难,作为面试官招人也难呀!&am…...
【计组】主存储器有关知识梳理
一、主存储器 主存储器可以直接和CPU进行通信,但是只能保存临时数据,在断电后数据就消失。还有一个特点是,主存储器的容量小,速度快,造价高。 1.构成 2.主存中存储体的构造 最小的存储单位是存储元,存储元…...
CVPR 2025 MIMO: 支持视觉指代和像素grounding 的医学视觉语言模型
CVPR 2025 | MIMO:支持视觉指代和像素对齐的医学视觉语言模型 论文信息 标题:MIMO: A medical vision language model with visual referring multimodal input and pixel grounding multimodal output作者:Yanyuan Chen, Dexuan Xu, Yu Hu…...
DockerHub与私有镜像仓库在容器化中的应用与管理
哈喽,大家好,我是左手python! Docker Hub的应用与管理 Docker Hub的基本概念与使用方法 Docker Hub是Docker官方提供的一个公共镜像仓库,用户可以在其中找到各种操作系统、软件和应用的镜像。开发者可以通过Docker Hub轻松获取所…...
iPhone密码忘记了办?iPhoneUnlocker,iPhone解锁工具Aiseesoft iPhone Unlocker 高级注册版分享
平时用 iPhone 的时候,难免会碰到解锁的麻烦事。比如密码忘了、人脸识别 / 指纹识别突然不灵,或者买了二手 iPhone 却被原来的 iCloud 账号锁住,这时候就需要靠谱的解锁工具来帮忙了。Aiseesoft iPhone Unlocker 就是专门解决这些问题的软件&…...
从深圳崛起的“机器之眼”:赴港乐动机器人的万亿赛道赶考路
进入2025年以来,尽管围绕人形机器人、具身智能等机器人赛道的质疑声不断,但全球市场热度依然高涨,入局者持续增加。 以国内市场为例,天眼查专业版数据显示,截至5月底,我国现存在业、存续状态的机器人相关企…...
Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility
Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility 1. 实验室环境1.1 实验室环境1.2 小测试 2. The Endor System2.1 部署应用2.2 检查现有策略 3. Cilium 策略实体3.1 创建 allow-all 网络策略3.2 在 Hubble CLI 中验证网络策略源3.3 …...
Python ROS2【机器人中间件框架】 简介
销量过万TEEIS德国护膝夏天用薄款 优惠券冠生园 百花蜂蜜428g 挤压瓶纯蜂蜜巨奇严选 鞋子除臭剂360ml 多芬身体磨砂膏280g健70%-75%酒精消毒棉片湿巾1418cm 80片/袋3袋大包清洁食品用消毒 优惠券AIMORNY52朵红玫瑰永生香皂花同城配送非鲜花七夕情人节生日礼物送女友 热卖妙洁棉…...
20个超级好用的 CSS 动画库
分享 20 个最佳 CSS 动画库。 它们中的大多数将生成纯 CSS 代码,而不需要任何外部库。 1.Animate.css 一个开箱即用型的跨浏览器动画库,可供你在项目中使用。 2.Magic Animations CSS3 一组简单的动画,可以包含在你的网页或应用项目中。 3.An…...
uniapp 集成腾讯云 IM 富媒体消息(地理位置/文件)
UniApp 集成腾讯云 IM 富媒体消息全攻略(地理位置/文件) 一、功能实现原理 腾讯云 IM 通过 消息扩展机制 支持富媒体类型,核心实现方式: 标准消息类型:直接使用 SDK 内置类型(文件、图片等)自…...
es6+和css3新增的特性有哪些
一:ECMAScript 新特性(ES6) ES6 (2015) - 革命性更新 1,记住的方法,从一个方法里面用到了哪些技术 1,let /const块级作用域声明2,**默认参数**:函数参数可以设置默认值。3&#x…...
【WebSocket】SpringBoot项目中使用WebSocket
1. 导入坐标 如果springboot父工程没有加入websocket的起步依赖,添加它的坐标的时候需要带上版本号。 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-websocket</artifactId> </dep…...
