模块化工具seajs

Web前端模块化组件seajs-3.0.0版 除了解决命名冲突和依赖管理,使用 Sea.js 进行模块化开发还可以带来很多好处: 模块的版本管理。通过别名等配置,配合构建工具,可以比较轻松地实现模块的版本管理。 提高可维护性。模块化可以让每个文件的职责单一,非常有利于代码的维护。Sea.js 还提供了 nocache、debug 等插件,拥有在线调试等功能,能比较明显地提升效率。 前端性能优化。Sea.js 通过异步加载模块,这对页面性能非常有益。Sea.js 还提供了 combo、flush 等插件,配合服务端,可以很好地对页面性能进行调优。 跨环境共享模块。CMD 模块定义规范与 Node.js 的模块规范非常相近。通过 Sea.js 的 Node.js 版本,可以很方便实现模块的跨服务器和浏览器共享。 模块化开发并不是新鲜事物,但在 Web 领域,前端开发是新生岗位,一直处于比较原始的刀耕火种时代。直到最近两三年,随着 Dojo、YUI3、Node.js 等社区的推广和流行,前端的模块化开发理念才逐步深入人心。 立即下载

一、引入sea.js

<script type="text/javascript" src="js/sea.js"></script>

二、如何变成模块

用define(function(require,exports,module){})包裹
require模块之间依赖的接口
exports对外提供方法的接口

define(function(require,exports,module) {
    function show(){
        alert('aa');
    }
});

三、如何调用模块

exports用来对外提供接口

define(function(require,exports,module) {
    function show(){
        alert('aa');
    }
    exports.show=show;
});

四、如何使用模块

seajs.use('module.js',function(ex){}),第一个参数是请求模块的路径module.js,第二个参数是请求完成后的回调函数function(ex){},回调用有一个参数ex,这个参数就是模块提供的接口
默认根目录是sea.js所在的目录。如果想以当前页面所在的目录为根目录,那么只需要加上相对表示符./

seajs.use('module.js');
seajs.use('./js/module.js',function(ex){
    ex.show();
});

五、如何依赖模块(模块与模块之间进行调用,即依赖关系)

通过require('./module3.js')来加载依赖
①如果module3.js是一个普通的模块(即没有用define(function(require,exports,module){})包裹起来的模块)可以通过如下方式来加载依赖:

define(function(require,exports,module) {
    require('./module3.js');
    function show(){
        alert(a)
    }
    exports.show=show;
});

②如果module3.js是一个标准的seajs模块(即用define(function(require,exports,module){})包裹起来的模块),当引入依赖依赖模块时,require执行完的结果就是exports
在控制台打印require('./module3.js'),会发现打印出来的是一个对象 Object {a: 100},所以要通过如下方式来加载依赖:

define(function(require,exports,module) {
    var a=require('./module3.js').a;
    function show(){
        alert(a)
    }
    exports.show=show;
});

六、Grunt构建(grunt-cmd-contact grunt-cmd-transport contrib-clean)

如果用构建工具合并所有的模块之后,模块将会多两个参数 id、[]。分别表示,当前模块的标识(id)和当前模块的依赖([])。注意:依赖是一个数组可以为空
define(id,['',''],function(require,exports,module){})

七、use如何引用多个模块

如果想用use同时引入多个模块,就需要用一个数组来存放依赖,如下。回调函数中的参数,分别代表对应的模块提供的方法即ex1==module.exports==exports

seajs.use(['./js/module1.js','./js/module2.js'],function(ex1,ex2) {
    ex1.show();
    ex2.show();
});

八、sea加ID有利于提取

<script type="text/javascript" src="js/sea.js"></script>    

九、如何改造文件为CMD模块

用define(function(require,exports,module){})包裹,并输出相应的接口exports.show=show;

十、调试接口cache

seajs.cache

十一、模块标识

模块标识是一个字符串,用来标识模块。在 require、 require.async 等加载函数中,第一个参数都是模块标识。

1、一个模块标识由斜线(/)分隔的多项组成。
2、每一项必须是小驼峰字符串、 . 或 .. 。
3、模块标识可以不包含文件后缀名,比如 .js。
4、模块标识可以是 相对 或 顶级 标识。如果第一项是 . 或 ..,则该模块标识是相对标识。
5、顶级标识根据模块系统的基础路径来解析。
6、相对标识相对 require 所在模块的路径来解析。

注意,符合上述规范的标识肯定是 Sea.js 的模块标识,但 Sea.js 能识别的模块标识不需要完全符合以上规范。 比如,除了大小写字母组成的小驼峰字符串,Sea.js 的模块标识字符串还可以包含下划线_和连字符-, 甚至可以是 http://、https://、file:/// 等协议开头的绝对路径。

11.1相对标识

相对标识以 .开头,只出现在模块环境中(define 的 factory 方法里面)。相对标识永远相对当前模块的 URI 来解析

// 在 http://example.com/js/a.js 的 factory 中:
require.resolve('./b');
  // => http://example.com/js/b.js

// 在 http://example.com/js/a.js 的 factory 中:
require.resolve('../c');
  // => http://example.com/c.js

11.2顶级标识

顶级标识不以点(.)或斜线(/)开始, 会相对模块系统的基础路径(即 Sea.js 的 base 路径)来解析
1、假设 base 路径是:http://example.com/assets/
在模块代码里:

require.resolve('gallery/jquery/1.9.1/jquery');
  // => http://example.com/assets/gallery/jquery/1.9.1/jquery.js

2、模块系统的基础路径即 base 的默认值,与 sea.js 的访问路径相关
如果 sea.js 的访问路径是http://example.com/assets/sea.js则 base 路径为http://example.com/assets/
3、当 sea.js 的访问路径中含有版本号时,base 不会包含 seajs/x.y.z 字串。 当 sea.js 有多个版本时,这样会很方便。
如果 sea.js 的路径是:http://example.com/assets/seajs/1.0.0/sea.js则 base 路径是:http://example.com/assets/

4、当然,也可以手工配置 base 路径:

seajs.config({
  base: 'http://code.jquery.com/'
});

// 在模块代码里:
require.resolve('jquery');
  // => http://code.jquery.com/jquery.js

11.3普通路径

除了相对和顶级标识之外的标识都是普通路径。普通路径的解析规则,和 HTML 代码中的 <script src="..."></script> 一样,会相对当前页面解析。
假设当前页面是 http://example.com/path/to/page/index.html

// 绝对路径是普通路径:
require.resolve('http://cdn.com/js/a');
  // => http://cdn.com/js/a.js

// 根路径是普通路径:
require.resolve('/js/b');
  // => http://example.com/js/b.js

// use 中的相对路径始终是普通路径:
seajs.use('./c');
  // => 加载的是 http://example.com/path/to/page/c.js

seajs.use('../d');
  // => 加载的是 http://example.com/path/to/d.js

提示:
1、顶级标识始终相对 base 基础路径解析。
2、绝对路径和根路径始终相对当前页面解析。
3、require 和 require.async 中的相对路径相对当前模块路径来解析。
4、seajs.use 中的相对路径始终相对当前页面来解析。

十二、如何改造现有文件为 CMD 模块

12.1、改造主流模块这里指的是 jQuery、Moment、Backbone、underscore 等业界主流模块

这些模块一般都有对 AMD 和 CommonJS 的支持代码,例如 jQuery 源文件的最后几行

if ( typeof module === "object" && module && typeof module.exports === "object" ) {
    module.exports = jQuery;
} else {
    window.jQuery = window.$ = jQuery;

    if ( typeof define === "function" && define.amd ) {
        define( "jquery", [], function () { return jQuery; } );
    }
}

还有 Backbone 里

var Backbone;
if (typeof exports !== 'undefined') {
  Backbone = exports;
} else {
  Backbone = root.Backbone = {};
}

对于有这些兼容代码的,只需要去掉 define.amd的支持,或是直接包装上 define 就可以了。

define(function(require, exports, module) {
  // code here ...
});

如果没有模块化的兼容代码,有时候需要手动引入依赖,以及暴露对应的接口。

define(function(require, exports, module) {
  var $ = require('$');
  // code here ...
  module.exports = Placeholders;
});

12.2、现有的 JS 文件

对于一些现有的普通 JS 文件,相对简单的多,参考 CMD 的书写规范,把那些暴露到全局命名空间的接口用 CMD 的方式进行改造就可以了。

12.3、改造 jQuery 插件

我们推荐以下的包装方式:

// jquery-plugin-abc
define(function(require, exports, module) {
  var $ = require('$');
  // 插件的代码
  $.fn.abc = function() {};
});

这样的改造方式实际上是强化了原有的 对象(而不是重新包装出一个新的),在实际调用时,可以用下面的方式:

seajs.use(['$', 'jquery-plugin-abc'], function($) {
  // $ 有了 jquery-plugin-abc 所提供的插件功能
  $.abc();
});

十三、配置

seajs.config(options)

seajs.config({

  // 别名配置(当模块标识很长时,可以使用 alias 来简化)
  alias: {
    'es5-safe': 'gallery/es5-safe/0.9.3/es5-safe',
    'json': 'gallery/json/1.0.2/json',
    'jquery': 'jquery/jquery/1.10.1/jquery'
  },

  // 路径配置(当目录比较深,或需要跨目录调用模块时,可以使用 paths 来简化书写)
  paths: {
    'gallery': 'https://a.alipayobjects.com/gallery'
  },

  // 变量配置(有些场景下,模块路径在运行时才能确定,这时可以使用 vars 变量来配置)
  vars: {
    'locale': 'zh-cn'
  },

  // 映射配置(该配置可对模块路径进行映射修改,可用于路径转换、在线调试等)
  map: [
    ['http://example.com/js/app/', 'http://localhost/js/app/']
  ],

  // 预加载项(使用 preload 配置项,可以在普通模块加载前,提前加载并初始化好指定模块)
  preload: [
    Function.prototype.bind ? '' : 'es5-safe',
    this.JSON ? '' : 'json'
  ],

  // 调试模式(值为 true 时,加载器不会删除动态插入的 script 标签。插件也可以根据 debug 配置,来决策 log 等信息的输出。)
  debug: true,

  // Sea.js 的基础路径(Sea.js 在解析顶级标识时,会相对 base 路径来解析)
  base: 'http://example.com/path/to/base/',

  // 文件编码(获取模块文件时,<script> 或 <link> 标签的 charset 属性。 默认是 utf-8)
  charset: 'utf-8'
});

十四、ID 和路径匹配原则 (注意:这是一个万人坑)

所谓 ID 和路径匹配原则 是指,使用 seajs.use 或 require 进行引用的文件,如果是具名模块(即定义了 ID 的模块),会把 ID 和 seajs.use 的路径名进行匹配,如果一致,则正确执行模块返回结果。反之,则返回 null。例如:

seajs.use('lib/jquery', function($) {
    // use $
});

或者在模块中 require :

define(function(require, exports, module) {
    var $ = require('lib/jquery');
    // use $
});

当 jQuery 文件是下面的情况时,上述的变量 $ 能拿到正确的返回结果。

// 文件路径是 lib/jquery.js
// ID 和实际路径匹配了(.js 后缀会自动补上)
define('lib/jquery', function(require, exports, module) {
    // jquery code
});

下面的代码则返回 null:

// 文件路径是 lib/jquery.js
// 但是 ID 是 lib/jquery.min.js
// ID 和路径不匹配
define('lib/jquery.min', function(require, exports, module) {
    // jquery code
});

而匿名模块始终能正确返回结果:

// lib/jquery.js
// 匿名模块,不需要进行匹配
// 但是文件中只能有一个 define 块
define(function(require, exports, module) {
    // jquery code
});

注意这里用于匹配的 ID 都是经过 alias 和 path 解析并且补完后缀之后的。为什么要有这个原则
首先,Sea.js 的模块启动接口秉承的是路径即 ID 的设计原则。seajs.use 的方法的第一个参数被规定为文件路径(而不是 ID),这样的设计减轻了记忆模块 ID 的负担,无论是匿名模块还是具名模块,开发者只需要知道文件放在哪儿就行了。
进一步的,之所以有这个 ID 和路径匹配原则,是因为在 CMD 的书写规范中,一个文件对应一个模块,所有的模块都是匿名模块(即 define(factory)的形式)。那么当 seajs.use 某模块时,这个模块对应的文件里的唯一的 define 方法理所当然的是这个模块的执行代码,这时可以正确返回结果。
但是在生产环境下,静态文件不可避免地需要进行合并打包或者进行 combo,以优化请求数提高页面性能。这时,一个 js 文件可能有很多 define() 方法。

define(funtion(require, exports, module) {
    // module a
});

define(funtion(require, exports, module) {
    // module b
});

define(funtion(require, exports, module) {
    // module c
});

那么请问,当 seajs.use 这个文件时,应该返回哪个模块?
所以这时候 ID 就派上了用场,我们可以这样写:

// path/a.js

define('path/a', funtion(require, exports, module) {
    // module a
});

define('path/b', funtion(require, exports, module) {
    // module b
});

define('path/c', funtion(require, exports, module) {
    // module c
});

我们定义好每个模块的 id ,在 Sea.js 里,那个和文件路径匹配的 ID的模块就是这个文件的主模块。此时:

seajs.use('path/a', function(a) {
    // got a, not b or c
});

这个原则保证了我们能够自由合并模块来优化性能,seajs-combo 和 spm-build 的构建机制都是基于此原则。
在 RequireJS 中,也有类似的原则:http://requirejs.org/docs/errors.html#mismatch更深一步可能有人要问为啥一定要把 ID 定为文件路径,Sea.js 不是可以自定义 ID 吗,像下面这样:

define('module-id', funtion(require, exports, module) {
    // module id
});

// 然后就可以
seajs.use('module-id', function(Module) {
    // Module
});

上面的代码当然可以运行。但是有一点,任何一个模块的运行都涉及到两个步骤:模块定义 和 模块执行,上面的代码两个步骤都包括在内。而使用了 Sea.js ,我们不希望用户去手动写 script 标签引用模块。希望只需要 seajs.use 模块的文件路径即可(入口唯一):

seajs.use('path/to/module', function(Module) {
    // Module
});

Sea.js 会自动插入 script 标签,完成定义步骤,然后执行模块,拿到模块的输出。所以当一个文件里有多个 define 时,只能用 ID 是否匹配 use 中的路径来判断是否主模块。
当然可以回避掉这个原则,你只需要自己负责模块的定义部分,再自己 seajs.use 之前定义好的模块 ID 就行。

<!-- 各种模块的定义 define define define -->
<script src="http://example.com/modules.js"></script>

<script>
// 这时 use 的第一个参数就可以不必是文件路径了,因为已经有定义好的模块 ID 了
seajs.use('jquery', function($) {
    // $
});
</script>

或者通过 alias 来帮助 ID 匹配上最终的路径,这样就和 RequireJS 的方案基本一致了。

  // lib/jquery-1.7.2.js 的内容如下
define('$', funtion(require, exports, module) {
  // jQuery
});

这样就不需要自己去引用上面的文件,可以直接通过 seajs.use 调用。

seajs.config({
  alias: {
    $: 'lib/jquery-1.7.2.js'
  }
});

seajs.use('$', function() {
  // Got $ !
});
不止于修改器:用Cheat Engine(CE)的Lua脚本和D3D Hook打造你的游戏辅助界面 本文深入探讨了Cheat Engine(CE)的高级功能,包括Lua脚本自动化和D3D Hook技术,帮助用户从基础内存扫描升级到开发具有专业图形界面的游戏辅助工具。通过实战示例和优化策略,展示了如何创建高效、稳定的游戏辅助系统,并打包为独立训练器。 阅读详情

相关推荐

保姆级教程:用VESTA软件5分钟搞定纳米颗粒Wulff Construction建模(以Au金为例)

本文提供了一份详细的VESTA软件教程,指导用户如何在5分钟内完成纳米颗粒Wulff Construction建模,特别以金(Au)为例。从环境搭建、基础晶体结构创建到Wulff Construction设置和可视化优化,涵盖了全流程操作步骤和常见问题解决方案,适合科研新手快速上手。

weixin_29311017的博客 436

Sea.js 使用总结(3)

模版引擎是渲染页面 模版加载器是书写js

yuelinana的博客 537

如何在huggingface上申请下载使用llama2/3模型

huggingface-cli download --resume-download 模型名称 --local-dir 存放模型的位置 --local-dir-use-symlinks False --resume-download --token token序列号xxxxxxx。登录huggingface,在模型详情页面上,找到这个表单,填写内容,提交申请。需要使用梯子,country填写梯子的位置吧(比如美国)等待一小时左右,会有邮件通知。

a61022706的博客 1万+

本地多模块依赖的相关问题

spring boot 本地多模块依赖,打包运行时的错误

qq_63173180的博客 1376

【Flow3D实战】从零构建水利冲淤模型:关键步骤与参数详解

本文详细介绍了使用Flow3D构建水利冲淤模型的关键步骤与参数设置技巧。从基础认知到前处理、计算设置和后处理,全面解析如何高效模拟水流与泥沙的相互作用,特别适用于桥墩冲刷、水库泄洪等工程场景。通过实战案例分享,帮助读者掌握Flow3D在水利工程中的精准应用,提升模型精度与计算效率。

weixin_42549723的博客 499

医药行业新零售项目数据分析报告——基于Excel的分析与可视化

不同平台客户支付金额用数字+百分比展示更直观。各大区支付金额分析较为粗浅,后续可加入不同大区人数、配送费等进行细分分析。图表略微单一,可采用组合图,运用两个及以上维度对数据进行分析。数据来源本项目数据来源于某机构的项目案例,以上分析内容均为本人原创,不涉嫌抄袭。原做项目,新平台首发。

2401_84213513的博客 1495

seajs常用配置

seajs使用很多,但配置相对比较少,新项目时,总是要重新去处理一次,老忘记,所以记录下,方便查找 初始加载 配置方式: seajs.config({ base: "./", alias: { "ztree" : "/javascript/plugin/ztree/js/jquery.ztree.all.js", "flexigrid" : "/javascript

Bennes的专栏 696

Android Audio基础——系统服务(二)

AudioService 继承自 IAudioService.Stub。IAudioService.Stub 类很明显是通过 IAudioService.aidl 自动生成的。AudioService 位于 Binder Native 端。AudioManager 拥有 AudioService 的 Binder Proxy 端,是 AudioService 在客户端的一个代理。几乎所有客户端对 AudioManager 进行的请求,最终都会交由 AudioService 实现。

小旭的专栏 2072

一文讲解内核模块依赖!

模块加载时,加载程序将去处理未决符号,在特殊段中搜索符号的名字,如果找到,则将获得的地址填充在被加载模块的相应段中,这样符号的地址就可以确定。解决这个问题的方法是将两个模块放在一起编译,或者将dep模块放在内核源码中,先在内核源码下编译完所有的模块,再编译vser模块。这在一个驱动调用另一个驱动代码时比较常见,这样模块和模块之间就形成了依赖关系,使用导出符号的模块将会依赖于导出符号的模块。内核将会创建模块依赖关系的链接,只有当依赖于这个模块的链表为空时,模块才能被卸载.举个具体的例子,下面是两个C文件,

youzhangjing_的博客 2305

【Claude】Claude Code 子代理(Subagents)完全指南:多 AI 编排与并行任务管理

子代理是在独立上下文窗口特性主代理子代理上下文窗口与你对话的主上下文完全独立的上下文工具权限拥有所有工具可自定义限制生命周期整个会话完成任务后结束通信方式直接对话结果返回给主代理模型继承主会话设置可指定不同模型你可以创建专属子代理,指定模型、工具权限和系统提示。在对话中,Claude 会根据任务自动选择合适的子代理。

博客 5538

彻底解析 DDIC_TYPE_INCONSISTENCY:从 ABAP ST22 连环 Dump 到 SE14 一键修复

听上去像内核级的致命故障,实则更多源于日常运维的细枝末节。只要掌握的排查三板斧,结合严格的变更流程与周期性的字典体检,再严重的 Dump 也能化险为夷。希望本文的案例与步骤能帮助读者在下一次遇到类似问题时,既能快速止血,也能追根溯源,避免重蹈覆辙。

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

Maven高级1-分模块开发与依赖问题

maven高级

qq_45681515的博客 2032

【ROS2】机械臂MoveIt2

navigation2 专注于移动机器人的导航与定位,处理大范围空间的底盘运动;MoveIt2 专注于机械臂的操作规划,处理多关节协同的末端执行器运动。在复合机器人(如,移动机械臂)navigation2 负责移动到目标区域,MoveIt2 负责机械臂抓取。官网:https://moveit.picknik.ai/main/index.html。

郭老二 595

JS模块化(Module模式模块化,SeaJS工具模块化)

1、Module模式模块化 Module模式具有模块化,可重用的基本特征,封装了变量和function,只暴露可用public的方法,其它私有方法全部隐藏。在没有使用模块化工具的情况下,用模块化的思想来编写整个JS结构。 例如下图,以webrtcUI层代码为例,MeetingMainPage为主模块,MeetingChatModule为挂载在MeetingMainPage下的子模块。请注意,这...

qqwan7的博客 383

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

使用模块化管理工具seajs实现简单动画效果

今天使用模块化的管理工具seajs实现了一个简单的动画效果。 seajs具有简单友好的模块定义规范。seajs遵循CMD规范,可以像nodejs一样编写代码。 seajs具有自然直观的代码组织方式。依赖的自动加载,配置简洁清晰。 通过学习,发现seajs的使用是具有一个标准的格式的,如下define(function(require,exports,module){ //定义的代码块 });...

weixin_34409357的博客 117

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

javascript模块化工具之SeaJs和RequireJs

JavaScript模块化工具 sea.Js的使用 注意:再结合第三方包使用时,需要做相关的配置 引入seaJs包(可以使用命令下载 npm install --save sea.JS) <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> &l...

weixin_30778805的博客 98

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

underscore javascript工具库支持seajs模块化

underscore是一个很有用的js工具库,但是好像默认不支持seajs模块化 新建一个文件例如叫做xx.js 谈后,键入 define(function(require,exports,module) {     这里将underscore源代码复制进来 }); 这样在使使用时 var _ = require('lib/xx'); console.info(_.V...

weixin_30429201的博客 90

seajs小记

//seajs是一款可以把前台模块化的工具 //seajs 加载方式 <script src='./js/sea.js'></script> <script> //配置方式 seajs.cofig({ base: "./" //基目录,所有索引文件会以这个为基准 }) //...

weixin_33671935的博客 109

已有 JS 模块化和打包方案收集

模块化方案 RequireJS AMD 方案, 常用的 define 语法, 异步加载模块, 目前很多支持: 官网 http://requirejs.org/Github https://github.com/jrburke/requirejsGetting started https://gist.github.com/willurd/6054834打包工具 http://ja

杨名天吓 9437

seajs打包部署工具spm的使用总结

转自:http://yanue.net/archives/398.html 相信使用seajs的好处大家都是知道的,接触seajs好像是在半年前,当时还不知道页面阻塞问题,这里不带多余的话了。 seajs实现了模块化的开发,一个网站如果分了很多很多模块的话,等开发完成了,发现有很大一堆的js需要加载,即使使用了seajs优化加载了,但是过多的http请求会造成服务器的压力,影响加载

CF西西的专栏 1772

Grunt打包之seajs项目【转】

原文:http://www.cnblogs.com/accordion/p/4508154.html grunt与seajs grunt是前端流行的自定义任务的脚手架工具,我们可以使用grunt来为我们做一些重复度很高的事情,如压缩,合并,js语法检查等。通过定义grunt的配置文件Gruntfile.js,配置并注册grunt的任务,最终我们可以通过命令行来执行任务。 seajs主要用于模...

weixin_33814685的博客 120

SeaJS spm

主题:SeaJS快速入门,让js代码模块化 - 2011-09-09修订,新增参考资料 使用spm build 批量打包压缩seajs 代码 主题:从 RequireJS 到 SeaJS   可作预加载 require到一个模块时是阻塞的。【真正的按需加载】 ...

施天助的专栏 162

gruntjs结合seajs开发

gruntjs是一款前端构建化工具,其可以帮我们做很多重复性的劳动,可以很大程度上提高前端开发的效率,下面用实例就来简单介绍下其配合seajs模块化框架是如何使用的。 示例 1.首先你得安装nodejs,然后新建nodejs文件夹,当作项目的根目录,在其中新建package.json package.json: { "name":"testGrunt", "version":"0.

我是新手F1的专栏 391

Seajs是什么及其优缺点&如何使用

这篇文章主要介绍了Seajs的相关知识和和学习心得,适合刚接触SeaJS的同学,需要的朋友可以参考下,有更好的新手教程或文档,欢迎推荐、分享! 1.Seajs简介 Seajs,一个Web模块加载框架,追求简单、自然的代码书写和组织方式,:Sea.js 遵循 CMD 规范,模块化JS代码。依赖的自动加载、配置的简洁清晰,可以让程序员更多地专注编码。 2.Seajs优缺点 优点: 1).提高可维护性。 2).模块化编程。 3).动态加载,前端性能优化 缺点: 1).学习文档偏少且混乱,会更改

s13166803785的博客 724

Seajs前端开发规范

Seajs简介 SeaJS是一个遵循CommonJS规范的JavaScript模块加载框架,可以实现JavaScript的模块化开发及加载机制。与jQuery等 JavaScript框架不同,SeaJS不会扩展封装语言特性,而只是实现JavaScript的模块化及按模块加载。SeaJS的主要目的是令 JavaScript开发模块化并可以轻松愉悦进行加载,将前端工程师从繁重的JavaSc...

172

seajs动态加载js原理_Seajs配合vue打造不脱发轻量级spa(一)

现如今要开启一个前端项目,大都会利用上webpack,parcel前端模块化工具来构建前端项目。我自己也常常用webpack来构建自己的项目,但每次webpack的版本升级都要导致项目要修改各种loader插件,有过类似经历的人自然会明白多么痛苦它的优点我就不说了,缺点我觉得也不少,请看知乎这篇文章 https://zhuanlan.zhihu.com/p/32148338所以我分享一下最近搭的一...

weixin_35085438的博客 697
上一篇: Array的一些排序算法
下一篇: js闭包
chentian888
博客等级 码龄11年 16粉丝 76原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值