5分钟带你了解音视频开发

音视频开发入门基础知识(视频入门篇) 音视频开发基础知识的介绍 阅读详情

前言

想赚钱,第一点就得选对自己的方向,有的行业和领域,无论你如何努力,天花板也不过如此。选对时代的风口,就算是头猪都能被吹上天,今天我们就来聊聊音视频开发。

蓬勃发展的音视频开发

时至今日,短视频App可谓是如日中天,一片兴兴向荣。随着短视频的兴起,音视频开发也越来越受到重视,但是由于音视频开发涉及知识面比较广,入门门槛相对较高,让许许多多开发者望而生畏。接下来我介绍一下音视频开发的基础部分,帮助大家学习。

一. 颜色模式

RGB

RGB颜色模型的主要目的是在电子系统中检测,表示和显示图像,比如电视和计算机,但是在传统摄影中也有应用。

RGB

基础的部分不过多描述,更多内容点击标题见维基百科。

YUV

Y’UV的发明是由于彩色电视与黑白电视的过渡时期。黑白视频只有Y(Luma,Luminance)视频,也就是灰阶值。到了彩色电视规格的制定,是以YUV/YIQ的格式来处理彩色电视图像,把UV视作表示彩度的C(Chrominance或Chroma),如果忽略C信号,那么剩下的Y(Luma)信号就跟之前的黑白电视频号相同,这样一来便解决彩色电视机与黑白电视机的兼容问题。Y’UV最大的优点在于只需占用极少的带宽,因为人眼对亮度敏感,对色度不敏感,因此减少部分UV的数据量,但人眼感知不到。

YUV也称为YCbCr,对于每个分量如下:

  • Y:Luminance, 亮度,也就是灰度值。除了表示亮度信号外,还含有较多的绿色通道量。
  • U:Cb,蓝色通道与亮度的差值。
  • V:Cr,红色通道与亮度的差值。

如下图,可以看到3个分量的效果差值。

YUV示例图

RGB与YUV转换公式 (RGB取值范围均为0~255)

  • Y=0.299R+0.587G+0.114B ⁄ R=Y+1.14V
  • U=-0.147R-0.289G+0.436B ⁄ G=Y-0.39U-0.58V
  • V=0.615R-0.515G-0.100B ⁄ B=Y+2.03U

HSV

  • 色调H: 用角度度量,取值范围为0°~360°,从红色开始按逆时针方向计算,红色为0°,绿色为120°,蓝色为240°。它们的补色是:黄色为60°,青色为180°,品红为300°;

  • 饱和度S: 饱和度S表示颜色接近光谱色的程度。一种颜色,可以看成是某种光谱色与白色混合的结果。其中光谱色所占的比例愈大,颜色接近光谱色的程度就愈高,颜色的饱和度也就愈高。饱和度高,颜色则深而艳。光谱色的白光成分为0,饱和度达到最高。通常取值范围为0%~100%,值越大,颜色越饱和。

  • 明度V: 明度表示颜色明亮的程度,对于光源色,明度值与发光体的光亮度有关;对于物体色,此值和物体的透射比或反射比有关。通常取值范围为0%(黑)到100%(白)。

    hsv_1.png

hsv_2.png

RGB和CMY颜色模型都是面向硬件的,而HSV(Hue Saturation Value)颜色模型是面向用户的。
HSV模型的三维表示从RGB立方体演化而来。设想从RGB沿立方体对角线的白色顶点向黑色顶点观察,就可以看到立方体的六边形外形。六边形边界表示色彩,水平轴表示纯度,明度沿垂直轴测量。

HSV在做颜色检测方面比较常用,可以参考文章HSV颜色检测。


二. 视频基础概念

帧(Frame)

简单的理解帧就是为视频或者动画中的每一张画面,而视频和动画特效就是由无数张画面组合而成,每一张画面都是一帧。

帧数(Frames)

帧数其实就是为帧生成数量的简称,可以解释为静止画面的数量

帧率(Frame Rate)

帧率(Frame rate) = 帧数(Frames)/时间(Time),单位为帧每秒(f/s, frames per second, fps)。

刷新率

屏幕每秒画面被刷新的次数,分为垂直刷新率和水平刷新率,一般我们提到的都是指垂直刷新率,以赫兹(Hz)为单位,刷新率越高,图像就越稳定,图像显示就越自然清晰。

目前, 大多数显示器根据其设定按 30Hz、 60Hz、 120Hz 或者 144Hz 的频率进行刷新。 而其中最常见的刷新频率是 60 Hz。 这样做是为了继承以前电视机刷新频率为 60Hz 的设定。

帧率关键值
  • 10~12 FPS:由于人类眼睛的特殊生理结构,如果所看画面之帧率高于每秒约10至12帧的时候,就会认为是连贯的,此现象称之为视觉暂留。
  • 24 FPS:一般电影的拍摄及播放帧数是每秒24帧。
  • 60 FPS:这个帧率对人眼识别来说已经具备较高的平滑度。
  • 85 FPS:人类大脑处理视频的极限,人眼无法分辨更高频率的差异。
60FPS

在做页面性能优化时,常用60FPS作为一个基准,所以需要尽量让每一帧的渲染控制在16ms内,这样才能达到一秒60帧的流畅度。

分辨率

视频、图片的画面大小或尺寸。

码率/比特率

单位时间播放连续的媒体如压缩后的音频或视频的比特数量。常用单位“比特每秒”,缩写是“bit/s”。比特率越高,带宽消耗得越多。


三. CPU & GPU

CPU:中央处理器(英文全名:Central Processing Unit),包括运算器(算术逻辑运算单元,ALU,Arithmetic Logic Unit)和高速缓冲存储器(Cache)及实现它们之间联系的数据(Data)、控制及状态的总线(Bus)。

GPU:图形处理器(英语全名:Graphics Processing Unit),专为执行复杂的数学和几何计算而设计的,拥有2D或3D图形加速功能。

GPU相比于CPU,更强大的2D、3D图形计算能力,可以让CPU从图形处理的任务中解放出来,执行其他更多的系统任务,这样可以大大提高计算机的整体性能。

硬件加速

硬件加速(Hardware acceleration)就是利用硬件模块来替代软件算法以充分利用硬件所固有的快速特性。硬件加速通常比软件算法的效率要高。

将2D、3D图形计算相关工作交给GPU处理,从而释放CPU的压力,也是属于硬件加速的一种。

硬解和软解

硬解和上面的硬件加速对应,即使用硬件模块来解析视频、音频文件等,而软解即是用CPU去计算解析。


四. 视频封装格式(Container format)

格式全名开发商初版年限特点
MP4MP4Moving Picture Experts Group,即 MPEG(动态图像专家组)1998常用有损压缩格式,通用性强
AVIAudio Video Interleaved(音频视频交错格式)微软1992体积大算法简单
MOVQuickTime 影片格式Apple1991苹果专属格式对很多其他的播放器支持不是很友好
WMVWindows Media Video微软2003微软的专业视频格式,兼容性并不是很好
FLVAdobe Flash 网络流媒体格式Adobe2002被淘汰的早期网络视频格式
MKVMatroska 多媒体容器Matroska.org2002最有包容性的视频格式,能容纳无限量、多种不同类型编码的视频、音频及字幕流
WebMWebMGoogle2010谷歌推出的 HTML5 标准的网络视频标准,以MKV容器格式为基础开发
RMVBRMVBReal Networks1997根据不同的网络传输速率,而制定出不同的压缩比率,从而实现在低速率的网络上进行影像数据实时传送和播放,具有体积小,画质不错的优点。已过时。

更多参考 维基百科视频文件格式。


五. 视频编码格式(Codec)

1. MPEG:(Moving Picture Experts Group, ISO旗下的组织)

MPEG是Moving Picture Experts Group的简称。这个名字本来的含义是指一个研究视频和音频编码标准的“动态图像专家组”组织,成立于1988年,致力开发视频、音频的压缩编码技术。

版本用途
MPEG - 1VCD
MPEG - 2DVD、数字有线电视信号
MPEG - 4(第二部分)视频电话、网络传输、广播和媒体存储
2. H.26X : ITU-T VCEG(Visual Coding Experts Group,国际电联旗下的标准化组织)制定
版本用于
H.261老的视频会议和视频电话产品
H.262DVD、数字有线电视信号(与MPEG共同制定,与MPEG-2完全一致)
H.263视频会议、视频电话和网络视频
H.264高精度视频的录制、压缩和发布格式(与MPEG-4第十部分完全一致),当前主流
H.265H.264的两倍之压缩率,可支持4K分辨率甚至到超高画质电视,最高分辨率可达到8192×4320(8K分辨率)
3. H.264

当前主流的编码格式是H.264,这是由ITU-T VCEG和MPEG共同制定的标准,MPEG - 4第十部分内容也是H.264。

视频封装格式 & 视频编码格式

封装格式是提供了一个容器,用于存放视频、音频以及其他配置信息,而编码格式是指对视频画面内容进行压缩的一种标准。


六. 音频格式

  • WAV:因其文件扩展名为wav,微软和IBM联合开发的标准,数据本身的格式为PCM或压缩型,属于无损格式。
  • MP3 : MP3是一种音频压缩技术,其全称是动态影像专家压缩标准音频层面3(Moving Picture Experts Group Audio Layer III),简称为MP3。压缩比4:1~10:1之间。
  • AAC:Advanced Audio Coding, 出现于1997年,由Fraunhofer IIS、杜比实验室、AT&T、Sony、Nokia等公司共同开发。AAC压缩比通常为18:1。相比MP3,采用更高效的编码算法,音质更佳,文件更小。
  • Opus:Opus格式是一个开放格式,使用上没有任何专利或限制,比MP3、AAC、HE-AAC等常见格式,有更低的延迟和更好的声音压缩率。2012年7月2日,Opus被IETF批准用于标准化。

七. H.264编码介绍

IPB帧

  • I帧:帧内编码帧(intra picture),采用帧内压缩去掉空间冗余信息。
  • P帧:前向预测编码帧(predictive-frame),通过将图像序列中前面已经编码帧的时间冗余信息来压缩传输数据量的编码图像。参考前面的I帧或者P帧。
  • B帧:双向预测内插编码帧(bi-directional interpolated prediction frame),既考虑源图像序列前面的已编码帧,又顾及源图像序列后面的已编码帧之间的冗余信息,来压缩传输数据量的编码图像,也称为双向编码帧。参考前面一个的I帧或者P帧及其后面的一个P帧。

PTS和DTS

  • DTS(Decoding Time Stamp)是标识读入内存中bit流在什么时候开始送入解码器中进行解码。也就是解码顺序的时间戳。
  • PTS(Presentation Time Stamp)用于度量解码后的视频帧什么时候被显示出来。在没有B帧的情况下,DTS和PTS的输出顺序是一样的,一旦存在B帧,PTS和DTS则会不同。也就是显示顺序的时间戳。

GOP

即Group of picture(图像组),指两个I帧之间的距离,Reference(参考周期)指两个P帧之间的距离。

一个I帧所占用的字节数大于一个P帧,一个P帧所占用的字节数大于一个B帧。所以在码率不变的前提下,GOP值越大,P、B帧的数量会越多,平均每个I、P、B帧所占用的字节数就越多,也就更容易获取较好的图像质量;Reference越大,B帧的数量越多,同理也更容易获得较好的图像质量。

简而言之:

  • 字节大小:I > P > B
  • 解码顺序:I -> P -> B

GOP解码案例


更多Android开发详细资料扫码免费获得

请添加图片描述

写在最后

在技术领域内,没有任何一门课程可以让你学完后一劳永逸,再好的课程也只能是“师傅领进门,修行靠个人”。“学无止境”这句话,在任何技术领域,都不只是良好的习惯,更是程序员和工程师们不被时代淘汰、获得更好机会和发展的必要前提。

如果你觉得自己学习效率低,缺乏正确的指导,可以扫码,领取更多详细音视频资料,并加入我们资源丰富,学习氛围浓厚的技术圈一起学习交流吧!

加入我们吧!群内有许多来自一线的技术大牛,也有在小厂或外包公司奋斗的码农,我们致力打造一个平等,高质量的Android交流圈子,不一定能短期就让每个人的技术突飞猛进,但从长远来说,眼光,格局,长远发展的方向才是最重要的。

35岁中年危机大多是因为被短期的利益牵着走,过早压榨掉了价值,如果能一开始就树立一个正确的长远的职业规划。35岁后的你只会比周围的人更值钱。

5G时代音视频开发前景怎么样?音视频开发需要掌握哪些技术?(1) 网上学习 Android的资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。我搜集整理过这几年字节跳动,以及腾讯,阿里,华为,小米等公司的面试题,把面试的要求和技术点梳理成一份大而全的“ Android架构师”面试 Xmind(实际上比预期多花了不少精力),包含。网上学习 Android的资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。大家可以参考我的学习路线图进行学习,下面是我学习的路线。 阅读详情

相关推荐

WebRTC音视频开发

自研实时音视频(RTC)系统的架构在客户端、服务端、运维、测试和质量监控上都存在很多难点一个实时音视频应用共包括几个环节:采集、编码、前后处理、传输、解码、渲染等很多环节。每一个环节又有更细分的技术模块,比如前后处理环节有美颜、滤镜、回声消除、噪声抑制等,编解码有VP8、VP9、H.264、H.265等。

Dacian_zhou的博客 1059

音视频开发二:音视频知识总结

音视频知识总结

qq_38056514的博客 3677

记一次音视频开发面试,已拿offer

最近也是有想进行一些工作上的变动,所以也在四处投递简历,主要的岗位还是音视频开发的岗位,毕竟在这个岗位上自己还是会有一点点技术壁垒的。不过其实说实在的,C++方向上我觉得有几个方向真的很不错:流媒体相关、服务器后台相关、游戏相关。

资料qun832218493 2171

音视频开发--音视频基础

音视频基础

qq_45267014的博客 1436

音视频流媒体高级开发(FFmpeg6.0/WebRTC/RTMP/RTSP/编码解码)

开源方案简介(视频 |12分钟23秒)AppRTC服务器组成(视频 |04分钟38秒)准备工作(视频 |02分钟37秒)AppRTC必要软件安装(1)(视频 |21分钟12秒)AppRTC必要软件安装(2)(视频 |14分钟03秒)1coturncolliderapprtc(视频 |19分钟19秒)nginx代理和运行测试(视频 |11分钟08秒)解决跨域问题和总结(视频 |17分钟42秒)课程展望(视频 |09分钟10秒)

C/C++Linux、音视频、DPDK 2124

视频教程-FFmpeg音视频开发实战5 iOS/Android/windows/Linux -其他

FFmpeg音视频开发实战5 iOS/Android/windows/Linux ...

weixin_29087075的博客 935

5分钟带你了解,为什么要学HTML5大前端

HTML5作为万维网的核心语言标准,赋予了所有终端前所未有的兼容性和能力。通过Web轻松的运行在任何浏览器设备上。基于科技的发展,如今军事、医疗、游戏、社交、电商、金融、企业服务、o2o教育等诸多领域都离不开前端的身影!面对层出不穷的移动应用,移动优先已成趋势,前端技术必将成为互联网世界的新主人! HTML5到底是什么?HTML5是指第5代HTML(超文本标记语言),也指用HTML5语言制作的一切数字产品。网上的网页,多数都是由HTML写成的。“超文本”是指页面内可以包含图片、链接,甚至音乐、程序等非文字元

qf2019的博客 267

LabVIEW 调用MATLAB 进行图像处理的实现

程机械及设备的变形、振动、冲击、粗糙度、刚度和强度等特性,还可用在土木结构、水利设施的变形测量[4][5]。因此,该技术在机械、土木、水利、电器、航空航天、兵器工业及生物医学等领域的检测中具有非常重要的地位。将物面前方空间的散斑用摄像设备记录下来,当物体运动或由于受力而变形时,这些随机分布的散斑图也随之在空间按一定的规律运动,因此能用记录的散斑图在计算机上分析物体的运动和变形,这就是电子散斑技术。当物体的漫反射表面被激光照射时,漫反射的光波在物体表面的前方相互干涉,由于漫反射光的。

qq_37971227的博客 3874

终极metaRTC入门教程:5分钟上手跨平台音视频开发

想要快速掌握嵌入式设备和IoT设备的WebRTC开发吗?metaRTC正是您需要的终极解决方案!这个纯C语言编写的WebRTC SDK专为嵌入式系统、物联网设备和机器人应用设计,让您一次编码即可在所有主流平台上运行。在接下来的5分钟里,我将带您了解如何快速上手这个强大的跨平台音视频开发工具。 ## 🔥 为什么选择metaRTC? metaRTC是一个完整的WebRTC协议栈实现,特别适合资源

gitblog_02828的博客 863

Win 11 Fastboot驱动的详细安装教程

Fastboot驱动的详细安装教程

水w的博客 1万+

如何用DETR(detection transformer)训练自己的数据集

DETR(detection transformer)简介 DETR是Facebook AI的研究者提出的Transformer的视觉版本,是CNN和transformer的融合,实现了端到端的预测,主要用于目标检测和全景分割。 DETR的Github地址:link

weixin_50233398的博客 3万+

FastAPI 中实现 OAuth2 Scopes 的细粒度权限控制:Security、SecurityScopes 与依赖树机制全解

本文以 FastAPI 官方文档的 OAuth2 scopes 高级安全章节为核心,结合示例源码 [tutorial005_an_py310.py](https://link.gitcode.com/i/c51bfd6e848f4890876eda5cc3564ca8) 与框架底层实现([fastapi/security/oauth2.py](https://link.gitcode.com/i/

gitblog_00297的博客 464

软考软件评测师备考避坑指南:过来人告诉你这5个章节最容易丢分(附2024最新考纲解析)

本文为软考软件评测师考生提供备考避坑指南,深度解析5个高频失分章节,包括标准化与信息化基础、中间件技术、软件测试模型、白盒测试覆盖准则和性能测试指标。文章结合2024最新考纲,分享实战技巧和记忆口诀,帮助考生精准打击失分重灾区,提升备考效率。

weixin_29223603的博客 467

说好不哭,现在就带你了解直播类音视频测试

最近的热搜被周杰伦的《说好不哭》拿下了 QQ音乐热搜第一 知乎热榜指数过亿 微博热搜一次性上十几条 新歌一经首发,QQ音乐一度奔溃 我们不谈工作,不谈测试 先放下手中的鼠标,看看MV 看完之后,你心里有什么被触动了吗? 90后的青春,Jay是纯真和长情的代名词 说好不哭,是现代中年人最后的倔强 接下来,中年人们聊聊因为说好不哭奔溃的qq音乐 一款好的产品不一定必须...

测试帮日记 2118

S32K144后门密钥实战:如何用JLINK脚本绕过复位陷阱更新加密固件

本文详细介绍了在S32K144微控制器上,如何利用JLINK脚本绕过调试器默认复位陷阱,实现通过后门密钥安全更新加密固件的实战方案。针对汽车电子现场维护中常见的“解锁-复位-锁定”循环问题,文章提供了完整的JLinkScript定制方法、批处理工具及故障排除指南,帮助工程师高效完成固件升级。

weixin_29175469的博客 146

【老生谈算法】可视化通道流中瞬时涡量场的算法实现与MATLAB源码分析——瞬时涡量场

本文旨在探讨可视化通道流中瞬时涡量场的方法,并通过MATLAB编程实现这一过程。涡量场作为描述流体旋涡强度和方向的重要物理量,对于理解复杂流体运动具有重要意义。本文首先介绍了涡量场的基本概念,随后详细阐述了从测量数据收集到涡量场可视化的完整流程,并给出了相应的MATLAB源码。通过实际运行该源码,我们展示了涡量场的可视化结果,并讨论了其在流动结构识别和动力学行为理解中的应用。关键词: 涡量场;流体运动;MATLAB;可视化;PIV一、引言。

m0_53407570的博客 1126

5分钟搭建专业音视频开发环境:LazyVim插件配置指南

LazyVim是一款基于Neovim的懒人配置方案,通过[💤 lazy.nvim](https://github.com/folke/lazy.nvim)实现插件管理,让开发者无需从零开始配置,即可快速拥有一个功能完善的开发环境。无论是代码编辑、语法高亮还是LSP支持,LazyVim都提供了预设配置,特别适合希望快速搭建专业开发环境的音视频开发者。 ## 🚀 快速安装步骤 ### 1. 准

gitblog_00906的博客 501

cMake编译 VS2026+opencv4.12.0+opencv_contrib-4.12.0

本文提供了OpenCV 4.12.0集成CUDA、cuDNN和ONNX Runtime的详细编译指南。主要步骤包括:准备Visual Studio 2026、CMake 4.2.0、CUDA 12.6和cuDNN 9.16.0;设置无空格和中文的路径结构;配置关键CMake变量(如开启CUDA支持、指定路径等);以及最终的编译安装过程。注意事项包括:版本一致性检查、cuDNN文件复制、国内用户需手动获取.cache文件等。文章还提供了常见问题解决方案,如通过设置CUDA_NVCC_FLAGS参数解决VS版本

weixin_46624734的博客 1385

【新知实验室-TRTC开发】实时音视频之欢度世界杯

自己用5分钟搭建的实时视频直播应用,和好友一起不错过每一场世界杯。

qq_29061315的博客 3282

基于双目视觉的行车中障碍距离检测方法研究与目标跟踪

本文将介绍基于Python语言的双目视觉技术,以及如何使用该技术检测行车中的障碍物并跟踪目标。双目视觉利用两个摄像头模拟人眼的立体视觉,通过对两个摄像头所捕捉的图像进行比较和分析,可以得到物体的深度信息。首先,我们需要安装Python的OpenCV库,该库提供了丰富的图像处理和计算机视觉功能。接下来,我们进入一个循环中,不断读取左右图像,并将其转换为灰度图像。在视差图上,您可以实现目标检测和跟踪算法来识别和跟踪行车中的障碍物。请注意,上述代码只是一个简单示例,您可以根据具体需求和算法进行修改和扩展。

ZgnObjectivec的博客 277

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

5分钟带你了解,为什么要学HTML5大前端!

  HTML5作为万维网的核心语言标准,赋予了所有终端前所未有的兼容性和能力。通过Web轻松的运行在任何浏览器设备上。基于科技的发展,如今军事、医疗、游戏、社交、电商、金融、企业服务、o2o教育等诸多领域都离不开前端的身影!面对层出不穷的移动应用,移动优先已成趋势,前端技术必将成为互联网世界的新主人!   HTML5到底是什么?HTML5是指第5代HTML(超文本标记语言),也指用HTML5语言制作的一切数字产品。网上的网页,多数都是由HTML写成的。“超文本”是指页面内可以包含图片、链接,甚至音乐、程序

IT_studied的博客 388

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Goav快速入门:5分钟搭建第一个音视频解码器

Goav是Golang语言对FFmpeg的绑定库,让开发者能够轻松地在Go项目中实现音视频解码功能。本教程将带你快速掌握Goav的核心使用方法,通过简单几步完成一个基础的视频解码器,提取视频帧并保存为图片文件。 ## 🚀 准备工作:环境搭建 ### 安装Goav依赖 首先确保你的系统已安装FFmpeg开发库,然后通过以下命令获取Goav包: ```bash go get github.com

gitblog_00869的博客 1178

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

5G时代来临,前端开发工程师必须了解的音视频入门基础知识

5G时代来临,前端开发工程师必须了解的音视频入门基础知识

m0_60259116的博客 1867

音视频互动APP的开发

开发一款实时音视频互动APP(如视频会议、在线教育、社交互动)需要结合实时通信技术(RTC)、音视频编解码、网络传输优化等技术。

dt_dev的博客 677

视频教程-音视频高手课(致力于提高国内音视频开发水平)-Android

音视频高手课(致力于提高国内音视频开发水平) 从事IT行业七年,有丰富的编程...

weixin_28464569的博客 2915

html5网页制作_5分钟带你了解,为什么要学HTML5大前端

  HTML5作为万维网的核心语言标准,赋予了所有终端前所未有的兼容性和能力。通过Web轻松的运行在任何浏览器设备上。基于科技的发展,如今军事、医疗、游戏、社交、电商、金融、企业服务、o2o教育等诸多领域都离不开前端的身影!面对层出不穷的移动应用,移动优先已成趋势,前端技术必将成为互联网世界的新主人!   HTML5到底是什么?HTML5是指第5代HTML(超文本标记语言),也指用HTML5语言制...

weixin_30699957的博客 135
上一篇: 最可怕的是,那些同级Android程序员比你还努力啊
下一篇: 微信MMKV源码解析
Agent学习路线
博客等级 码龄6年 1万+粉丝 1904原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值