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.主存中存储体的构造 最小的存储单位是存储元,存储元…...

Appium+python自动化(十六)- ADB命令
简介 Android 调试桥(adb)是多种用途的工具,该工具可以帮助你你管理设备或模拟器 的状态。 adb ( Android Debug Bridge)是一个通用命令行工具,其允许您与模拟器实例或连接的 Android 设备进行通信。它可为各种设备操作提供便利,如安装和调试…...

【WiFi帧结构】
文章目录 帧结构MAC头部管理帧 帧结构 Wi-Fi的帧分为三部分组成:MAC头部frame bodyFCS,其中MAC是固定格式的,frame body是可变长度。 MAC头部有frame control,duration,address1,address2,addre…...

Python:操作 Excel 折叠
💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 Python 操作 Excel 系列 读取单元格数据按行写入设置行高和列宽自动调整行高和列宽水平…...

大型活动交通拥堵治理的视觉算法应用
大型活动下智慧交通的视觉分析应用 一、背景与挑战 大型活动(如演唱会、马拉松赛事、高考中考等)期间,城市交通面临瞬时人流车流激增、传统摄像头模糊、交通拥堵识别滞后等问题。以演唱会为例,暖城商圈曾因观众集中离场导致周边…...
基础测试工具使用经验
背景 vtune,perf, nsight system等基础测试工具,都是用过的,但是没有记录,都逐渐忘了。所以写这篇博客总结记录一下,只要以后发现新的用法,就记得来编辑补充一下 perf 比较基础的用法: 先改这…...

高危文件识别的常用算法:原理、应用与企业场景
高危文件识别的常用算法:原理、应用与企业场景 高危文件识别旨在检测可能导致安全威胁的文件,如包含恶意代码、敏感数据或欺诈内容的文档,在企业协同办公环境中(如Teams、Google Workspace)尤为重要。结合大模型技术&…...

C# 类和继承(抽象类)
抽象类 抽象类是指设计为被继承的类。抽象类只能被用作其他类的基类。 不能创建抽象类的实例。抽象类使用abstract修饰符声明。 抽象类可以包含抽象成员或普通的非抽象成员。抽象类的成员可以是抽象成员和普通带 实现的成员的任意组合。抽象类自己可以派生自另一个抽象类。例…...
MySQL用户和授权
开放MySQL白名单 可以通过iptables-save命令确认对应客户端ip是否可以访问MySQL服务: test: # iptables-save | grep 3306 -A mp_srv_whitelist -s 172.16.14.102/32 -p tcp -m tcp --dport 3306 -j ACCEPT -A mp_srv_whitelist -s 172.16.4.16/32 -p tcp -m tcp -…...
力扣-35.搜索插入位置
题目描述 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。 class Solution {public int searchInsert(int[] nums, …...
Python 包管理器 uv 介绍
Python 包管理器 uv 全面介绍 uv 是由 Astral(热门工具 Ruff 的开发者)推出的下一代高性能 Python 包管理器和构建工具,用 Rust 编写。它旨在解决传统工具(如 pip、virtualenv、pip-tools)的性能瓶颈,同时…...