深度学习基础课程2笔记-卷积神经网络算法(CNN)

一,卷积神经网络的层级结构
• 1,数据输入层/ Input layer
• 2,卷积计算层/ CONV layer
• 3,ReLU激励层 / ReLU layer
• 4,池化层 / Pooling layer
• 5,全连接层 / FC layer

1,数据输入层
传入图片

2,卷积的计算
这里写图片描述

3,激励层
把卷积层输出结果做非线性映射。
这里写图片描述
CNN采用的激励函数一般为ReLU(The Rectified Linear Unit/修正线性单元),它的特点是收敛快,求梯度简单,但较脆弱,图像如下。
这里写图片描述
激励层的实践经验:
  ①不要用sigmoid!不要用sigmoid!不要用sigmoid!
  ② 首先试RELU,因为快,但要小心点
  ③ 如果2失效,请用Leaky ReLU或者Maxout
  ④ 某些情况下tanh倒是有不错的结果,但是很少

4,池化层
池化层夹在连续的卷积层中间, 用于压缩数据和参数的量,减小过拟合。简而言之,如果输入是图像的话,那么池化层的最主要作用就是压缩图像。
池化层的具体作用。
1). 特征不变性,也就是我们在图像处理中经常提到的特征的尺度不变性,池化操作就是图像的resize,平时一张狗的图像被缩小了一倍我们还能认出这是一张狗的照片,这说明这张图像中仍保留着狗最重要的特征,我们一看就能判断图像中画的是一只狗,图像压缩时去掉的信息只是一些无关紧要的信息,而留下的信息则是具有尺度不变性的特征,是最能表达图像的特征。
2). 特征降维,我们知道一幅图像含有的信息是很大的,特征也很多,但是有些信息对于我们做图像任务时没有太多用途或者有重复,我们可以把这类冗余信息去除,把最重要的特征抽取出来,这也是池化操作的一大作用。
3). 在一定程度上防止过拟合,更方便优化。
这里写图片描述
池化层用的方法有Max poolingaverage pooling,而实际用的较多的是Max pooling
这里就说一下Max pooling,其实思想非常简单。对于每个22的窗口选出最大的数作为输出矩阵的相应元素的值,比如输入矩阵第一个22窗口中最大的数是6,那么输出矩阵的第一个元素就是6,如此类推,具体如下图所示:
这里写图片描述

5,全连接层
两层之间所有神经元都有权重连接,通常全连接层在卷积神经网络尾部。也就是跟传统的神经网络神经元的连接方式是一样的:
这里写图片描述

一般CNN结构依次为
  1. INPUT
  2. [[CONV -> RELU]*N -> POOL?]*M
  3. [FC -> RELU]*K
  4. FC

卷积神经网络之训练算法
  1. 同一般机器学习算法,先定义Loss function,衡量和实际结果之间差距。
  2. 找到最小化损失函数的W和b, CNN中用的算法是SGD(随机梯度下降)。

卷积神经网络之优缺点
优点
  • 共享卷积核,对高维数据处理无压力
  • 无需手动选取特征,训练好权重,即得特征分类效果好
缺点
  • 需要调参,需要大样本量,训练最好要GPU
  • 物理含义不明确(也就说,我们并不知道没个卷积层到底提取到的是什么特征,而且神经网络本身就是一种难以解释的“黑箱模型”)

卷积神经网络之典型CNN
  • LeNet,这是最早用于数字识别的CNN
  • AlexNet, 2012 ILSVRC比赛远超第2名的CNN,比
  • LeNet更深,用多层小卷积层叠加替换单大卷积层。
  • ZF Net, 2013 ILSVRC比赛冠军
  • GoogLeNet, 2014 ILSVRC比赛冠军
  • VGGNet, 2014 ILSVRC比赛中的模型,图像识别略差于GoogLeNet,但是在很多图像转化学习问题(比如object detection)上效果奇好

卷积神经网络之 fine-tuning
何谓fine-tuning?
fine-tuning就是使用已用于其他目标、预训练好模型的权重或者部分权重,作为初始值开始训练。

那为什么我们不用随机选取选几个数作为权重初始值?原因很简单,第一,自己从头训练卷积神经网络容易出现问题;第二,fine-tuning能很快收敛到一个较理想的状态,省时又省心。

那fine-tuning的具体做法是?
  • 复用相同层的权重,新定义层取随机权重初始值
  • 调大新定义层的的学习率,调小复用层学习率

本篇文章原文是:https://www.cnblogs.com/skyfsm/p/6790245.html
按自己的理解进行了简化,主要是方便自己以后快速复习CNN思想

欢迎扫码关注我的微信公众号

在这里插入图片描述

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 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、付费专栏及课程。

余额充值