TensorFlow学习笔记之五(卷积神经网络)

本文介绍了卷积神经网络在TensorFlow中的应用,包括图片识别问题的介绍,经典数据集MNIST和CIFAR,以及单通道和三通道图片的卷积计算。卷积操作作为特征抽取的关键步骤,涉及到卷积核大小、填充和步长的影响。同时,讨论了池化层的作用以及不同情况下的输出矩阵尺寸。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 图片识别问题简介以及经典数据集

1.1 图片识别问题简介

视觉是人类认识世界非常重要的一种知觉。对于人来说,通过视觉来识别手写体数字、识别图片中的物体或者找出图片中人脸的轮廓都是非常简单的任务。但是这对于计算机来说不是一件简单的事情。

图片识别问题希望借助计算机中的程序来处理、分析和理解图片中的内容,使得计算机可以从图片中识别各种不同模式的目标和对象。比如前面的MNIST联系就是通过计算机来识别图片中的手写体数字。

1.2 经典数据集

MNIST数据集:TensorFlow入门数据集

CIFAR :CIFAR数据集是一个影响力很大的图像分类数据集。分为CIFAR-10和CIFAR-100两个问题,它们都是图像字典项目(Visual Dictionary)中800万张图片中的一个子集。CIFAR数据集中的图片是32*32的彩色图片。

ImageNet:
无论是MNIST还是CIFAR数据集,相比真实环境有两个最大的问题:

  1. 现实生活中的图片分辨率要远高于32*32,而且图像的分辨率也不会是固定的。
  2. 现实生活中的物体类别很多,无论是10中还是100种都远远不够,而且一张图片中不会只出现一个种类的物体。

为了更加贴近真实环境下的图像识别问题,由斯坦福大学的李飞飞教授带头整理的ImageNet很大程度地解决了这两个问题。

ImageNet是一个基于WordNet的大型图像数据库。

目标:抽取一个32323的图片的特征,再将提取的特征喂入到全连接网络。

  • 卷积可以认为是一种有效提取图像特征的方法。
  • 一般会用一个正方形的卷积核,遍历图片上的每个像素点。图片内的每个像素点,乘以卷积核上相对应的点的权重,求和,在加上偏置。

1. 单通道图片求卷积

1.1 基本的图片求卷积

现在对于一个551的图片,用一个331的卷积核求卷积。
在这里插入图片描述
如图所示,计算机会将一张551图片转换为一个55的矩阵,矩阵中的每个值代表其像素点的灰度。现在用一个33的矩阵对其求卷积。
每次求卷积的过程为拿着卷积核在原始图片举证上求卷积。如图中所示,就是
1 ∗ ( − 1 ) + 0 ∗ 0 + 2 ∗ 1 + 5 ∗ 1 + 4 ∗ 0 + 2 ∗ 1 + 3 ∗ ( − 1 ) + 4 ∗ 0 + 5 ∗ 1 + 1 = 1 1*(-1)+0*0+2*1+5*1+4*0+2*1+3*(-1)+4*0+5*1+1=1 1(1)+00+21+51+40+21+3(1)+40+51+1=1
其总体大概过程如图
图片来源于
在这里插入图片描述
可以看我们是拿卷积核在原始图片上“滑动”求卷积。
在这里,影响输出矩阵的规格的因素有,原始图片大小,卷积核大小,滑动的步长。

一张图片经过一次卷积操作输出的边长 = ( 输入图片的边长 - 卷积核 + 1 ) /步长(向上取整)

比如上图中,输出边长 = ( 5 - 3 +1 ) / 1 = 3

1.2 填充的图片求卷积

有时候,需要在图片的周围进行填充(有全零填充和其他填充),如下图所示:
在这里插入图片描述
那么输出的边长就等于 = 输入长度 / 步长 = 5 / 1 = 5(向上取整)
在TensorFlow中,用参数padding = ‘SAME’(填充) 或者 padding = ‘VALID’(未填充) 表示

总的来说,卷积是讲一个矩阵进行信息提取(特征抽取)的作用。参数为卷积核参数3 * 3 = 9个

1.3 TensorFlow计算卷积

tf.nn.conv2d(
输入描述: 一次喂入图片数, 图片分辨率(两位),通道数
输出描述: 卷积核分辨率(两位), 通道数,核的个数
核滑动步长,第一个和第四个固定为1。第二三个分别为行步长和列步长。
pading = ‘VALID’
)


# eg
tf.nn.conv2d(
	[batch, 5, 5, 1],
	[3, 3, 1, 16],
	[1, 1, 1, 1],
	padding = 'VALID'
)

2. 三通道图片求卷积

在一般情况下,我们遇到的图片都是彩色图片。在计算机中,他们都是三通道图片(三基色原理,RGB红绿蓝)。
所以我们的图片矩阵变成了5 * 5 * 3。此时我们的卷积核变成了3 * 3 * 3 。
在这里插入图片描述


# eg
tf.nn.conv2d(
	[batch, 5, 5, 3],
	[3, 3, 3, 16],
	[1, 1, 1, 1],
	padding = 'SAME'
)

3. 池化层

池化的作用:

  • 减少特征的数量
  • 最大值池化可以提取图片纹理,均值池化可保留背景特征

4. 小结

从计算的角度来看:卷积操作就是矩阵操作。

4.1 输入图片为正方形,卷积核为正方形,单卷积核,单通道

不填充
输 出 的 矩 阵 边 长 = 输 入 边 长 − 卷 积 核 边 长 + 1 步 长 输出的矩阵边长 =\frac{输入边长 - 卷积核边长 + 1}{步长} =+1

填充
输 出 的 矩 阵 边 长 = 输 入 边 长 步 长 输出的矩阵边长 =\frac{输入边长 }{步长} =
在这里有个疑惑,比如卷积核边长为三,填充一层,也就是输入边长+2。输出边长满足上述两个公式。
假如卷积核边长为5。那么是填充一层还是两层?

4.2 输入图片为正方形,卷积核为正方形,单卷积核,三通道

边长与单通道类似

输出通道数可以为1,每个对应的通道数相乘后相加。
可以为3,每个对应的通道数相乘后,相互独立。
也可以为9,输入的每个通道数与卷积核的通道数相乘,再相加。

4.3 输入图片为正方形,卷积核为正方形,多卷积核,多通道

边长与单通道类似

输出通道数
= 卷积核个数,每个对应的通道数相乘后相加。
= 卷积核个数3, 每个对应的通道数相乘后,相互独立。
= 卷积核个数
9,输入的每个通道数与卷积核的通道数相乘,再相加。

5.

内容概要:本文针对国内加密货币市场预测研究较少的现状,采用BP神经网络构建了CCi30指数预测模型。研究选取2018年3月1日至2019年3月26日共391天的数据作为样本,通过“试凑法”确定最优隐结点数目,建立三层BP神经网络模型对CCi30指数收盘价进行预测。论文详细介绍了数据预处理、模型构建、训练及评估过程,包括数据归一化、特征工程、模型架构设计(如输入层、隐藏层、输出层)、模型编译训练、模型评估(如RMSE、MAE计算)以及结果可视化。研究表明,该模型在短期内能较准确地预测指数变化趋势。此外,文章还讨论了隐层节点数的优化方法及其对预测性能的影响,并提出了若干改进建议,如引入更多技术指标、优化模型架构、尝试其他时序模型等。 适合人群:对加密货币市场预测感兴趣的研究人员、投资者及具备一定编程基础的数据分析师。 使用场景及目标:①为加密货币市场投资者提供一种新的预测工具和方法;②帮助研究人员理解BP神经网络在时间序列预测中的应用;③为后续研究提供改进方向,如数据增强、模型优化、特征工程等。 其他说明:尽管该模型在短期内表现出良好的预测性能,但仍存在一定局限性,如样本量较小、未考虑外部因素影响等。因此,在实际应用中需谨慎对待模型预测结果,并结合其他分析工具共同决策。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值