神经网络算法开发学习总结--算法应用及优化

2023-10-27

1)算法目标设定

   首先要确定一个算法目标及约束条件,比如运行时间、硬件内存限制、准确度等选择算法。

 

学习效果一般尽量采用单个指标进行评估,对于 N 个评价指标,选择其中一个指标作为优化指标,选择剩下的 N-1 个指标作为满足指标。

 

比如针对分类,有些场合关注查准率,有些场合关注查全率,而有些是用F1 score来评估。这些效果跟具体应用需求相关。

 

另外还应该确定应用的最后一级输出,比如除了分类外,是否还应该输出位置或者特征点,制定对应的代价函数。

 

2) 优化流程及确认优化方向

 

  深度学习时,一般可以把数据集分为Training set、Dev set、Test set。

  Training set:一般用于训练模型。

  Dev set:用于评估不同算法以及不同超参数训练出来的模型在Dev set上的效果。

  Test set: 选定模型后在测试集上评估效果。

 

  算法的优化流程一般如下:

  • Fit Training set well
  • Fit Dev set well
  • Fit Test set well
  • Perform well in real world

  

降低Training Set的错误率和降低Dev set的错误率有不同的优化方法,因此要先判断算法的优化方向。这个一般可以通过对比偏差与方差来做判断。

在自然感知上的问题,如计算机视觉、语音识别、自然语言处理,目前机器识别还很难超过人类专家水平。以图片分类为例,人类专家团队的水平可以做到0.3%,可以作为一个比较基准,以下是一种训练结果:

Base error:0.3%,

Training error :1.0%

Dev error: 1.1%

当 (Training error - Base error = 0.7%)超过(Dev error - Training error=0.1%)时,算法的优化方向应该去寻找降低训练误差的方法,比如增加迭代次数,找更多的数据,更深的网络等。

反之,算法的努力方向是降低方差,这时要采用dropout、正则化或者寻找新的网络结构等方法。

 

如果训练集和验证集错误率都很低,而实际场景使用时错误率比较高,可能就是开发集和真实场景数据不匹配问题,也就是他们的数据分布不同。这时就要想办法把更多真实数据引入到训练集和开发集中。 

 

3)优化策略

  • 错误分析

错误分析一般是人工进行的,方法是对错误分类的样本进行归类分析,然后改进算法,解决比例最高的那一类错误。

 

  • 超参数种类及范围选择

超参数范围选择一般不会用线性坐标,而应该用对数坐标:

比如学习率的选择,我们需要将区间对数化来采样。例如我们将[0.0001,1]转化成四个区间[0.0001,0.001],[0.001,0.01],[0.01,0.1],[0.1,1],每个区间各取几个数,而不是直接在[0.0001,1]上平均做选择。

  

  • 正交化思想应用

调节超参数,优化自己想改善的性能,而不会影响其他性能。

应用正交化的思想,我们可以独立地解决高偏差和高方差的问题。

解决高偏差问题的方法有:

  • 训练更大的模型
  • 训练更长时间 / 使用更好的优化算法(如使用动量、RMSprop、Adam 等)
  • 调整神经网络结构(如调整网络层数、激活函数,使用 CNN、RNN 等)/ 进行超参数搜索

解决高方差问题的方法有:

  • 获取更多数据
  • 正则化(如 L2 正则化、Dropout 等)
  • 调整神经网络结构 / 进行超参数搜索

 

  • 迁移学习

当新的学习任务的训练样本数量不足时,可以采用迁移学习进行算法优化。

比如一个训练好的学习猫的网络,用于其他图片学习。可以把以下的红色部分去掉,创建一些新的网络,作为新的层,新创建层的参数进行随机初始化,使用新任务的数据集,重新进行训练。

http://198.13.48.192/wp-content/uploads/2018/01/Screen-Shot-2018-01-10-at-9.37.38-PM.png

迁移学习的前提条件如下:

  • 任务 A 和任务 B 具有相同的输入 x
  • 任务 A 的可用数据远远多于任务 B
  • 任务 A 的低层特征有益于任务 B 的学习

 

4)网络模型简化

    精通训练算法情况下设计层数核节点更小的网络,精度下降可接受范围。

   

 

5)网络模型压缩

这个主要以深鉴为代表,针对训练后的模型进行压缩,在边缘设备部署推理功能时降低对计算和存储的需求。神经网络压缩算法,能够在保证基本不损失算法精度的前提下,将网络模型的计算量和规模压缩数倍至数十倍。

深鉴科技网络压缩算法原理:

 

  1. 剪枝Pruning,发现网络中对总体结果影响不大的权重,直接去掉它们。比如直接去掉权重绝对值小于0.1的连接,再进行fine-tune
  2. 第二个步骤是利用Code Book做量化。它是说把32bit长度的浮点数压缩到8bit甚至4bit。
  3. 用霍夫曼编码的形式存储数据

 

 

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

神经网络算法开发学习总结--算法应用及优化 的相关文章

  • 如何给Python轻应用添加新的组件:Python轻应用扩展适配介绍

    AliOS Things 3 3 0新版本中 其中非常中的一个特点 就是支持Python轻应用 也就是可以直接使用Python代码来写物联网程序 并且控制软件设备 这是HaaS物联网设备云端一体Low Code开发框架的核心之一 那本文讲介
  • C++ 惯用法之 copy and swap

    背景 STL 中提供了 swap 算法 用于交换两个对象的值 对于资源管理类 我们可以提供自定义的高效 swap 以仅交换指针 通常包含资源 指针 的类需要提供自定义的拷贝及移动相关操作函数 资源管理类 概述 通常包含资源 指针 的类需要提
  • Talib技术因子详解(十)

    talib安装方式 pip install Ta lib Tushare数据获取请参考 金融量化分析基础环境搭建 数据获取代码请参考 Talib技术因子详解 一 101 CDLPIERCING名称 Piercing Pattern 刺透形态
  • JS中获取URL中参数的4种方法

    方法一 正则 function getQueryString name var reg new RegExp name i var r window location search substr 1 match reg if r null
  • 如何在 JavaScript 中将数组转为对象

    首先 我们需要明白对象具有键和值 const object key value 如果我们想把某个东西转换成一个对象 我们需要传递具有这两个要求的东西 键和值 满足这些要求的参数有两种类型 具有嵌套键值对的数组 Map 对象 数组 这是一个带
  • C语言常见的陷阱与缺陷

    1 不等同于 在刚接触c语言的时候 这属于是初学者常见的错误 是赋值符 是关系运算符 当我们在使用if判断语句的时候 初学者很容易犯的一个错误 就是把if x 1 写成if x 1 这样写时编译器并不会报错 因为后者会被解析为把1赋值给x
  • vue中ECharts使用

    第一步 下载echarts 并导入 npm install echarts save import echarts from echarts 导入echarts import from lodash 导入数据合并 第二部 在绘图前我们需要为
  • 现场!李飞飞斯坦福对话基因编辑发明人杜德纳:两大科技的伦理和创新走向何方?...

    热点追踪 深度探讨 实地探访 商务合作 本文来源微信公众号 硅谷洞察 ID guigudiyixian 硅谷洞察 链接硅谷资源的第一入口 本文由硅谷洞察原创 首发于腾讯科技 未经硅谷洞察或腾讯科技授权 请勿转载 人工智能和基因编辑无疑是两大
  • win11使用wsl2安装Linux子系统

    WSL Windows subsystem for Linux 顾名思义 就是在Windows中使用的Linux子系统 使开发者能够在window中无障碍使用Linux系统 下面介绍一下怎么在win11环境中搭建wsl2 1 开启子系统功能
  • Docker容器中Mysql数据的导入/导出详解

    前言 Mysql数据的导入导出我们都知道一个mysqldump命令就能够解决 但如果是运行在docker环境下的mysql呢 解决办法其实还是用mysqldump命令 但是我们需要进入docker的mysql容器内去执行它 并且通过配置vo
  • 《软件建模与设计》学习笔记(一)——引言

    软件建模与设计 学习笔记 一 引言 引言 1 在用例建模中 系统的功能性需求按照用例和参与者进行定义 静态建模 提供了系统的结构化视图 类按照七属性以及与其他类的关系进行定义 动态建模提供了系统的行为视图 用例是通过对象之间的交互来实现的
  • windows自定义命令

    用习惯了ls 用dir不习惯 mac一直是使用ins命令编译 不想再敲那么长的命令 找个目录 写文件 例如 C Users Administrator Documents 然后将这个目录加入到环境变量里面 我的电脑 右击 属性 高级系统设置
  • 工具类GlobalCache

    package com neo config import org springframework stereotype Component import java util Map import java util concurrent
  • 解决Hololens2配置MRTK2.7版本官方教程中的一个问题

    具体的配置可以参考官方的MRTK2 7配置教程 https docs microsoft com en us windows mixed reality develop unity tutorials mr learning base 02
  • 配置qnx6.6中screen 环境变量

    锋影 e mail 174176320 qq com 配置qnx6 6 中 screen 环境变量 根据 Screen Graphics Subsystem Developer s Guide 总结 停止 screen 进程 slay sc
  • plsql developer 通过ip链接数据库

    数据库 ip 1521 sid 或 ip sid
  • oracle因为日志错误无法打开

    今天在启动我得数据库时 发现数据库只能mounted 无法打开 提示错误 今天在启动我得数据库时 发现数据库只能mounted 无法打开 提示错误 SQL gt select open mode from v database OPEN M
  • Docker Swarm集群搭建以及服务命令等操作

    前言 之前都是采用rancher可视化管理工具进行管理K8S进一步管理容器 但是每次机器宕机后rancher中集群特别容易挂掉 出现的问题五花八门 在网上很难搜到解决方案 所以准备采用docker官方集群管理平台Swarm管理容器 一 do

随机推荐

  • The Reactive Manifesto(响应式宣言)

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 版本 2 0 2014 年 9 月 16 日发布 在不同领域中深耕的组织都在不约而同地尝试发现相似的软件构建模式 希望这些系统会更健壮 更具回弹性 更灵活 也能更好地满足现
  • oracle 分区表 详

    转载自 http blog itpub net 31401608 viewspace 2147665 1 表空间及分区表的概念 表空间 是一个或多个数据文件的集合 所有的数据对象都存放在指定的表空间中 但主要存放的是表 所以称作表空间 分区
  • 入站规则和出站规则_关于防火墙入站(inbound)出站(outbound)方式的解释

    防火墙是一个重要的安全模块 它能够限制网络的访问 现在有一个要求那就是要让主机A能够访问主机B 主机B不能访问主机A 那么防火墙能够做到么 答案是可以的 当主机A的防火墙入站规则限制了主机B 那么主机B想访问主机A的时候 发出的网络包确实会
  • Echart 地图开启缩放之后,中心点位置偏移

    把 geo center 设为 undefined geo map china center undefined roam true
  • Nginx流控限制

    Nginx流控 流量限制 rate limiting 是Nginx中一个非常实用 却经常被错误理解和错误配置的功能 我们可以用来限制用户在给定时间内HTTP请求的数量 请求 可以是一个简单网站首页的GET请求 也可以是登录表单的POST请求
  • .ajax表单校验插件,表单验证插件——validate

    表单验证插件 表单验证插件 邮箱 function frmV validate 自定义验证规则 rules 错误提示位置 errorPlacement function error element error appendTo tip di
  • 什么是用户增长? (超详细)

    一 概况 原因 随着人口红利的衰减 互联网流量红利的马太效应显现 这意味着成本的大幅度增加 企业必须改变过去粗放型的营销和运营方式 用更高效更低成本实现快速增长 定义 通过实验和数据驱动 聚焦整个用户生命周期的方法论 在任何一家公司 任何业
  • jetbrains全家桶

    到期时间 19年6月份 SXXI7H41YN eyJsaWNlbnNlSWQiOiJTWFhJN0g0MVlOIiwibGljZW5zZWVOYW1lIjoicGF5bmUgd2FuZyIsImFzc2lnbmVlTmFtZSI6IiIsI
  • C++项目:高并发内存池

    文章目录 项目介绍 什么是内存池 池化技术 内存池 malloc 页 定长的内存池 对比测试 高并发内存池整体框架设计 thread cache 整体设计 哈希桶映射对齐规则 TLS无锁访问 Central Cache Span SpanL
  • 时分秒与时间戳相互转化(sys.argv)

    import sys 把时分秒转化为时间戳 def countDown time s 0 hour time split 0 min time split 1 sec time split 2 s int hour 3600 int min
  • MKL的矩阵运算

    矩阵与矩阵的乘法 分为双精度的cblas sgemm和单精度的cblas sgemm 两个函数的参数意义一样 只是类型不一样 运算式 C alpha A B beta C 一般取alpha 1 0 beta 0 0 即计算式 C A B c
  • LateX环境安装与配置--包括常见安装失败错误更正(TeX Live 2021及TexStudio)

    目录 一 前言 二 下载镜像文件 1 打开网址 点击 On DVD 2 点击下载ISO镜像文件 3 选择一个最近的镜像网站进行下载 4 下载镜像文件 5 打开镜像文件 三 安装 1 修改安装内容及目录 2 出错问题 lt 1 gt 此电脑
  • pandas从mongo中导出数据存入excel或csv

    import pandas as pd import pymongo mongo不带密码连接 con pymongo MongoClient ip mongo带密码连接 con pymongo MongoClient mongodb for
  • SQL_les0/基础知识/联合注入常用语句与相关技巧

    SQL注入 一种针对数据库的攻击方式 危害 数据被破坏 数据被篡改 原理 攻击者通过构造不同的SQL语句来实现对数据库的操作 常见数据库 Oracle SQL Server DB2 PostgreSQL MySQL Access 使用SQL
  • 【图像去雾】Contrastive Learning for Compact Single Image Dehazing阅读

    论文 https arxiv org pdf 2104 09367 pdfhttps arxiv org pdf 2104 09367 pdf 代码 https github com GlassyWu AECR Nethttps githu
  • MongoDB修改数据库名,collection名库名

    修改数据库名 db copyDatabase test test1 db copyDatabase old name new name use test use old name db
  • Qt之读写文件

    1 思路 读写文件的基本操作 读文件 写文件 打开文件 打开文件 读取文件 写入文件 关闭文件 关闭文件 2 QFile实现读写文件 QFile类提供读写文件的接口 它的构造函数如下 QFile const QString name QFi
  • iOS架构师_观察者模式

    定义 观察者模式 有时又被称为模型 视图 View 模式 源 收听者 Listener 模式或从属者模式 一个目标物件管理所有相依于它的观察者物件 并且在它本身的状态改变时主动发出通知 这通常透过呼叫各观察者所提供的方法来实现 此种模式通常
  • 初学java笔记(含遇到的问题及解决方法)

    java浮点数保留n个小数位问题 法一 import java text DecimalFormat DecimalFormat res new DecimalFormat 0 000 System out println res form
  • 神经网络算法开发学习总结--算法应用及优化

    1 算法目标设定 首先要确定一个算法目标及约束条件 比如运行时间 硬件内存限制 准确度等选择算法 学习效果一般尽量采用单个指标进行评估 对于 N 个评价指标 选择其中一个指标作为优化指标 选择剩下的 N 1 个指标作为满足指标 比如针对分类