《AV Foundation 开发秘籍》读书笔记(一)

AVFoundation(二):核心AVAsset AVFoundation是一个对多媒体操作的库。多媒体一般以文件或者流的形式存在,显而易见,直接对多媒体进行操作并不是一件愉快的事,这需要我们了解很多底层多媒体方面的知识。AVFoundation为我们提供了一个多媒体的载体类:AVAsset,在AVAsset中有着统一并且友好的接口,我们不需要了解太多多媒体的知识(当然还是需要了解一些的),就能对其进行操作。 阅读详情

第一章 AV Foundation 简介

1991 年苹果推出了 Quick Time 首次将数字音频和数字视频展现在用户面前,Quick Time 架构在之后 20 年间给数字多媒体这一领域带来了变革,对教育、游戏、娱乐产业的发展影响巨大。但是随着时间的推移,缺点也越来越多,于是苹果推出了一个新的框架,它就是 AV Foundation

1. AV Foundation 层级

AV Foundation 是用于处理基于时间的视听数据的高级框架。下图展示了 AV Foundation 在整个体系中所处的角色。

pic01

Core Audio

Core Audio 是由多个框架整合在一起的总称,为音频和 MIDI 内容的录制、播放和处理提供相应接口。Core Audio 也提供高层级的接口,比如通过 Audio Queue Services 框架,处理基本的音频播放和录音功能。同时也提供相对低层级的接口,尤其是 Audio Units 接口,提供了针对音频信号进行完全控制的功能,并通过 Audio Units 构建一些复杂的音频处理模式。如果想详细了解这一框架,建议阅读由 Chirs Adamson 和 Kevin Avila 撰写的 Learning Core Audio 一书。

Core Video

Core Video 是针对数字视频所提供的管道模式,为其相对的 Core Media 提供图片缓存和缓存池支持,提供了一个能够对数字视频逐帧访问的接口。该框架通过像素格式之间的转换并管理视频同步事项,使得复杂的工作得到了有效简化。

Core Media

Core Media 是 AV Foundation 所用到的低层级媒体管道的一部分。它提供针对音频样本和视频帧处理所需的低层级数据类型和接口。Core Media 还提供了基于 CMTime 数据类型的时基模型。

Core Animation

Core Animation 是合成及动画相关框架,主要功能就是提供美观、流畅的动画效果。对于视频内容的播放和视频捕获,AV Foundation 提供了硬件加速机制来对整个流程进行优化。AV Foundation 还可以利用 Core Animation 让开发者能够在视频编辑和播放过程中添加动画标题和图片效果。

处于高层级框架和低层级框架之间就是 AV Foundation,其提供了很多低层级框架才能实现的功能和性能,并且是以更简单的 OC 接口方式实现的。同时它也可以和高层级的框架无缝连接,比如 Media Player 和 Assets Library,使用这两个框架所提供的服务,也可以直接和 Core Media 和 Core Audio 进行交互。

2. AV Foundation 框架

AV Foundation 框架包含 100 多个类,如果将其按照功能单元进行分解,就会变得比较容易理解:

音频播放和记录

如上图所示 AV Foundation 方框右上角有一个小方格被单独标记为音频专用类,这是由 AV Foundation 提供的关于音频处理的一些早期功能。AVAudioPlayer 和 AVAudioRecorder 可以提供一种更简单的整合音频播放和记录的功能,但是并不是 AV Foundation 用于播放和记录音频的唯一方式,却是最容易学习、功能最强大的方法。

媒体文件检查

AV Foundation 提供检查正在使用的媒体文件的功能,比如是否可以用于回放,或者是否可以被编辑和导出,还可以获取内容持续时间,创建日期,首选播放音量。此外,该框架还基于 AVMetadataItem 类提供强大的元数据支持,这就允许开发者读写关于媒体资源的描述信息,比如唱片簿和艺术家信息。

视频播放

这是 AV Foundation 提供的最常用的功能,这一部分的核心类是 AVPlayer 和 AVPlayerItem,这两个类让你能够对资源的播放进行控制。

媒体捕捉

AV Foundation 提供了丰富的 API 集可以对摄像头等设备进行精密控制。摄像头捕捉的核心类是 AVCaptureSession,其作为所有活动的汇集点来接收摄像头设备由各路流发过来的视频和图片。

媒体编辑

AV Foundation 可以将多个音频和视频资源进行组合,允许修改和编辑独立的媒体片段、随时修改音频文件的参数以及添加动画标题和场景切换效果。

媒体处理

使用 AVAssetReader 和 AVAssetWritere 类来执行更高级的媒体处理任务,这些类可以直接访问视频帧和音频样本。

3. 数字媒体简介

虽然我们处在一个数字化的时代,但是我们还是更习惯模拟信息的世界。我们看到的和听到的都是通过模拟信号传递给我们,信号的频率和强度是在不断变化的。但是数字世界的信号是离散的,由 1 和 0 组成。将模拟信号转换成我们能够存储并传输的数字信号,要进过模数转换,我们将这个过程称为采样(Sampling)。

3.1 数字媒体采样

对媒体内容数字化主要有两种方式。第一种称为时间采样,这种方法捕捉一个信号周期内的变化。第二种称为空间采样,一般用在图片数字化和其他可视化媒体内容数字化的过程中。空间采样包含对一幅图片在一定分辨率之下捕捉其亮度和色度,进而创建由该图片的像素点数据所构成的数字化结果。

3.2 数字媒体压缩 - 色彩二次抽样

与我们熟知的 RGB 类似,YUV 也是一种颜色编码方法,主要用于电视系统和模拟视频领域。Y 表示亮度,也就是灰度值,UV 表示色度,用于指定像素的颜色。图片所有细节都保存在 Y 通道中,如果除去 Y 信息,剩下的就是一幅灰度图片;如果除去 UV 信息,则变成黑白影像。因为我们的眼睛对亮度的敏感度要高于颜色,所以我们可以大幅减少存储在每个像素中的颜色信息,不至于图片的质量严重受损,这个减少颜色数据的过程就称为色彩二次抽样。

YUV 主流的采样方式有三种:4:4:4、4:2:2、4:2:0,这些值就是设备所使用的色彩二次抽样的参数。一些专业相机以 4:4:4 的参数捕捉图像,但大部分情况下使用 4:2:2 的方式进行拍摄,iPhone 摄像头通常以 4:2:0 方式进行拍摄。

4:4:4
  • 每一个 Y 对应一组 UV 分量
  • 表示 UV 没有减少采样,即 Y、U、V 各占一个字节,加上 alpha 通道一个字节,共 4 字节,这个格式其实就是 24bpp 的 RGB 格式了。
4:2:2
  • 每两个 Y 共用一组 UV 分量
  • 表示 U、V 分量采样减半,比如第一个像素采样 YU,第二个像素采样 YV,以此类推。
4:2:0
  • 每四个 Y 共用一组 UV 分量
  • 这里的 0 意思是 U、V 分量隔行采样一次,比如第一行采样 4:2:0,第二行采样 4:0:2,以此类推。

pic02

3.3 数字媒体压缩 - 编解码器压缩

编解码器压缩分为无损压缩和有损压缩。有损压缩举例:人类可以听到的音频范围是 20 Hz - 20 kHz,但是我们真正敏感的频率区间是 1 kHz - 5 kHz,使用过滤技术来减少或消除特定频率,从而减少媒体内容中的冗余数据。

3.4 数字媒体压缩 - 视频编解码器

AV Foundation 提供有限的编解码器集合,主要归结为 H.264 和 Apple ProRes

3.4.1 H.264

H.264 / MPEG-4 第十部分,或称 AVC(Advanced Video Coding,高级视频编码),是由 ITU-T(国际电信联盟 - 电信标准化部门) 群组之一的 VCEG(视频编码专家组) 与 MPEG(动态图像专家组,也就是 ISO / IEC(国际标准化组织 / 国际电工委员会)联合工作组)联合组成的 JVT(联合视频组)开发。因 ITU-T H.264 标准和 ISO / IEC MPEG-4 AVC 标准有相同的技术内容,所以被共同管理。

H.264 和其他形式的 MPEG 压缩一样,通过空间(帧内压缩)和时间(帧间压缩)两个维度缩小视频文件的尺寸。

帧内压缩:

通过消除视频帧内的色彩和结构中的冗余信息来进行压缩,在不降低图片质量的情况下尽可能缩小尺寸,同 JEPG 压缩原理类似,通过这一过程创建的帧称为 I-frames

帧间压缩:

很多帧组合在一起作为一组图片(简称 GOP),对于 GOP 所存在的时间维度的冗余可以被消除。比如行驶的汽车,背景环境通常是固定的,就代表一个时间维度上的冗余,可以通过压缩方式消除。通过这一过程可创建的帧称为 B-frames 和 P-frames

I 帧,关键帧。包含创建完整图片需要的所有数据,每组都会有一个 I 帧。由于它是一个独立帧,其尺寸最大,但是解压最快;

P 帧,差别帧。表示这一帧和之前的 I 帧(或 P 帧)的差别,解码时需要用之前缓存的画面叠加上本帧定义的差别,生成最终画面;

B 帧,双向帧。记录本帧和前后帧的差别。不仅要取得之前的缓存画面,还有解码之后的画面,通过前后画面与本帧数据的叠加取得最终的画面。几乎不需要存储空间,但是解压比较耗时,因为它依赖于周围其他的帧。

H.264 一共有三种压缩标准,从低到高分别为:

Baseline

低效,只支持 I / P 帧,一般用于低阶或需要额外容错的应用,比如视频通话、手机视频等

Main

主要,提供 I / P / B 帧,一般用于主流消费类电子产品规格如 mp4、PSP、iPod 等

High

高端,在 Main 的基础上增加了 8x8 内部预测、自定义量化、无损视频编码和更多的YUV 格式(如 4:4:4),用于蓝光影片,高清电视

3.4.2 Apple ProRes

Apple ProRes 被认为是一个中间件或中间层编解码器,其独立于帧的,意味着只有 I 帧可以被使用,其更适用于内容编辑上。但是 ProRes 编解码器只在 MAC OS 上可用,iOS 只能使用 H.264

ProRes 是有损编解码器,但是它具有最高的编解码质量。Apple ProRes 422 使用 4:2:2 色彩二次抽样和 10 位的采样深度。Apple ProRes 4444 使用 4:4:4:4 色彩二次抽样,4 个表示支持无损 alpha 通道和高达 12 位的采样深度。

3.5 数字媒体压缩 - 音频编解码器

AAC(高级音频编码)是 H.264 标准相应的音频处理方式,目前是最主流的编码方式。这种格式比 MP3 格式有着显著的提升,可以在低比特率的前提下提供更高质量的音频,是 Web 上发布和传播中最理想的音频格式。而且相对 MP3 来说,AAC 没有来自证书和许可方面的限制。

注意:AV Foundation 和 Core Audio 支持 MP3 数据解码,但是不支持编码。

4. 文字转语音播放

#import <AVFoundation/AVFoundation.h>

// 语音表达
AVSpeechUtterance *utterance = [AVSpeechUtterance speechUtteranceWithString:@"哎呦我擦。你吓死我了。"];
utterance.voice              = [AVSpeechSynthesisVoice voiceWithLanguage:@"zh-CH"];  // 语言
utterance.rate               = 0.4f;  // 语速(0 ~ 1)
utterance.pitchMultiplier    = 1.0f;  // 音调(0.5 ~ 2.0)
utterance.postUtteranceDelay = 0.1f;  // 播放下一句有短暂的暂停

// 语音合成器
AVSpeechSynthesizer *synthesizer = [[AVSpeechSynthesizer alloc] init];
[synthesizer speakUtterance:utterance];
AVFoundation开发秘籍pdf AVFoundation开发秘籍 pdf 。 立即下载

相关推荐

AVFoundation 开发秘籍 ---带目录

视频处理 AVFounddation 带目录

AVFoundation开发秘籍笔记-01AVFoundation入门

一、概述 AVFoundation是可以用它来播放和创建基于时间的视听媒体的几个框架之一,它提供了基于时间的视听数据的详细界别上的OC接口。可以用它来检查、创建、编辑、重新编码媒体文件。也可以从设备得到输入流和实时捕捉回放过程中操控视频 用于处理基于时间的媒体数据的高级OC框架。充分利用了多核硬件的优势并大量使用block和Grand Central Dispatch(GCD)机制将复杂的计算...

学习笔记 1095

AV Foundation 开发秘籍

AV Foundation 开发秘籍,介绍iOS视听技术的一本入门书籍,字体还很清晰。

AVFoundation开发秘籍笔记-08读取与写入媒体

一、综述 AVFoundation定义了一组功能可以用于创建媒体应用程序时遇到的大部分用例场景。 还有一些功能不受AVFoundation框架的内置支持,需要使用框架的AVAssetReader和AVAssetWriter类提供的低级功能,可以直接处理媒体样本。 1、AVAssetReader 用于从AVAsset中读取媒体样本,通常会配置一个或多个AVAssetReaderOutpu...

学习笔记 1583

高清彩版 IOS AVFoundation 秘籍

高清彩版 IOS AVFoundation 秘籍

AVFoundation 开发秘籍——实践掌握iOS & OS X应用的视听处理技术

326页完整版。快速掌握使用AV Foundation开发iOS和OS X应用的技术如果想开发富媒体iOS或OS X应用程序,你可以使用苹果公司推出的AV Foundation框架来实现诸多神奇功能。不过AV Foundation框架基于最前沿的语言特征,极其庞大,而且相关文档较少;现在,Bob McCune撰写的这本 AV Foundation开发秘籍--实践掌握iOS & OS X应用的视听处理技术 为你铺就一条精通掌握这些卓越技术的高效途径。McCune生动的讲解和精彩的GitHub示例项目已帮助数以千计的苹果开发者领略到AV Foundation的魅力。McCune基于丰富的开发经验,带你创建紧贴实用的应用程序,让你切实掌握相关技术。通过学习本书,你将创建语音备忘录、自定义视频播放器、视频编辑器和图片/视频相机应用程序,将掌握从头开发高级媒体应用程序需要的所...

AVFoundation开发秘籍笔记:第6章 捕捉媒体

6.1 捕捉功能综述 AV Foundation的照片和视频捕捉功能从框架搭建之初就是它的一个强项。从iOS 4版本开始,开发者就可以直接访问iOS设备的摄像头和摄像头生成的数据,定义一个新的用于照片和视频应用的类。框架的捕捉功能仍然是苹果公司媒体工程师最关注的领域,每个新版本的发布都带来强大的新功能和提升。虽然核心的捕捉类在iOS和OS X上是一致的,但你会发现不同平台下的框架还是有一些区别,这些区别一般都是针对平台的定制功能。比如,Mac OSX为截屏功能定义了AVCaptureScreenInput

翻肚鱼儿的博客 901

swift-用Swift写了一个关于AVFoundation使用的demo

整合用Swift写了一个关于AVFoundation 使用的demo,包括拍摄 实时滤镜 实时写入 自定义导出分辨率等

《AV Foundation 开发秘籍》读书笔记(四)

有很多知识点通过笔记是无法表达清楚的,具体实现还需看代码理解的透彻。根据 Learning-AV-Foundation Chapter 4 自行封装了一个视频播放、设置字幕、获取视频缩略图的框架,下载地址:https://github.com/Mayan29/MYAVFoundation

轮子制造工厂 1826

Dirsearch的下载、安装和使用(全)

Dirsearch工具的下载、安装和使用,超详细超全面

weixin_68416970的博客 1万+

深度强化学习中的动作屏蔽(Action Masking)

在复杂环境中使用动作屏蔽,实现更好的训练效果

Kiek17的博客 5876

《AV Foundation 开发秘籍》读书笔记(三)

AV Foundation 把所有的代码设计围绕资源(assert)进行,AVAssert 是 AV Foundation 设计的核心。

轮子制造工厂 1798

解密微信DAT图片:一键转换JPG/PNG/GIF的实用指南

本文详细解析微信DAT图片的加密机制及转换方法,提供从定位文件到使用WeijieSoft工具一键转换JPG/PNG/GIF的完整指南。涵盖新旧版微信存储路径差异、批量处理技巧及常见问题解决方案,帮助用户高效恢复重要图片并释放存储空间。

weixin_29305337的博客 3615

《AV Foundation 开发秘籍》读书笔记(二)

《AV Foundation 开发秘籍》第二章 音频播放和录制

轮子制造工厂 1575

【Proteus】NE555纯硬件实现LED呼吸灯效果,附源文件,效果展示

本设计通过NE555与三极管的巧妙配合,仅用基础元件实现了呼吸灯效果。核心在于利用RC积分电路将PWM信号转换为控制电压,并通过负反馈动态调节占空比。Proteus仿真验证了方案的可行性,读者可进一步优化参数或扩展功能,探索更多硬件设计可能性。

2201_75797484的博客 2979

22、嵌入式软件随机延迟生成与加密算法防护技术

本文探讨了嵌入式软件中的随机延迟生成方法与块密码软件实现的高阶掩码及洗牌技术。重点介绍了浮动均值延迟生成方法,其在8位AVR平台上的实现效率为Θ(1),显著提升了抗相关功率分析(CPA)攻击的能力,相比传统方法更安全且轻量。同时,分析了高阶掩码与洗牌技术结合的方案,通过理论建模量化其对高级差分功率分析(DPA)攻击的抵抗能力,并以AES为例展示了该方案的应用流程。最后对比了不同防护技术在安全性与开销之间的权衡,为实际应用中选择合适的安全策略提供了依据。未来可进一步优化实现效率并融合多种防护手段以应对复杂安全

fern8的博客 86

《AV Foundation 开发秘籍》读书笔记(五)

第五章 AV Kit 用法AV Kit 可以简化基于 AV Foundation 框架且满足默认操作系统视觉效果和体验的视频播放器的创建过程。AV Kit 框架第一次出现在 Mac OS X Mavericks 版本中,从 iOS 8 开始被引入到 iOS 平台。

轮子制造工厂 565

【ROS2】手眼标定:moveit2_handeye_calib使用详解

moveit2_handeye_calib MoveIt2 官方的 手眼标定功能包,包含标定插件、图形化界面和示例程序。提供基于 ArUco/ChArUco 标定板的采集与求解功能。标定板下载aruco在线生成器。

郭老二 246

AVFoundation开发秘籍笔记-04视频播放

一、播放功能综述 1、AVPlayer AVPlayer用来播放基于时间的视听媒体的控制器对象。支持播放从本地、分步下载或通过HTTP Live Streaming协议得到的流媒体,并在多种播放场景中播放这些视频资源。 AVPlayer是一个不可见组件,如果播放MP3或AAC音频文件,那么没有可视化的用户界面不会有什么问题。如果是要播放一个QuickTime电影或一个MPEG-4视频,就...

学习笔记 7660

一套适合 ABAP 初级和中级开发人员,从入门到提高的 ABAP 学习教程

曾几何时,ABAP 就是 SAP 的代名词。ABAP 这门编程语言造就了 SAP 名噪一时的 R/3 产品,同时也是如今 SAP 旗舰级产品,SAP S/4HANA 底层的实现语言。 ABAP 不仅代表着 SAP 这家公司在企业级管理软件市场辉煌的过去,ABAP 自身也在不断地进化着。SAP 不仅在本地部署(On-Premise)领域继续保持着自己绝对的统治地位,而且在云应用领域(Software-as-a-Service, 简称 SaaS), 也推出了自己的解决方案,比如 SAP S/4HANA Clo

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 5915

三、参考比较法之城市建成区提取——提取

在正式开始提取之前,还是要继续啰嗦一下,其实基于夜间灯光数据建成区提取,可以分为好几个层次,基于县一级、市一级、省一级,很多论文的做法都是以市一级为准,也就是统计好市一级城市的每一年的统计年鉴中的建成区面积作为备用。有人可能会问为什么不以县一级,由于县一级的统计数据一般存在缺失,很难形成一个长时间序列的数据,所以一般采取的是市一级。前文也进行建议,如果确实要基于县一级进行提取可以参考前面理论介绍那篇文章中的相关建议。那么当我们确定阈值后如何将城市建成区提取出来?

端木宛白的博客家园 5401

AVFoundation框架理论+实战一(文本语音转换,web前端秘籍

这个类主要是一条一条话语,这些话语对象可以填充文本,语言,语速,音高等等,语言设置,如中文,英文等等具体的API点进类中去看。下面开始实战。

jixuczy的博客 2201

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

什么是4:4:4、4:2:2、4:2:0?了解图像压缩取样的方式

什么是4:4:4、4:2:2、4:2:0?了解图像压缩取样的方式 我们经常会看到4:4:4、4:2:2、4:2:0这样的字眼,比如你的5D拍摄的视频是4:2:0取样压缩的,又比如QuickTime的ProRes422格式,或者专业摄影机拍摄时是以4:4:4取样的。视频压缩通常被认为是数字格式特有的概念,但早在模拟信号时代就有了,数字格式的压缩只是变得更复杂了而已。在这个文章中,我们来看看什么是

Coding··· 7万+

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

深度学习工具包 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")

AVFoundation开发秘籍笔记-03资源和元数据

一、资源AVAsset AVAsset是一个抽象类和不可变类,定义媒体资源混合呈现的方式,将媒体资源的静态属性模块化成为一个整体,比如标题、时长和元数据等。 AVAsset不需要考虑媒体资源所具有的两个重要范畴:1、提供了对基本媒体格式的层抽象,不需要关注具体格式,只关注资源这个概念。2、隐藏资源的位置信息。 AVAsset本身不是媒体资源,但他可以作为时基媒体的容器,由一个或多个带有描述自...

学习笔记 7万+

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

上一篇: 《Effective Objective-C 2.0》读书笔记
下一篇: 《iOS 开发进阶(唐巧)》读书笔记
mayan29
博客等级 码龄11年 13粉丝 24原创
评论 5
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值