使用卷积神经网络的一些技巧

神经网络方法研究及应用,神经网络预处理标准化 3、基于MATLAB语言的网络训练与仿真建立并初始化网络% ================S1 = 24;在学习阶段应该用大量的样本进行训练学习,通过样本的大量学习对神经网络的各层网络的连接权值进行修正,使其对样本有正确的识别结果,这就像人记数字一样,网络中的神经元就像是人脑细胞,权值的改变就像是人脑细胞的相互作用的改变,神经网络在样本学习中就像人记数字一样,学习样本时的网络权值调整就相当于人记住各个数字的形象,网络权值就是网络记住的内容,网络学习阶段就像人由不认识数字到认识数字反复学习过程是一样的。.. 阅读详情

转载自:https://mp.weixin.qq.com/s/kH4KyZFdFO01R0Nt1fE9yA

障排除前…

以下是在编写深度学习算法时要遵循的最佳实践,关于这个主题的很好的资料来源于CS231n课程讲义以及Bengio的综述论文。

Stanford's CS231n课程讲义:

http://cs231n.github.io/

Bengio的综述论文:

https://arxiv.org/pdf/1206.5533v2.pdf

1.使用适当的日志记录和有意义的变量名称。在TF中能够通过名称来跟踪不同的变量,并在TF的可视化工具TensorBoard中显示出计算图。

最重要的是,每隔几个训练步骤都要确保记录了相关的值,例如:step_number, accuracy, loss, learning_rate。适用的话,加上更具体的度量标准(例如在图像分割任务中使用mean_intersection_over_union,即mean_iou)。之后,就可以根据训练步骤画出损失曲线。

译者注:IoU,预测窗口与标记窗口之间的交并比。

2. 确保你的网络连接正确。使用TensorBoard或其他调试技术确保计算图中每个操作的输入和输出都准确无误,还要确保在将数据和标签送入网络之前对其进行适当的预处理和匹配。

3. 实施数据扩充(data augmentation)技术。虽然这一点并不是对所有情况都适用,但是如果处理图像的话,应用简单的数据扩充技术(例如镜像,旋转,随机裁剪和尺度变换,添加噪声,elastically deforming等),大部分时候会带来巨大的性能提升。而且TF具有大多数这些操作的内置函数,十分良心了。

4. 对所有层使用权重初始化和正则化。不要将权重初始化为相同的值,更糟的是将其初始化为0。这样做会带来对称性(symmetry)和潜在的梯度弥散问题,在大多数情况下会导致可怕的结果。通常,如果在权重初始化时遇到问题,可以考虑将Batch Normalization层添加到网络中。

BN论文链接:

https://arxiv.org/abs/1502.03167。

5. 确保正则项不会“压倒”损失函数中的其他项。关闭正则化,找出“损失”的数量级,然后适当地调整正则项大小。确保随着正则化强度的增加,损失也在增加。

6. 尝试过拟合一个小数据集。关闭正则化/随机失活/数据扩充,使用训练集的一小部分,让神经网络训练几个周期。确保可以实现零损失,如果没有,那么很可能什么地方出错了。

在某些情况下,将损失降到0尤其具有挑战性。例如,在图像语义分割中,如果你的损失涉及每个像素的softmax-ed logits和ground truth labels之间的交叉熵,那么可能真的难以将其降低到0。不过,你应当寻求达到接近100%的准确率,通过获取softmax-ed logits的argmax并将其与ground truth labels进行比较来计算。

译者注:在机器学习中,“ground truth”一词指的是监督学习技术中训练集分类的准确性,简单地说就是正确标注的数据。

7. 在过拟合上述小数据集的同时,找到合适的学习率。下面的内容直接引自Bengio的论文:最优学习率通常接近于不会增加训练误差的最大学习率,一种可以指导启发式设置学习率的观测方法是,例如,以较大的学习率开始,如果训练误差发散,就用最大学习率除以3再试试,直到观察不到发散为止。

8. 执行梯度检验(gradient checks)。如果你在计算图中使用自定义操作——即不是内置的TF操作,则梯度检验尤其重要。下面的链接有一些实现梯度检验的技巧。

Gradient checks:

http://cs231n.github.io/neural-networks-3/

 

如果损失(Loss Value)没有改善…

如果你训练了几个周期,损失还是没有改善,甚至还越来越大,则应该考虑下面几个步骤了:

1.确保使用了合理的损失函数,而且优化的是正确的张量。此处提供常见的损失函数列表。

https://en.wikipedia.org/wiki/Loss_functions_for_classification

2. 使用一个得当的优化器,此处提供了常用优化器列表。

https://keras.io/optimizers/

3. 确保变量真的在训练。为了检查这一点,你可以查看TensorBoard的直方图,或者编写一个脚本,在几个不同的训练实例中计算每个张量的范数(L1或 L∞),并打印出这些张量的名称。

如果你的变量未按预期进行训练,请参阅下列文章

https://gist.github.com/zeyademam/0f60821a0d36ea44eef496633b4430fc#variable-not-training

4. 调整初始学习率并实施适当的学习率计划(learning rate schedule),这可能是最具影响力的“修复”。如果损失越来越严重,可能是初始学习率太大了。另一方面,如果损失几乎不变,可能是初始学习率太小了。无论如何,一旦确定了有效的初始学习率,就应该进行学习率衰减。像ADAM这样的优化器会在内部实现学习率衰减,但是,这些学习率的更新通常会很慢,在优化器之上实现自己的学习率计划会是个好主意。

5. 确保没有过拟合。有一些方法可以实现过拟合,也有一些方法可以避免它。绘制损失值与训练周期的曲线图,如果曲线看起来像抛物线,那么很可能过拟合了。

请参阅这篇文章:

https://gist.github.com/zeyademam/0f60821a0d36ea44eef496633b4430fc#overfitting

 

如果变量没在训练…

像上面说的那样,使用TensorBoard的直方图,或编写一个脚本,在几个不同的训练实例中计算每个张量的范数,并打印出这些张量的名称。如果变量未按预期进行训练:

1. 确保TF将其视为可训练的变量。查看TF GraphKeys以获取更多详细信息。

https://www.tensorflow.org/api_docs/python/tf/GraphKeys

2. 确保没发生梯度弥散。如果下游变量(接近输出的变量)训练正常但上游变量(接近输入的变量)几乎不变,则可能遇上了梯度弥散的问题。

请参阅下面的文章:

https://gist.github.com/zeyademam/0f60821a0d36ea44eef496633b4430fc#vanishingexploding-gradients

3. 确保ReLus还在“放电”。如果大部分神经元“电压”被“钳制”为零,那么应该重新修正权重初始化策略,尝试使用不太激进的学习率计划,并尝试减少正则化(权重衰减)。

译者注:ReLu,线性整流函数,又称修正线性单元,是一种人工神经网络中常用的激活函数。

 

梯度弥散/梯度爆炸…

1. 考虑使用更好的权重初始化策略。如果在训练开始时梯度更新非常小,则这点尤其重要。

2. 考虑换一下激活函数。如果正在使用ReLus,请考虑使用leaky ReLu或MaxOut激活函数替换它们。你应该完全避免sigmoid激活函数,并远离tanh。

3.如果用递归神经网络的话,考虑使用LSTM。

详情请看这篇文章:

https://medium.com/@karpathy/yes-you-should-understand-backprop-e2f06eab496b

 

过拟合…

过拟合就是网络“记住”了训练数据的情况。如果网络在训练集和验证集上,准确率差别很大,可能它就过拟合了。

参见此处的Train / Val准确率部分:

http://cs231n.github.io/neural-networks-3/

1. 实施数据扩充技术。可上翻至本文第一节“故障排除前”中的内容。

2. 实施随机失活(dropout)。随机失活指在训练期间每个步骤随机地忽略掉一些神经元,在前向传播期间这些神经元的贡献被移除并且在反向传播期间它们不被更新。

了解更多信息:

https://machinelearningmastery.com/dropout-regularization-deep-learning-models-keras/

3. 增加正则化。

4. 实施批规范化操作(Batch normalization)。

详情请看这里:

https://arxiv.org/abs/1502.03167

5. 实施基于验证集的早期停止(early stopping)。由于网络训练了太多个周期,因此可能会发生过拟合,早期停止有助于消除这个问题。

参考这里:

https://en.wikipedia.org/wiki/Early_stopping#Validation-based_early_stopping

6. 如果其他一切都失败了,请使用较小的网络。这真的应该是你的最后手段,事实上这里的课程讲义对这种做法保持谨慎。

 

还能调试些什么…

1. 考虑使用加权的损失函数(weighted loss function)。例如,在图像语义分割中,神经网络对输入图像中的每个像素进行分类。与其他类相比,某些类可能很少出现,在这种情况下,权衡少见的类可能会改进mean_iou度量。

2. 更改网络架构。你之前的网络可能太深或太浅。

3. 考虑使用集成模型。

4. 用小数步长卷积(strided convolutions)替换最大值汇合层和平均值汇合层。

5. 执行彻底的超参数搜索。

6. 更改随机数种子。

7. 如果上面的方法都失败了,还是去寻找更多数据吧。

【Pytorch教程】:卷积神经网络 CNN Pytorch教程目录 Torch and Numpy 变量 (Variable) 激励函数 关系拟合(回归) 区分类型 (分类) 快速搭建法 批训练 加速神经网络训练 Optimizer优化器 卷积神经网络 CNN 目录Pytorch教程目录什么是卷积神经网络 CNN卷积 和 神经网络池化(pooling)流行的 CNN 结构CNN 卷积神经网络MNIST手写数据CNN模型训练可视化训练全部代码 什么是卷积神经网络 CNN 卷积 和 神经网络 卷积神经网络是如何运作的呢, 举一个识别图片的例子, 我们知 阅读详情

相关推荐

14种模型设计帮你改进你的卷积神经网络(CNN)

自2011年以来,深度卷积神经网络(CNN)在图像分类的工作中的表现就明显优于人类,它们已经成为在计算机视觉领域的一种标准,如图像分割,对象检测,场景标记,跟踪,文本检测等。 但,想要熟练掌握训练神经网络的能力并不是那么容易。与先前的机器学习思维一样,细节决定成败。但是,训练神经网络有更多的细节需要处理。你的数据和硬件有什么限制?你应该是从何种网络开始?你应该建立多少与卷积层相对的密集层?你的激...

jiangziya1221的博客 6639

卷积神经网络(CNN)的应用

基于ai技术的情绪照明智能系统的研究

m0_64096844的博客 1978

理解并掌握 卷积神经网络 CNN 的工作机制及其各项参数

1976年,莱昂哈德·亨特发明了卷积神经网络(Convolutional Neural Network),一举夺得计算机视觉领域的胜利。CNN 提供了一种高效且准确地解决图像识别、视频分析等复杂任务的方法。近年来,随着计算机视觉领域的飞速发展和深度学习技术的广泛应用,CNN 在多个行业如图像分类、目标检测、图像分割、文字识别等领域都取得了显著的成果。然而,如何理解并掌握 CNN 的工作机制及其各项参数仍是十分重要的,需要进一步的研究和教育。

AI天才研究院 1003

调试CNN的说明书

没有调试前必备的条件: 1.使用适当的日志记录和有意义的变量名称。在TF中能够通过名称来跟踪不同的变量,并在TF的可视化工具TensorBoard中显示出计算图。 最重要的是,每隔几个训练步骤都要确保记录了相关的值,例如:step_number, accuracy, loss, learning_rate。适用的话,加上更具体的度量标准(例如在图像分割任务中使用mean_intersectio...

weixin_40255359的博客 998

自然语言处理之语音识别:卷积神经网络(CNN)教程

自然语言处理(Natural Language Processing,NLP)是人工智能领域的一个重要分支,它关注如何使计算机能够理解、解释和生成人类语言。NLP结合了计算机科学、人工智能和语言学,旨在处理和分析文本数据,从而实现机器对自然语言的智能处理。

zhubeibei168的博客 1109

使用CNN进行年龄和性别分类的C++实践指南

卷积神经网络(CNN)是一种深度学习模型,主要应用于图像识别和视频分析领域。它的核心是通过卷积操作提取特征,这模仿了生物视觉系统的处理方式。自从Yann LeCun在1980年代提出早期的卷积神经网络以来,CNN在多个领域取得了重大突破。C++在机器学习领域中的应用越来越广泛,这主要得益于其出色的执行效率和性能优势。由于C++是一种编译型语言,相较于解释型语言,它在运行时可以提供更快速的执行速度和更低的系统资源消耗。这些优势在处理大规模数据集或对实时性要求较高的任务中显得尤为关键。

weixin_42527589的博客 999

图像识别:从卷积神经网络到实际应用

图像识别是深度学习中的一个重要应用领域,卷积神经网络(Convolutional Neural Networks, CNNs)在这项任务中取得了巨大的成功。

hellochenlian的专栏 663

韵乐Vinal X3X5 效果器说明书

韵乐Vinal X3/X5卡拉OK音频处理器调音软件说明书提供给初学者!

卷积神经网络的一般步骤,卷积神经网络基本操作

用一个卷积核滑动图片来提取某种特征(比如某个方向的边),然后激活函数用ReLU来压制梯度弥散。对得到的结果用另一个卷积核继续提取+reLU,然后池化(保留区域最大或者用区域平均来替换整个局部区域的值,保证平移不变性和一定程度上对过拟合的压制)之后“深度”的话,就会需要对池化后的结果继续用不同的卷积核进行“卷积+relu”再池化的工作。最后得到的实质是一个图片的深度特征,然后实际分类需要另外加一层,一般是softmax。(也就是说如果对一个现成的已经训练完毕的卷积神经网络模型,只保留除了最后一层之外的部分,然

wenangou的博客 4665

ESP8266 进行HDLC解码,AX.25,APRS

/************************************************************** 函数名:aprs_wait_begin() 参 数:无 返回值:bool true=得到合法脉冲,false=未得到 说 明:等待第1个833us高脉冲,判断范围 730-930,其他忽略 ***************************************************************/ bool aprs_wait_begin(){ stati

蓝蓝的博客 1629

论文分享|ECCV2022,PATnet,Cross-Domain Few-Shot Semantic Segmentation,CDFSS新基准,文末有复现教程

这篇论文提出的跨域小样本语义分割(CD-FSS)任务,旨在将源域学习的分割能力迁移到目标域,仅需少量标注样本。针对传统小样本分割方法在跨域场景性能下降的问题,作者提出了基于金字塔锚点变换的网络(PATNet),通过将域相关特征转换为域无关特征,并引入任务自适应微调推理(TFI)提升目标域适应能力。实验表明,PATNet在1-shot和5-shot设置下分别比现有方法提升8.49%和10.61%的准确率。同时,作者构建了CD-FSS基准并设计了任务难度评估指标。代码和数据集已开源,复现难度中等。

m0_74277350的博客 1095

用Python实现卷积神经网络CNN

内容:卷积神经网络的基本概念:卷积神经网络(CNN)是一种专门用于处理格数据(如图像)的深度学习模型。CNN通过使用卷积操作捕捉输入数据的空间特征,通常用于图像分类、目标检测和图像生成等任务。卷积层:卷积层是CNN的核心,通过卷积核(滤波器)在输入数据上滑动,提取局部特征。每个卷积核可以看作是一个特征提取器,能够捕捉图像中的特定模式。池化层:池化层通过对输入数据进行下采样,减少数据的尺寸,从而降低计算复杂度并提高模型的鲁棒性。常见的池化操作有最大池化和平均池化。全连接层。

qq_41698317的博客 2840

MODIS 遥感数据批量下载(使用Cygwin)

MODIS 遥感数据批量下载(使用Cygwin)包含Cygwin的下载教程

weixin_45913084的博客 916

资源|卷积神经网络使用技巧

点击上方“小白学视觉”,选择加"星标"或“置顶”重磅干货,第一时间送达一、资源简介好久没有分享学习资源了,今天给各位小伙伴分享一个关于如何使用卷积神经网络的学习资料。随着计算机视觉技术的发展,卷积神经网络距离我们已经不再遥远和神秘,在日常的学习和研究中越来越多的使用卷积神经网络来解决问题,可以说卷积神将网络是我们学习深度学习必须要面对的,因此如何而如何使用好卷积神经网络,...

小白学视觉 229

基于用户的协同过滤算法(userCF)

1.定义 userCF:当一个用户A需要个性化推荐时,可以先找到和他有相似兴趣的其他用户,然后把那些用户喜欢的、而用户A没有听说过的物品推荐给A。这种方法称为基于用户的协同过滤算法。 基于用户的协同过滤算法主要包括两个步骤: 2.第一步:找到和目标用户兴趣相似的用户集合。 利用行为的相似度计算兴趣的相似度。给定用户u和用户v,令N(u)表示用户u曾经有过正反馈的物品集合,令N(v)为用户v曾经有过...

jiangdongxiaobawang的博客 1万+

DeepSeek 框架和技术栈分析

DeepSeek 诞生于对更高效、更强大的深度学习计算和模型训练的追求。随着深度学习模型的规模不断增大,如大型语言模型(LLMs)和复杂的视觉模型,传统的框架在处理这些大规模模型时面临着性能瓶颈和资源利用效率低下的问题。DeepSeek 旨在解决这些问题,通过优化框架设计和采用先进的技术栈,实现更高效的模型训练和推理,同时降低计算成本。

yournameplease的专栏 1512

卷积神经网络(CNN)的参数优化方法

积神经网络的参数优化方法——调整网络结构是关键!!!你只需不停增加层,直到测试误差不再减少. 著名:本文是从 Michael Nielsen的电子书Neural Network and Deep Learning的深度学习那一章的卷积神经网络的参数优化方法的一些总结和摘录,并不是我自己的结论和做实验所得到的结果。我想Michael的实验结果更有说服力一些。本书在github上有中文翻译的版本,...

866 1万+

绿标短网址app.10086.cn/xxxxx移动短网址缩短接口网址api调用php方式解析

绿标短网址app.10086.cn/xxxxx 移动网缩短接口网址api调用php方式解析 app.10086.cn是移动网站的接口,可以制作移动网等第三方官方网站域名的任意生成接口,由于是认证企业,可以再抖音 微信 qq等第三方渠道正常打开不拦截提示,第三方网址,头条文章等,效果非常号,这里记录下api接口,纯技术php生成,具体规则可以去抖音的开放平台去申请对应接口 。这里用我php模拟抓包获取方式 GET http://www.app10086cn.cn/?i=app.10068.cnHTTP/1.1

qq_20300095的博客 5908

【动手学深度学习】卷积神经网络CNN的研究详情

本研究基于PyTorch框架,构建并优化LeNet卷积神经网络,探索其在Fashion-MNIST数据集上的性能。通过替换平均池化为最大池化、调整卷积核大小、增加通道数与层数、更换激活函数及优化学习率等策略,显著提升模型准确率。实验表明,最大池化更利于捕捉显著特征,深层结构与ReLU激活函数有助于增强表达能力。研究深化了对CNN特征提取、模式识别机制的理解,验证了网络结构设计对图像分类任务的关键影响。

朝花夕拾 4911

【OpenAI】Python:(1) 基于 Gym-CarRacing 的自动驾驶项目 | 前置知识介绍 | 项目环境准备 | 手把手带你一步步实现

本篇是关于多伦多大学自动驾驶专业项目 Gym-CarRacing 的博客。GYM-Box2D CarRacing 是一种在 OpenAI Gym 平台上开发和比较强化学习算法的模拟环境。它是流行的 Box2D 物理引擎的一个版本,经过修改以支持模拟汽车在赛道上行驶的物理过程。由于内容比较多所以分多次更新,本篇是关于前置知识介绍,以及项目环境准备的。

有道无术, 术尚可求。有术无道, 止于术。 5053

从0到全栈:C#/.NET/.NET Core终极学习路线——2025年开发者必修的12个阶段与30个实战项目

【代码】从0到全栈:C#/.NET/.NET Core终极学习路线——2024年开发者必修的12个阶段与30个实战项目。

墨夶的博客 2042

一文入门卷积神经网络:CNN通俗解析

摘要: CNN基础知识介绍及TensorFlow具体实现,对于初学者或者求职者而言是一份不可多得的资料。   定义:        简而言之,卷积神经网络(Convolutional Neural Networks)是一种深度学习模型或类似于人工神经网络的多层感知器,常用来分析视觉图像。卷积神经网络的创始人是着名的计算机科学家Yann LeCun,目前在Facebook工作,他是第一个通...

xuciyisheng的博客 2514

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

DL之CNN:计算机视觉之卷积神经网络算法—模型优化的简介、经验总结、案例应用之详细攻略

​ DL之CNN:计算机视觉之卷积神经网络算法—模型优化的简介、经验总结、案例应用之详细攻略 目录 计算机视觉之卷积神经网络算法—模型优化的简介 卷积神经网络CNN调参学习实践 计算机视觉之卷积神经网络算法—模型优化的简介 更新中…… 1、相关技术 DL之CNN优化技术:卷积神经网络算法简介之特有的优化技术及其代码实现——im2col技术等技术 https://yunyaniu.blog.youkuaiyun.com/article/details/88378670 2、经验总结 (1)

头部AI社区如有邀博主AI主题演讲请私信—心比天高,仗剑走天涯,保持热爱,奔赴向梦想!低调,专注,谦虚,自律,反思,成长,还算比较正能量的博主,公益免费传播…内心特别想在AI界做出一些可以推进历史进程影响力的技术(兴趣使然,有点小情怀,也有点使命感呀 5704

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

CNN卷积神经网络

CNN,全称为卷积神经网络(Convolutional Neural Network),是一种用于处理具有网格结构数据(如图像、视频和音频)的前馈神经网络。它是深度学习领域中最常用的模型之一,尤其适用于计算机视觉任务。

TGYAO的博客 5898

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

【免费下载】 CNN卷积神经网络PPT详解

CNN卷积神经网络PPT详解 【下载地址】CNN卷积神经网络PPT详解 本资源是一个深度学习领域内极为珍贵的教育材料,专门针对**卷积神经网络(CNN)**进行了详尽的PPT讲解。对于初学者和希望深化对CNN理解的学习者来说,这份资料是一份宝典。CNN作为图像识别、自然语言处理等众多人工智能应用的核心技术,其重要性不言而...

gitblog_06674的博客 1779
上一篇: 常见特征选择方法简要笔记
下一篇: Linux常用命令
Class_guy
博客等级 码龄9年 43粉丝 20原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值