Tensorflow学习笔记9-卷积神经网络CNN

什么是卷积神经网络 CNN

我们先把卷积神经网络这个词拆开来看. “卷积” 和 “神经网络”. 卷积也就是说神经网络不再是对每个像素的输入信息做处理了,而是图片上每一小块像素区域进行处理, 这种做法加强了图片信息的连续性. 使得神经网络能看到图形, 而非一个点. 这种做法同时也加深了神经网络对图片的理解.
具体来说, 卷积神经网络有一个批量过滤器, 持续不断的在图片上滚动收集图片里的信息,每一次收集的时候都只是收集一小块像素区域, 然后把收集来的信息进行整理, 这时候整理出来的信息有了一些实际上的呈现, 比如这时的神经网络能看到一些边缘的图片信息, 然后在以同样的步骤, 用类似的批量过滤器扫过产生的这些边缘信息,
神经网络从这些边缘信息里面总结出更高层的信息结构,比如说总结的边缘能够画出眼睛,鼻子等等. 再经过一次过滤, 脸部的信息也从这些眼睛鼻子的信息中被总结出来. 最后我们再把这些信息套入几层普通的全连接神经层进行分类, 这样就能得到输入的图片能被分为哪一类的结果了.

卷积convolution

在这里插入图片描述
我们截取一段 google 介绍卷积神经网络的视频, 具体说说图片是如何被卷积的. 下面是一张猫的图片, 图片有长, 宽, 高 三个参数. 对! 图片是有高度的! 这里的高指的是计算机用于产生颜色使用的信息. 如果是黑白照片的话, 高的单位就只有1, 如果是彩色照片, 就可能有红绿蓝三种颜色的信息, 这时的高度为3. 我们以彩色照片为例子. 过滤器就是影像中不断移动的东西, 他不断在图片收集小批小批的像素块, 收集完所有信息后, 输出的值, 我们可以理解成是一个高度更高,长和宽更小的”图片”. 这个图片里就能包含一些边缘信息. 然后以同样的步骤再进行多次卷积, 将图片的长宽再压缩, 高度再增加, 就有了对输入图片更深的理解. 将压缩,增高的信息嵌套在普通的分类神经层上,我们就能对这种图片进行分类了.
在这里插入图片描述

6x6的图像,用3x3的Filter处理后,变为4x4的图像(未填充边界)。

feature map是每一个feature从原始图像中提取出来的“特征”。其中的值,越大表示对应位置和feature的匹配越完整,越小表示对应位置和feature的反面匹配越完整,而值接近0的表示对应位置没有任何匹配或者说没有什么关联

卷积层输入特征与输出特征尺寸和卷积核参数的关系为:

在这里插入图片描述其中i为input,输入。
k是卷积核大小,s是step步长。
p是padding,即填充

池化pooling

在这里插入图片描述
研究发现, 在每一次卷积的时候, 神经层可能会无意地丢失一些信息. 这时, 池化 (pooling) 就可以很好地解决这一问题. 而且池化是一个筛选过滤的过程, 能将 layer 中有用的信息筛选出来, 给下一个层分析. 同时也减轻了神经网络的计算负担 (具体细节参考). 也就是说在卷集的时候, 我们不压缩长宽, 尽量地保留更多信息, 压缩的工作就交给池化了,这样的一项附加工作能够很有效的提高准确性. 有了这些技术,我们就可以搭建一个属于我们自己的卷积神经网络啦.
卷积操作后,我们得到了一张张有着不同值的feature map,尽管数据量比原图少了很多,但还是过于庞大(比较深度学习动不动就几十万张训练图片),因此接下来的池化操作就可以发挥作用了,它最大的目标就是减少数据量
池化分为两种,Max Pooling 最大池化、Average Pooling平均池化
以最大池化为例,选择池化尺寸为2x2,在其内选出最大值写入新的feature map。
在这里插入图片描述
经过一次卷积与池化的结果
在这里插入图片描述

Flatten

在这里插入图片描述

就是将原本的数据拉成一维,送入一个全连接神经网络。

流程

在这里插入图片描述
这里要说明一下,假设输入一个28x28的图像,第一个卷积层有25个3x3的Fliter,每个Filter的参数有9个。
经过Max Pooling后,得到25x13x13的新图像(是个立体的),第二个卷积层有50个3x3的Fliter,每个Filter的参数有25x3x3 = 225个,因为现在每个Filter要处理的图像不再是平面的了!

流行的 CNN 结构

在这里插入图片描述

比较流行的一种搭建结构是这样, 从下到上的顺序,
首先是输入的图片(image), 经过一层卷积层 (convolution),
然后在用池化(pooling)方式处理卷积的信息,
这里使用的是 max pooling 的方式. 然后在经过一次同样的处理,
把得到的第二次处理的信息传入两层全连接的神经层 (fully connected),
这也是一般的两层神经网络层,最后在接上一个分类器(classifier)进行分类预测.

CNN用Tensorflow实现

采用的数据集依然是tensorflow里面的mnist数据集
我们需要先导入它

import tensorflow.compat.v1 as tf

tf.compat.v1.disable_eager_execution()
from tensorflow.examples.tutorials.mnist import input_data
mnist = input_data.read_data_sets('official_mnist/',one_hot=True)
tf.reset_default_graph()

定义卷积层的 weight bias

定义Weight变量,输入shape,返回变量的参数。其中我们使用tf.truncted_normal产生随机变量来进行初始化:

def weight_variable(shape): 
    inital=tf.truncted_normal(shape,stddev=0.1)
    return tf.Variable(initial)

同样的定义biase变量,输入shape ,返回变量的一些参数。其中我们使用tf.constant常量函数来进行初始化:

def bias_variable(shape): 
    initial=tf.constant(0.1,shape=shape) 
    return tf.Variable(initial)

定义卷积,tf.nn.conv2d函数是tensoflow里面的二维的卷积函数,x是图片的所有参数,W是此卷积层的权重,然后定义步长strides=[1,1,1,1]值,

strides[0]和strides[3]的两个1是默认值,中间两个1代表padding时在x方向运动一步,y方向运动一步,

padding采用的方式是SAME。

def conv2d(x,W):
    return tf.nn.conv2d(
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
回答: 要在Java中实现卷积神经网络CNN)算法,你可以使用深度学习框架,如TensorFlow或Keras,它们提供了Java的API。这些框架提供了丰富的函数和工具,可以方便地构建和训练CNN模型。 首先,你需要导入相应的库和依赖项。然后,你可以定义一个CNN模型,包括卷积层、池化层和全连接层等。你可以使用这些层来提取图像的特征并进行分类。 接下来,你需要准备训练数据和标签。你可以使用图像数据集,如MNIST或CIFAR-10,这些数据集包含了大量的图像和对应的标签。你可以使用这些数据来训练你的CNN模型。 然后,你可以使用训练数据来训练你的CNN模型。你可以使用反向传播算法(backpropagation)来更新模型的权重和偏置,以最小化损失函数。你可以使用梯度下降算法(gradient descent)来优化模型的参数。 最后,你可以使用测试数据来评估你的CNN模型的性能。你可以计算模型的准确率、精确率、召回率等指标来评估模型的性能。 总结起来,要在Java中实现卷积神经网络CNN)算法,你可以使用深度学习框架,如TensorFlow或Keras,通过定义模型、准备数据、训练模型和评估模型来完成。\[1\]\[2\]\[3\] #### 引用[.reference_title] - *1* *2* [卷积神经网络实例讲解,卷积神经网络训练算法](https://blog.csdn.net/shirley67269/article/details/127245417)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [基于Java机器学习自学笔记(第81-87天:CNN卷积神经网络的入门到全代码编写)](https://blog.csdn.net/qq_30016869/article/details/125072169)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值