Direct3D 10系统(五) 全文完~~~

5.合并写(write combining)[转载] 原文地址 译者:无叶 校对:丁一 现代CPU采用了大量的技术来抵消内存访问带来的延迟。读写内存数据期间,CPU能执行成百上千条指令。 多级SRAM缓存是减小这种延迟带来的影响的主要手段。此外,SMP系统采用消息传递协议来实现缓存之间的一致性。遗憾的是,现代的CPU实在是太快了,即使是使用了缓存,有时也无法跟上CPU的速度。因此,为了进一步减小延迟的影响,一些鲜为人知的缓冲区派上了用场。 本... 阅读详情

 Direct3D 10系统(五)

作者:David Blythe
本文版权归原作者所有,仅供个人学习使用,请勿转载,勿用于任何商业用途。
由于本人水平有限,难免出错,不清楚的地方请大家以原著为准。欢迎大家和我多多交流。
翻译:clayman
Blog:http://blog.youkuaiyun.com/soilwork
5.3 Resource Mapping and Access
         API 和管线设计比较复杂的问题之一,关系到如何在 CPU 和 GPU 之间共享资源。举个例子,无论 Direct3D 还是 OpenGL 都允许顶点缓冲映射到程序的地址空间中,而不管缓冲具体是分配在系统内存还是显存中。但是,分配的位置将会导致性能的巨大差异。现代图形加速器上,显存和加速器之间的带宽可能超过 50GB/s ,而 PCI-E 则只能为系统和 GPU 之间提供 2.8GB/s 的带宽。
         此外还有一些其它的问题。比如, CPU 对所访问的数据缓存与否,同样会带来很大的性能差异。同时,是否 write-combine ,也会造成同样的差异。另外,当 GPU 访问资源时,为了提高空间的一致性,资源加载的方法可能是 form row-order to another(e.g, Morton, boustrophedon, or pi orders), or tiled [Blinn 1990; Hakura and Gupta 1997; Igehy et al. 1999] 。我们认为这些方法本质上都是为了保证分割模式( tiling pattern )对应用程序透明,因此,当资源映射到 CPU 时,应该是以线形方式组织的。由于分割模式同时也依赖于访问模式, 2D 和 3D 纹理之间是有差异的,而且这种差异不仅仅是 CPU 和 GPU 之间的不同造成的。出于对性能的重要用影响,我们尝试暴露所有这些功能,但由于其本身的复杂性,却很难让应用程序真正获得性能上的提升。我使用了一个简单的模型,尽力提供了尽可能多的功能。
         我们对特定资源的写入者和读取者进行了分类, e.g , GPU vs.CPU 以及 read vs. write 。如果最初只有一位客户访问资源,那么问题就变得简单了,因为可以采取对主要客户比较有利的方式,来分配资源。同样,如果可以预知资源将被用来读取或写入,也会有很大帮助。幸运的是,这样的描述完全可以覆盖大部分典型的应用范围。比如,渲染目标和纹理主要由 GPU 进行访问,并且分别被限制为写入目标和读取资源。另一方面,顶点缓冲的使用就比较复杂了。虽然静态的集合体主要由 GPU 来读取,但是动态的几何体则常常作为动画的一部分,先由 CPU 来生成,在由 GPU 进行处理。这些操作将导致频繁的 CPU 写入和 GPU 读取处理。
         Direct3D 10 根据使用类型,把资源分为 3 类: default, immutable, dynamic ,以及 staging 。 Default 对应比较简单的纹理,渲染目标,或者只由 GPU 访问的静态顶点缓冲。 Default 类型资源的初始化,通常需要复制另一资源的数据来进行。 Immutable 类型的资源不允许复制操作,但是在创建时,提供了另一种方法来进行初始化。 Default 和 immutable 类型的资源都不能映射到应用程序地址空间中,让 CPU 对它们进行访问。动态资源不但可以在管线中使用,也允许映射到 CPU ,进行只写的操作。适合于生成顶点数据,或者进行视频解码,等等。最后, staging 类型的资源只允许 CPU 对其进行访问,但是,可以对它的数据进行复制。 Staging 类型的资源对于初始化或者获取只有 GPU 能访问的资源时比较有用。
         为了检查资源可以绑到管线的哪个位置,将在创建资源时,对资源的布局( placement )和编码方式进行验证。这些分类包括:顶点缓冲,索引缓冲,常量缓冲, shader 资源(纹理),输出流缓冲,渲染目标,或者 depth/stencil 缓冲。这样的分类有两个目的:为驱动提供资源布局的信息,简化使用资源时的错误检查。
 
5.4 HLSL 10
         高级着色语言广泛,迅速的被人们所接受,无疑显示了这种语言的重要性。为了支持新管线的特性,我们对高级着色语言―― HLSL 也提出了一些新的目标。简单的说,我们希望应用程序开发者使用 HLSL 高效的开发程序,而不需要了解虚拟机的复杂细节,比如,寄存器名称或常量缓冲索引。我们把目标精炼为以下几个小点:
1.   应用程序不需要了解资源是如何配置和分配的。
2.   把 bind-by-position 作为主要的绑定机制,而不是现在的 bind-by-name 。
3.   程序员不再需要编写中间(汇编)语言代码
第一个目标主要用于解决下面这个问题:当前系统中,应用程序开发者需要学会控制常量储存空间中的参数布局。开发者需要对多个 shader 进行全局分配和布局( global allocation and placement ),以便在多个 shader 之间共享某些变量。通过在每个管线阶段添加的多个常量缓冲,我们相信,编译器有足够的信息能自动对缓冲进行布局,当然,程序员还是要控制把参数分配到常量缓冲中的操作。我们对语言进行了扩展,允许把缓冲名作为参数的一部分,进行声明。
第二个目标则是设计思想的改变,主要与性能和未来的进一步发展有关系。 Bind-by-name 主要用于几个地方:对多个 shader 之间输入和输出数据进行匹配,让 vertex shader 的布局与 vertex shader 进行匹配,等等。虽然运行时可以让源数据和目标数据之间的名字匹配操作进行的比较高效,并且实现源—目标对缓存,但我们觉得这些只会带来不必要的复杂性,并且为运行时添加额外的负载。新系统中,将在多个方面发生变化。 Shader 的输出和输入将与 签名( signature ) 相关,这和 C 总的函数原形有些类似。只有当前一阶段的输出和后一阶段的输入兼容时,管线才是有效的。兼容意味着输入和输出间 element-by-element 的对应。这里,我们允许下一阶段的管线,不使用上一阶段拖尾的( trailing )的输出数据。
Bind-by-postion 通用影响到 IA 和 SO 阶段的顶点缓冲绑定。但是,对这几个阶段,我们将创建独立的对象来封装( encapsulate )绑定,让代价较大的匹配操作只在创建时运行一次。
第三个目标是比较具有争议性的,它表示我们的实现 将不支持使用使用中间语言编写的 shader 作为输入 。我们认为着色程序的发展已经达到了一定复杂程度,因此,手写的 IL 很难比编译器产生的代码高效。此外,当我们改进优化技巧,联接,以及与驱动的交互时,无法保证对手写 IL 代码的支持和兼容。作为诊断技术,系统将支持编译器生成中间代码作为输出,但是,我们不允许应用程序开发者修改编译器的输出,并把它注入到运行时中。
         如何最优化编译器生成的代码性能,有很多问题。首先,是优化的范围,驱动可能允许把中间语言转换为特定机器语言时进行优化。随着 shader 复杂性的增加,确保开发者在优化之上,有充分的控制权,改变操作的执行顺序是相当重要的。特别是需要保证关键代码的恒定性( invariance ),多 pass 算法应该能生成同样的中间值,以便把这些值复制到分散的 shader 中。我们考虑了几种在源码上指定中间值的方案,比如,要求以一种特定的方式来编译子程序,而不管这个子程序是否是内连的。但是,研究最终让我们选择了更加常见的方法:使用与 驱动编译器相关的,可选择的,定义良好的优化级别。
         请注意,我们首选的使用模型是在编写 shader 时,编译 HLSL 代码,在程序运行时通过驱动编译 IL 代码。这样的目的是希望减少程序运行时,编译 shader 所花费的时间。但是,在运行时再把 HLSL 编译为 IL 也是可以的。
 
5.5 HLSL-FX 10
         我们注意到,编程管道的成功,改变了人们的观点, shader 程序不但是引擎的一部分,同时,也是艺术家创作工具之一。为了适应这方面的应用, Effect ( FX )系统对 HLSL 进行了扩展,允许使用它来初始化管线的固定功能部分。这和 CgFX 以及 Cg 所描述的方法很类似。虽然这些方法有共同的基础,但 HLSL-FX 是进行了革新的。我们的目标是, FX 首先需要满足实时运行的需求,其次,才是作为内容创建者的工具。基于一些历史原因,这两者在很多方面都是由差别的。创作工具常常通过牺牲性能来换取灵活性,而我们的运行时则把性能放在第一位。
         通过我们积累的经验和努力, FX 系统在易用性和性能方便都有了充分的提高。最终 FX , HLSL , API ,运行时,以及管线都紧密的结合到一起,作为互补的解决方案。我们同样对频繁的状态操作进行了改变,分离了名字查找以及匹配操作。
         再次来讨论处理状态改变的方式。构建应用程序的方法之一是渲染一系列几何体,每个几何体都有其各自的管线配置(一个 Effect )。通过设置常量缓冲中的 shader 参数,纹理绑定,以及其他固定功能的状态,来传递参数给 Effect 。 为了最大化性能,应用程序应该使用一个 Effect 来绘制所有物体。这是场景管理系统中,传统的状态排序解决方案。但是,对一个 Effect 来说,可能有几个层次的参数,比如,当前时间和观察点是属于 per-frame 的状态;纹理或顶点数据则是角色的静态状态;位置和姿势则是对象的动态状态,等等。我们使用了一个单独的常量缓冲来储存 shader 每个层次的参数,当绘制物体时,将直接绑定保存静态参数的常量缓冲,保存动态参数的缓冲则要经过更新后再绑定。
         在实际应用中,应用程序并不能总是通过 Effect 来排序对象。通常还可能有其他的机制,控制着绘图,比如物体的远近程度,透明度,等等。我们已经把 Direct3D 10 系统状态改变的代价进行了充分缩减,因此,重新配置整个管道也是很高效的。
 
6 System Experience( 略 )
7 Future Work( 略 )
8 Conclusions( 略 )
~~~~~~~~~~~~~~~~~~~~~~~~全文完~~~~~~~~~~~~~~~~~~~~~
        呼呼,终于把主要部分都弄完了,希望理解错误的地方不是太多。后3个部分基本都是总结性的东西,就不再翻了。
       最近又比较茫然了,唉~~~。
       Work for money or work for what i like?
Direct3D 10教程8:DXUT介绍 概览 本教程将介绍DXUT。DXUT是一个建立在Direct3D之上的一个层,它能帮助我们建立一个更健壮、更易于生成的示例,原型,工具或游戏,它基于典型应用简化了Windows和Direct3D的API。 本教程的显示结果与上一个教程相同,但是实现起来简单得多。 源代码 (SDK root)\Samples\C++\Direct3D10\Tutorials\Tutorial08 阅读详情

相关推荐

RGB相加混色.rar

显示 RGB 相加混色过程。红绿蓝3个园重合时,显示相加后的颜色。

window显示驱动开发—使用 Direct3D 版本 10 句柄

Direct3D 10采用强类型句柄系统提升安全性与调试效率,包含三类句柄:运行时句柄(用于驱动访问运行时服务)、驱动句柄(标识驱动私有对象)和内核句柄(跨模式安全通信)。其设计特点包括:1)严格的类型安全检查,编译器可拦截类型不匹配;2)显式生命周期管理,通过Create*/Destroy*函数对控制;3)权限隔离,内核句柄限制用户模式直接访问。驱动开发需注意:匹配正确句柄类型、及时释放资源及验证句柄有效性。该机制有效降低了资源管理错误风险,同时通过内核句柄优化了跨模式通信性能。

王马的博客 1196

增程式永磁电机发电系统电压环二自由度控制器设计

本论文主要研究增程式永磁电机发电系统的电压环二自由度控制器设计。该系统采用二自由度控制策略,通过精确调节电压环和电流环,显著提高系统的动态响应性能和稳态稳定性。基于SVPWM(空间矢量脉宽调制)技术,本研究设计的电压环控制器能够在负载突变和外部扰动的情况下,快速恢复并保持电压稳定,从而满足增程式永磁电机发电系统对电压精度和稳定性的高要求。仿真分析表明,所设计的控制器在不同工况下展现出良好的电压稳定性、较短的响应时间和较低的稳态误差,能够有效抑制电压波动并提高系统的鲁棒性。实验结果表明,控制器在维持高效能和高

weixin_44553616的博客 897

Direct3D 10系统(一)

Direct3D 10系统(一) 作者:David Blythe本文版权归原作者所有,仅供个人学习使用,请勿转载,勿用于任何商业用途。由于本人水平有限,难免出错,不清楚的地方请大家以原著为准。欢迎大家和我多多交流。翻译:claymanBlog:http://blog.youkuaiyun.com/soilworkclayman_joe@yahoo.com.cn 

Clayman的专栏 7183

颠覆性创新的测量框架与跨领域实证分析

颠覆性创新作为科技发展的重要驱动力,其核心在于实现知识体系的范式转换。从技术原理看,这类创新通常具备知识替代、网络重构和跨领域渗透三大特征,通过引用网络分析和文本挖掘等方法可量化评估其影响力。在工程实践中,CD指数、DI指数等测量工具帮助研究者识别具有突破潜力的成果,而深度学习等新兴技术进一步提升了评估精度。当前AI、半导体等领域的热门技术发展表明,模块化架构和产业协同能有效促进颠覆性创新。面对全球范围内创新颠覆性下降的趋势,优化科研评价体系、构建跨学科协作网络成为关键应对策略。

weixin_29735807的博客 321

用Simulink对Carsim车辆进行档位控制

用Simulink对Carsim车辆进行档位控制一、carsim中的档位设置为开环控制二、在Constant目录下面选取一个选项并重新命名为constant :0 Gear三、双击进去设置常量为 0四、输入和输出IO通道五、验证 :输入 为 3 档 ----- 输出 为 3!六、参考 一、carsim中的档位设置为开环控制 二、在Constant目录下面选取一个选项并重新命名为constant :0 Gear 三、双击进去设置常量为 0 四、输入和输出IO通道 五、验证 :输入 为 3 档 -

qq_42027654的博客 2601

Direct3D 10教程4:3D空间

概览 在前面的教程中,我们在窗口中央绘制了一个三角形,我们着重讲解如何从顶点缓存中的获取顶点位置。而在本教程中我们将讨论3D位置和变换的细节。 本教程会在屏幕上绘制一个3D物体,上一个教程我们关注如何在屏幕上绘制一个2D对象,现在我们要显示一个3D物体。 源代码 (SDK root)\Samples\C++\Direct3D10\Tutorials\Tutorial04 3D空间

1391

解锁 STP 与 SOLIDWORKS 转换密码:工具及迪威在线转换秘籍

STP 文件能够完整地记录 3D 模型的几何形状、尺寸、公差、材料属性等丰富信息,无论是简单的机械零件,还是复杂的装配体,都能精准呈现。而在线转换以迪威模型为例,凭借便捷性、高效性和安全性,为广大 3D 专业技术人员和学生党在无需安装额外软件的情况下,轻松实现格式转换提供了有力支持。在实际工作和学习中,可根据自身具体情况灵活选择合适的转换方式,以确保 3D 设计工作流程的顺畅进行,让创意在不同格式间自由流动并绽放光彩。在 3D 设计与建模的广袤世界里,不同格式文件间的转换常常是连接创意与实现的关键桥梁。

技术说明博主 3444

Direct3D 10系统(五)

 Direct3D 10系统(五)5.3 Resource Mapping and Access         API和管线设计比较复杂的问题之一,关系到如何在CPU和GPU之间共享资源。举个例子,无论Direct3D还是OpenGL都允许顶点缓冲映射到程序的地址空间中,而不管缓冲具体是分配在系统内存还是显存中。但是,分配的位置将会导致性能的巨大差异。现代图形加速器上,显存和加速器之

Nicholas黎的专栏 1071

AstrBot插件开发全攻略:从零编写一个天气查询插件(Python实战)

本文提供了一份详细的AstrBot插件开发实战指南,手把手教你使用Python从零编写一个智能天气查询插件。内容涵盖插件系统核心设计、开发环境搭建、API调用与数据处理、自然语言交互实现以及插件打包发布全流程,帮助你快速掌握基于AstrBot框架的聊天机器人功能扩展技能。

weixin_29212867的博客 1082

轨迹规划——带抛物线过渡的直线插补

带抛物线过渡的直线插补

doudou2weiwei的博客 1984

Direct3D 10

      微软的vista 带了个大家伙 这个可能会导致硬件升级,开发人员为之疯狂的的大家伙。Direct3D 10 要来了 这不仅仅是两位数的飞跃,D3D10图形流水线给出了绘制架构的根本性变化,为了增强了下一代游戏和3D多媒体程序的绘制能力,它的软件和硬件都由底层重新构建。蜕变它基于Windows Vista显示驱动模型(WDDM)构建,增强了功能和性能,保证了GPU显存的完全虚

球场混混的专栏 3257

Python+ArcGIS实战:5步搞定土壤类型预测(附随机森林模型配置技巧)

本文详细介绍了如何结合Python与ArcGIS,利用随机森林模型进行土壤类型预测。通过5个核心步骤——数据预处理、样本创建、模型构建、空间预测与精度验证,构建了一套自动化、高精度的空间预测工作流,并提供了关键的模型配置与调参技巧,助力GIS开发者高效完成土壤制图任务。

weixin_29227585的博客 395

Direct3D 10 Overview

<!-- @page { size: 21cm 29.7cm; margin: 2cm } TH P { margin-bottom: 0cm; font-style: italic } TD P { margin-bottom: 0cm } P { margin-bottom: 0.21cm } --> The Direct3

Jedimaster的专栏 2043

工业相机——靶面尺寸、像元尺寸、分辨率 、传感器尺寸

由Sensor对角线长度表示,单位英寸,这里的1英寸=16mm。——靶面尺寸为宽12.7mm*高9.6mm,对角线16mm。——靶面尺寸为宽8.8mm*高6.6mm,对角线11mm。——靶面尺寸为宽7.2mm*高5.4mm,对角线9mm。——靶面尺寸为宽6.4mm*高4.8mm,对角线8mm。——靶面尺寸为宽4.8mm*高3.6mm,对角线6mm。——靶面尺寸为宽3.2mm*高2.4mm,对角线4mm。——靶面尺寸为宽14*高10.5mm,对角线17mm。

程序员,他们想的是什么?他们想的永远都是技术,他们崇尚的也永远都是技术。 9605

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

Direct3D 10系统(二)

Direct3D 10系统(二) 作者:David Blythe本文版权归原作者所有,仅供个人学习使用,请勿转载,勿用于任何商业用途。由于本人水平有限,难免出错,不清楚的地方请大家以原著为准。欢迎大家和我多多交流。翻译:claymanBlog:http://blog.youkuaiyun.com/soilworkclayman_joe@yahoo.com.cn 

Clayman的专栏 5411

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

Direct3D 10系统(四)

Direct3D 10系统(四)  作者:David Blythe本文版权归原作者所有,仅供个人学习使用,请勿转载,勿用于任何商业用途。由于本人水平有限,难免出错,不清楚的地方请大家以原著为准。欢迎大家和我多多交流。翻译:claymanBlog:http://blog.youkuaiyun.com/soilworkclayman_joe@yahoo.com.cn  

Clayman的专栏 2942

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

Camera2Demo

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

Direct3D 10教程3:Shaders和Effect系统

概览 在前面的教程中,我们设置一个顶点缓存并将一个三角形传递到GPU。现在,我们将看一下图形管线的各个阶段是如何工作的,我们会解释shader的概念和effect系统。 注意:这个教程的共享前一个教程的代码,但强调不同的部分。 源代码 (SDK root)\Samples\C++\Direct3D10\Tutorials\Tutorial03 图形管线 在前面的教程中,我们创建了

2040

Direct3D 10系统(三)

Direct3D 10系统(三)  作者:David Blythe本文版权归原作者所有,仅供个人学习使用,请勿转载,勿用于任何商业用途。由于本人水平有限,难免出错,不清楚的地方请大家以原著为准。欢迎大家和我多多交流。翻译:claymanBlog:http://blog.youkuaiyun.com/soilworkclayman_joe@yahoo.com.cn  

Clayman的专栏 4564

Direct3D 10系统

作者:David Blythe本文版权归原作者所有,仅供个人学习使用,请勿转载,勿用于任何商业用途。由于本人水平有限,难免出错,不清楚的地方请大家以原著为准。欢迎大家和我多多交流。翻译:claymanBlog:http://blog.youkuaiyun.com/soilworkclayman_joe@yahoo.com.cn  译注:这篇文章是MS在SIGGraph 2006上发表的论文,点击这里下载原文

痞子龙3D编程 3153

Direct3D 10系统(五)(转载)

转自http://blog.youkuaiyun.com/soilwork/archive/2006/08/23/1109099.aspxDirect3D 10系统(五)5.3 Resource Mapping and Access         API和管线设计比较复杂的问题之一,关系到如何在CPU和GPU之间共享资源。举个例子,无论Direct3D还是OpenGL都允许顶点缓冲映射到程序

熊晓杰 -- (暴熊 || kongbu0621 || kongbu0622) 的专栏 758

Direct3D 9,Direct3D 10,Direct3D 11渲染流水线

Direct3D Architecture (Direct3D 9) This topic provides two high-level views of the architecture of Direct3D: Direct3D Graphics Pipeline - A view of the internal processing architecture of

痞子龙3D编程 2354

Direct3D基础——Direct3D概述

概述 Direct3D是一套底层图形API,借助该API我们可以利用硬件加速功能来实现3D场景的绘制,Direct3D可以视为应用程序和底层设备的交互。下图展示了Direct3D和硬件之间的交互关系: 图中Direct3D部分是一套已经定义好的,由Direct3D提供给应用程序和开发人员的接口函数,这些接口代表了当前Direct3D支持的所有功能。 注意:有些功能Direct3D支持,但...

Gary的面包屑小道 4342
上一篇: XNA Framework announced~~~!!!
下一篇: XNA Framework?? waiting~~,waiting~~~
soilwork
博客等级 码龄23年 290粉丝 116原创
评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值