App Extension编程指南(iOS8/OS X v10.10):创建应用扩展

学Simulink——基于大数据处理与云计算的场景实例:无人机与云计算中心之间的高效数据传输链路设计 本文以无人机与云计算中心的高效数据传输链路设计为例,手把手指导使用Simulink进行系统级建模。针对智慧城市、灾害监测等场景中无人机采集的海量数据(视频、图像、点云等),构建包含数据源、传输协议、无线链路、云接入和性能分析的五层架构模型。通过智能数据压缩、多链路聚合和QoS优先级调度等关键技术,实现5G+Wi-Fi等多通信技术的自适应切换。仿真结果表明,5G+Wi-Fi链路聚合在城市环境中表现最优,而4G+卫星组合适合偏远地区。该模型为无人机实时数据传输提供了有效的设计方法和优化方向,可拓展至边缘计算、A 阅读详情
本节由CocoaChina翻译组成员DevTalking ( 博客  )翻译自苹果官方文档  App Extension Programming Guide--Creating an App Extension 一节,敬请勘误。欢迎加入我们的翻译小组,详情请参看: CocoaChina编辑和译者招募 !   
 
当你准备好开发一个应用扩展时,可以从选择一个支持你想执行的任务的扩展点开始。然后选择适用于你所选的扩展点的Xcode模板,如果需要的话,可使用自定义代码和自定义用户界面来增强默认文件。最后,在你调试并优化你的应用扩展之后,就可以打包进你的应用程序给用户使用了。
 
从选择正确的扩展点开始
每个扩展点都针对一个定义明确的用户场景,你首先要清楚这个应用能为用户提供什么样的功能,所以要选择一个支持该功能的扩展点。这是非常关键的,因为每个扩展点定义了不同的API,为你提供不同的功能开发,所以如果选错了扩展点,那么很有可能无法实现想要的功能。表1-1列出了iOS和OS X中支持的所有扩展点。
 
选定了一个适用于应用扩展的扩展点后,在你的containing app中会有一个新的Target。添加应用扩展Target最简单的方式就是使用Xcode提供的模板,这些模板为扩展点提供了预配置。
 
你可以通过菜单选择 File > New > Target在你的Xcode工程中添加一个新Target。在左边的侧边栏中,选择iOS或OS X的Application Extension选项,然后在右边面板呈现的Xcode 模板中选择你想要创建的应用扩展模板,如下图所示:
 
选择好模板,并在工程中添加Target,在自定义扩展代码之前,你可以试着编译并运行一下项目。如果你是基于Xcode提供的模板创建的扩展,那么当编译成功后,就会生成一个扩展名为.appex的应用扩展包。
 
注意64位的架构:
一个应用程序扩展在Architectures设置中必须要包含arm64的架构,否则在上传App Store时会被拒绝。创建完一个应用扩展后,你可以在Xcode的“Standard architectures”设置选项中设置arm64架构。
 
如果你的包含扩展的应用程序使用了一些嵌入框架,那么你的应用程序也必须要包含arm64架构,否则上传App Store时也会被拒绝。
 
关于64位架构开发环境的更多信息,请根据你的target平台参阅64-Bit Transition Guide for Cocoa Touch或者64-Bit Transition Guide for Cocoa。
 
在大多数情况下,你可以通过在System Preferences或Settings中启用应用扩展或者授予权限来测试默认的应用扩展,然后可以通过其他应用来访问它。比如你可以在OS X系统中通过Safari中打开一个页面来测试分享扩展,点击分享按钮,然后选择你要测试的扩展即可。
 
检查默认的扩展模板
一般情况下,每个扩展模板都包含一个属性列表文件(就是Info.plist文件),一个View Controller类和一个默认的UI,这些都是扩展点定义的。默认的View Controller类(或principal class)都含有扩展点对应功能的方法,需要我们去实现。
 
应用扩展Target的Info.plist文件除了识别扩展点外还罗列了应用扩展的详细信息。最低限度上讲,该文件中包含一个NSExtension key、一个key的字典以及扩展点指定的值。比如Key NSExtensionPointIdentifier的值就是扩展点的反向DNS名称,比如com.apple.widget-extension。在应用扩展的NSExtension字典中还有其他的Key和值:
 
NSExtensionAttributes:这是一个描述扩展点具体属性的字典,就像照片编辑扩展中的PHSupportedMediaTypes一样。
NSExtensionPrincipalClass:这是扩展模板创建的主体视图控制器类,比如SharingViewController。当载体应用程序(host app)调用扩展时,扩展点会实例化这个类。
NSExtensionMainStoryboard(只适用于iOS):扩展默认的Storyboard文件,一般名为MainInterface。
 
除了在属性列表中设置以外,扩展模板还可以设置一些默认的功能。每个扩展点可以定义扩展点支持的适用于某个类型任务的功能。比如,一个iOS的Document Provider扩展就包含com.apple.security.application-groups的功能。  
 
所有的OS X扩展模板都默认包含应用程序沙箱和com.apple.security.files.user-selected.read-only功能。如果你开发的扩展需要适用网络,或者访问用户的相册,再或者需要访问用户的通讯录,那么你就需要额外定义这些功能。
 
注意:通常情况下,如果用户允许主应用程序(containing app)访问他们的私有数据,那么主程序里的扩展也同样拥有该权限。
 
响应“载体程序”(Host App)的请求
正如你在 Understand How an Extension Works这篇文档中了解的,当用户在host app选择一个扩展,并使host app向扩展发出请求时,就会打开扩展才。说的再详细一点,你的扩展会根据用户的操作接收到请求,帮用户执行任务,然后完成或者关闭请求。比如说,一个分享扩展收到了来自host app的请求,然后该扩展会打开相应视图来响应请求。然后用户在该界面中编辑要分享的内容,用户可以选择发送或者不发送,最后扩展根据用户的行为响应完成还是关闭请求。
 
当host app向扩展发出请求时,一般都会指明扩展运行的上下文。对于很多扩展来说,最重要的一部分就是要设置一个工作项,这个工作项就是用户在使用这个扩展时要处理的工作项。比如说,一个分享扩展的上下文可能就包含用户选择的想要分享的一段文字。
 
当host app发出一个请求(通常就是调用 beginRequestWithExtensionContext: 方法),你的扩展就可以用主试图控制器中的 extensionContext 属性来获得上下文,然后使用 NSExtensionContext 类解析上下文并获得工作项。通常,在视图控制器的 loadView 方法中解析上下文并获得工作项,这样在加载完视图后就可以将信息显示在视图界面中了。获取扩展上下文可以使用如下代码:
  
  1. NSExtensionContext *myExtensionContext = [self extensionContext]; 
有意思的是内容对象的 inputItems 属性,它包含了应用扩展需要使用的工作项。inputItems 属性包含一个 NSExtensionItem 类型的数组,数组的每一个成员都包含一个可执行的工作项。从上下文中获取工作项可以使用如下代码:
  
  1. NSArray *inputItems = [myExtensionContext inputItems]; 
每个 NSExtensionItem 对象都包含若干个描述工作项的属性,比如标题、文本内容、附件信息、用户信息。
 
注意 attachments 属性,它包含一个与工作项相关联的媒体数据数组。比如说一个分享请求的工作项,那么 attachments 属性可能就包含用户想要分享网页中的信息。
 
当用户工作项处理完后,应用扩展通常会给用户两个选择,完成任务或取消任务。根据用户的选择,扩展会调用 completeRequestReturningItems:expirationHandler:completion: 方法,把工作项返回给 host app,或者会调用 cancelRequestWithError: 方法,返回一个错误代码。
 
在iOS中,你的应用程序扩展可能需要更多的时间去处理潜在的需长时间处理的任务,比如说往网上上传内容。这种情况下,你就要使用 NSURLSession 类将该任务转为后台处理的任务。因为转换到后台处理任务需要用一个单独的线程,所以在扩展完成主应用请求并关闭后仍然可以处理。想了解更多关于扩展中NSURLSession类的用法,请参阅: Performing Uploads and Downloads。
 
重要:虽然你可以设置一个后台URL来上传或下载任务,但是有一些类型的后台任务,比如支持 VoIp 或者在后台播放音乐的任务,是不能通过扩展来实现的。
 
如果你应用扩展的Info.plist文件中含有 UIBackgroundModes 关键字,那么在上传App Store时会被拒绝。(想了解更多关于 UIBackgroundModes 关键字的内容,请参阅 Information Property List Key Reference 中的 UIBackgroundModes)
 
优化效率和性能
应用扩展在内存使用优先级上要明显低于当前运行的应用程序。不管是 iOS 还是 OS X,系统都会毫不犹豫地终止扩展,因为用户想返回到host app中的主要目标中。但是也有一些应用扩展的内存使用优先级要高于其他扩展,比如说widgets就要求要高一些,因为它要实时的显示一些信息,因为一般用户更倾向于同时开启多个widgets。
 
你的应用扩展并不拥有主循环线程,你要遵循这一规则,以便让扩展在主循环线程中发挥最好的性能。比如说,如果你的应用扩展阻止了主循环线程,那么在用户使用主应用程序的过程中会造成非常糟糕的用户体验效果。
我们需要记住的一点是,GPU在系统中是一个共享的资源,所以应用扩展不会得到很高的优先级照顾。比如说,如果你正在玩一个对GPU消耗很高的游戏,那么由于内存压力比较大,它就有可能会选择关闭Today widget。
 
设计一个精简的用户界面
大多数的扩展点都要求你向用户提供一些自定义的界面,它在用户打开你的应用扩展时呈现给用户。通常情况下,应用扩展的界面要尽可能的简约、内敛,并主要关注一个单一任务。为了提高性能和用户体验效果,你要避免与该扩展功能无关的界面出现。
 
大多数Xcode 提供的应用扩展模板都包含一个初始界面文件,你可以从这个文件中设计界面开始。
 
在用户的惯性思维中,一般他们都是通过应用扩展的图标来辨识扩展功能的。通常情况下,应用扩展的图标和它的主体应用的图标是一致的。使用主体应用的图标作为应用扩展的图标有利于用户去判断这个扩展的来源,也就是说让用户确信这个扩展是来源于他们安装的主体应用。当然也有一些例外。
 
在iOS中,自定义的Action扩展的图标使用其主体应用的图标。
在OS X中,如果一个扩展的主体程序只是用来安装扩展的封装包,那么该扩展要提供一个单独的图标,否则都会使用主体应用的图标。
 
应用扩展要使用一个简短,语义明确的名字,这能让帮助用户把扩展和你的主应用程序联系起来,并且能让他们在系统中更好的管理应用扩展。通过应用扩展 Target的 CFBundleDisplayName 属性来设置它的名称,你可以在Info.plist文件中修改它。如果你没有给 CFBundleDisplayName 设置值,也就是没有给扩展设置名称,那么应用扩展会使用其主体应用的名称,也就是 CFBundleName 属性中的值。
 
同时一些应用扩展也需要一个简短的说明。比如说,OS X中的 Widget 扩展就会显示一个简单的描述,这能帮助用户更好的选择他们想要显示在今日通知中的Widget扩展。扩展的描述可以在 InfoPlist.strings 文件的 widget.description 属性中设置。
 
调试,配置和测试你的应用扩展
 
注意:要确保主体应用中的所有扩展都要使用相同签名方式的代码。
 
使用 Xcode 调试应用扩展和调试其他程序基本是一样的,但唯一点不同的是:你要选择一个能访问扩展的载体应用。当你编译运行应用扩展后,Xcode 会运行载体应用,等待你去使用扩展并触发调试点来调试扩展。你要在 scheme 中要为扩展指定一个载体应用(一个 scheme 封装了 Target 编译的说明)。
 
当你在主体应用工程中添加一个应用扩展的Target时,Xcode 就会为应用扩展默认创建一个 scheme。应用扩展的 scheme 可以让你指定在调试时由哪个应用程序来调用你的扩展,也就是指定一个调试时的载体应用。默认情况下,当你编译运行扩展时,会询问你使用哪个载体应用来调用该扩展。
 
在你编译运行应用扩展之前,你要确保你的扩展已经选择了一个 scheme。你可以通过 Product > Scheme > MyExtensionName 或者使用 Xcode 菜单栏呼出 scheme 菜单并选择 MyExtensionName 来设置应用扩展的 scheme。
 
注意:如果你运行主体应用的 scheme 代替应用扩展的 scheme,那么你在编译工程时Xcode会告诉你它正在等待调试应用扩展。
 
当你编译运行应用扩展时,Xcode会为你列出允许调用该扩展的载体应用程序。当你选择一个载体应用程序并且运行后,调试器就准备开始工作了,并准备好在你打的断点处进行拦截。当你在载体应用程序中使用扩展时,就可以对应用扩展进行Debug调试了。调试应用扩展的方式和使用Xcode调试其他进程一样。
 
在OS X中,你在载体应用程序中访问扩展之前,要确保该扩展是允许被使用的。一般情况下,在System Preferences的扩展面板中开启或关闭扩展(你也可以在共享或Action菜单中打开应用扩展面板)。这里要注意一点,在 OS X 中使用 Widget 模拟器调试 Widget扩展时,是不需要对其进行开启操作的。当你要调试键盘扩展时,必须要开启该扩展(你可以通过Settings > General > Keyboard > Keyboards开启键盘扩展)。
 
在调试时,Xcode会在OS X中创建一个持续的编译应用扩展的会话。这意味着,如果你要使用OS X系统下的扩展,你需要使用Finder把它从构建处拷贝到类似 Applications folder的地方。
 
注意:在Xcode的调试控制台日志中,应用扩展的二进制值可能是和 CFBundleIdentifier 属性关联,而不是 CFBundleDisplayName 属性。
 
因为应用扩展必须要做出一个有效的响应,所以当你运行应用扩展时,在调试导航中查看各种调试监控器就非常的清晰明了。这些调试监控器会告诉你当前运行的应用扩展占用了多少CPU、内存和其他系统资源。当你发现类似占用CPU资源出现异常的性能问题时,你就可以使用Instruments来分析你的应用扩展,并确定需要改进的地方。想学习了解调试监控器,请查阅 Debug Your App;想学习了解Instruments,请查阅 Instruments User Guide。
 
注意:在Xcode中选择 Product > Profile可以直接在Instruments中编译并运行应用扩展。Instruments使用
 
如果要使用Xcode提供的测试框架(比如XCTest APIs)测试应用扩展,你需要在主体应用程序中写一些测试用例代码。想了解更多XCTest的知识,请参阅 Testing with Xcode。
 
分发扩展主体应用程序
你不能直接将应用扩展上传至App Store,除非它包含在主体应用程序中,并且你不能将应用扩展从一个应用程序中转到另一个应用程序。
 
如果想让用户使用你的应用扩展,你必须提交一个主体应用程序到App Store中,并且主体应用程序如要有其他的功能,不能只包含应用扩展。
 
如果你想交付 OS X 应用程序扩展,推荐你将主体应用程序提交至App Store,但这也不是唯一的途径。在OS X中,主体应用程序就可以只包含应用扩展,而不需要提供扩展外的其他功能。
 
注意:如果你不使用App Store来将主体应用程序和OS X 扩展交付给用户,那么在主体应用程序通过审核前,Gatekeeper是不会允许应用扩展生效的。同时,如果你不将主体应用程序上传至App Store,那么该主体应用程序也不能签署你的开发者ID名称,所以用户必须明确从主体应用程序中重载Gatekeeper,才可以让应用扩展生效。
11、频率响应与伯德图详解 本文详细介绍了电子电路分析中的频率响应与伯德图,涵盖分贝的定义与计算、带宽与3dB点、放大器反馈机制、倍频程与十倍频程概念,并系统讲解了基于实数和复数零极点的伯德图构建方法。通过具体示例分析了传递函数的渐近近似、幅度与相位响应,并结合MATLAB工具展示了伯德图的绘制过程。文章旨在帮助读者深入理解电路在不同频率下的行为特性,为电路设计与优化提供理论支持。 阅读详情

相关推荐

无人自行车平衡控制:最小二乘法动态零点拟合实践

本文探讨了无人自行车平衡控制中动态零点的重要性及实现方法。通过最小二乘法拟合车头角度与ROL值的线性关系,解决了固定零点在转向时导致的稳定性问题。实践表明,动态零点拟合能显著提升系统平衡稳定性并降低能耗。

uran的专栏 660

Widget的简单应用并适配iOS10

原文链接:http://www.jianshu.com/p/42516ee26a45 widget这个小插件不知道有多少人习惯使用?又或者有多少使用iphone手机的用户知道这东西的存在?好了,不说废话了;既然公司有这需求,小编也只能去研究了!下面来和大家介绍小编研究成果!查询了网上的相关内容,没有发现什么特别全面详细的文章!只能自己查官方文档喽!

cleven 792

告别环境报错:用Pycharm一站式搞定Superset 3.0.0二次开发环境(Windows/Mac通用)

本文详细介绍了如何使用Pycharm一站式搭建Apache Superset 3.0.0的二次开发环境,涵盖Windows和Mac平台。通过虚拟环境配置、依赖管理、数据库初始化及前后端协同开发等步骤,帮助开发者高效解决环境报错问题,提升开发效率。特别适合需要进行Superset二次开发的工程师参考。

weixin_42549496的博客 316

[译]AppExtension编程指南:扩展基础3

App Extension Programming Guide-App Extension Essentials AppExtension编程指南:扩展基础3 Creating an App Extension 创建应用扩展 iOS8/OS X v10.10 翻译自苹果官方文档 App Extension Programming Guide--App Extensions Essent...

weixin_33851604的博客 320

Vscode+ROS/ROS2 开发调试基于ROS/ROS2应用环境配置

在ROS操作系统开发应用程序时,我们常常需要调试代码,验证程序的正确性。但是在用rosrun或者roslaunch启动节点后,若程序运行过程中发生错误而导致发生出错停止工作,这时候终端并不会输出具体的信息指出在何处发生了错误,具体错误的原因又是什么。往往仅仅是core dump 或者segmentation fault 等等一类的模糊提示。

Chasinglight的博客 5800

国产安路FPGA(二)-TD软件时序约束与硬件调试实战

本文深入探讨了国产安路FPGA开发中TD软件时序约束的实战应用。文章详细解析了SDC文件的核心语法,包括基础时钟、生成时钟及输入输出延迟约束的编写方法,并针对硬件调试中常见的时序问题提供了解决方案。通过一个图像处理流水线的优化案例,阐述了如何结合代码修改与约束设置,实现设计从“能跑”到“跑得稳”的关键提升,是掌握FPGA可靠设计的实用指南。

weixin_29183637的博客 376

ios 10 开发-使用 Extension(Intents Extension和Intents UI Extens)创建SiriKit功能开发

Intent的概念 Siri做完语音识别和语义分析之后,将结构化语音分析结果打包成一个某个领域(Domain)的意图(Intent),然后交给支持这个意图(Intent)的第三方应用(比如微信),第三方应用被启动,从传入的Intent中获取相应的信息,完成操作。 例如,上图演示中提到了的例句 “I need to send a message to Nancy via WeChat sayin

zzzzzdddddxxxxx的专栏 6573

STM32HAL库硬件I2C驱动INA226避坑指南:从寄存器配置到电流测量实战

本文详细解析了使用STM32的HAL库硬件I2C驱动INA226电流/功率监测芯片的完整流程与常见陷阱。内容涵盖从硬件I2C配置、寄存器(特别是配置与校准寄存器)的深度解析、健壮的驱动函数封装,到实战中的校准技巧与滤波优化,旨在帮助开发者避开通信失败、数据不准等典型问题,实现高精度电流测量。

x1y2z的博客 791

iOS 8新特性之扩展(Extension)

iOS 8新特性之扩展   一、扩展概述 扩展(Extension)是iOS 8中引入的一个非常重要的新特性。扩展让app之间的数据交互成为可能。用户可以在app中使用其他应用提供的功能,而无需离开当前的应用。 在iOS 8系统之前,每一个app在物理上都是彼此独立的,app之间不能互访彼此的私有数据。   而在引入扩展之后,其他app可以与扩展进行数据交换。基于安全和性能的考虑,每一

sunyazhou13的专栏 1537

【2026最新版】Open3D(C++)点云处理算法汇总(C++长期更新版)

C++版本Open3D进行点云处理的一些算法使用案例。博客长期更新,最近一次更新时间为:2026年4月11日。

点云侠的博客 1万+

S7-1200 PN与G120变频器控制起停及调速PROFINET实现详解

S7-1200 PLC与G120变频器通过PROFINET通信可实现高效、实时的电机控制。2. 《S7-1200与G120 CU250S-2PN的PROFINET通讯指南》- 控制器:S7-1200 PLC (如1214C DC/DC/DC)- 变频器:G120 CU250S-2PN (带PROFINET接口)- 输出区(PZD1-2):控制字(16位)、速度设定值(16位)- 输入区(PZD1-2):状态字(16位)、实际速度值(16位)- P922=1:选择报文类型为"标准报文1 (PZD2/2)"

电工 1866

ios 输入法扩展_App Extension编程指南(iOS8/OS X v10.10):扩展类型--自定义键盘

通过使用第三方输入法替换系统原生输入法,用户可以实现一些特殊的功能。比如一个特别新颖的输入方式,或输入iOS原生输入法并不支持的语言。第三方输入法的基本功能很简单:通过点击、手势,或者其他输入事件,然后通过一个未分类的NSString对象在当前文本输入对象的插入点插入文字。卷首语请先确保您开发的第三方输入法真的要用于整个系统。若您只打算为您的应用程序提供一个完全定制的输入法或者只打算给系统输入法...

weixin_42297982的博客 1334

3大绝招!MySQL如何轻松搞定文本、图像和视频的多模态数据分析?

首先,让我们来了解一下“多模态”到底是什么意思。简单来说,多模态指的是能够同时处理不同类型数据(如文本、图像、音频等)的能力。传统的数据库往往只能专注于一种或几种特定类型的数据,比如关系型数据库主要处理结构化数据,而文档型数据库则更适合非结构化数据。但是现在,随着技术的进步,像MySQL这样的数据库也开始支持更加复杂的数据模型,允许我们在同一个系统内处理多种格式的数据。通过上述五个部分的详细介绍,相信你现在应该对如何利用MySQL进行多模态数据分析有了更清晰的认识。

java专栏 2114

App Extension编程指南(iOS8/OS X v10.10)中文版

         当iOS 8.0和OS X v10.10发布后,一个全新的概念出现在我们眼前,那就是应用扩展。顾名思义,应用扩展允许开发者扩展应用的自定义功能和内容,能够让用户在使用其他app时使用该项功能。你可以开发一个应用扩展来执行某些特定的任务,用户使用该扩展后就可以在多个上下文环境中执行该任务。比如说,你提供了一个能让用户把内容分享到社交网站的扩展,用户可以在阅读邮件信息或者...

不积跬步 无以至千里 不积小流 无以成江海 244

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

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

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

App Extension编程指南(iOS8/OS X v10.10):扩展类型--Today

App Extension编程指南(iOS8/OS X v10.10):扩展类型--Today 2014-09-04 17:00 编辑:suiling 分类:iOS开发 来源:CocoaChina  0 9878 iOS 8app extensionapp扩展 招聘信息: 武汉德资Startup诚聘iOS攻城师Weego 我去·旅行 招聘IOS开发工程师紧急招

yongyinmg的专栏 1173

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

iOS8扩展插件Extension的开发

一.iOS8扩展插件概述 WWDC14除了发布了OS X v10.10和switf外,iOS8.0也开始变得更加开放了。说到开放,当然要数应用扩展(App Extension)了。顾名思义,应用扩展允许开发者扩展应用的自定义功能和内容,能够让用户在使用其他应用程序时使用该项功能,从而实现各个应用程序间的功能和资源共享。可以将扩展理解为一个轻量级(nimble and lightw

zzzzzdddddxxxxx的专栏 2093

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

iOS开发iOS8扩展App Extension 中文版

当iOS 8.0和OS X v10.10发布后,一个全新的概念出现在我们眼前,那就是应用扩展。顾名思义,应用扩展允许开发者扩展应用的自定义功能和内容,能够让用户在使用其他app时使用该项功能。你可以开发一个应用扩展来执行某些特定的任务,用户使用该扩展后就可以在多个上下文环境中执行该任务。比如说,你提供了一个能让用户把内容分享到社交网站的扩展,用户可以在阅读邮件信息或者上网时通过app扩展来发表评论

wgl_happy的专栏 506

[IOS]App Extension编程指南(iOS8/OS X v10.10):扩展类型--自定义键盘

本节由CocoaChina翻译组成员星夜暮晨(博客)翻翻译自苹果官方文档  App Extension Programming Guide--App Extension Types--Custom Keyboard  一节,敬请勘误。 通过使用第三方输入法替换系统原生输入法,用户可以实现一些特殊的功能。比如一个特别新颖的输入方式,或输入iOS原生输入法并不支持的语言。第三方输入法的基本功

欲买桂花同载酒,终不似,少年游。 1617

iOS8扩展插件开发配置

一.iOS8扩展插件概述 WWDC14除了发布了OS X v10.10和switf外,iOS8.0也开始变得更加开放了。说到开放,当然要数应用扩展(App Extension)了。顾名思义,应用扩展允许开发者扩展应用的自定义功能和内容,能够让用户在使用其他应用程序时使用该项功能,从而实现各个应用程序间的功能和资源共享。可以将扩展理解为一个轻量级(nimble and lightwe...

diaoju3333的博客 293

iOS开发之扩展插件开发配置标签: Host_App App_Extension Containing_App AppGroup_Container NSExtensionMainStory

一.iOS8扩展插件概述 WWDC14除了发布了OS X v10.10和switf外,iOS8.0也开始变得更加开放了。说到开放,当然要数应用扩展(App Extension)了。顾名思义,应用扩展允许开发者扩展应用的自定义功能和内容,能够让用户在使用其他应用程序时使用该项功能,从而实现各个应用程序间的功能和资源共享。可以将扩展理解为一个轻量级(nimble and lightwei

zhonggaorong的专栏 2684
上一篇: iOS用户数据安全:Keychain、Touch ID以及1Password
下一篇: CALayer 详细介绍
FirstBloodFB
博客等级 码龄12年 7粉丝 43原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值