数据绑定和第一个 AngularJS Web应用

AngularJS 与 SQL 的集成应用 AngularJS 是一个由Google维护的开源Web应用框架,主要适用于单页应用(SPA)的开发。它通过扩展HTML的语法,使得静态HTML文档变成动态内容。指令(Directives):允许开发者自定义HTML语法。双向数据绑定(Two-way Data Binding):模型和视图之间的自动同步。依赖注入(Dependency Injection):有助于创建可复用、可维护和可测试的代码。MVC架构:模型-视图-控制器模式,有助于分离代码和提升开发效率。 阅读详情
Hello World
写一个Hello World应用是开始学习AngularJS的最基本途径,让我们从一段简单得不能再简单
的HTML开始吧。
随着学习的深入,我们会逐渐深入到AngularJS的内部原理中。 现在, 让我们先来写一个Hello
World应用。
<!DOCTYPE html>
<html ng-app>
<head>
<title>Simple app</title>
<script
src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.13/angular.js">
</script>
</head>
<body>
<input ng-model="name" type="text" placeholder="Your name">
<h1>Hello {{ name }}</h1>
</body>
</html>
图2-1 Hello World
虽然这个例子不怎么有趣,但它展示了AngularJS最基本也最令人印象深刻的功能之一: 数

据绑定。

请注意,在本章的示例代码中为了方便展示第一个核心概念,我们并没有用最
佳方式编写控制器。这也是本书唯一一处我们不鼓励将示例代码应用在实际生
产中,而只作为学习范例的地方。
2.1 AngularJS 中的数据绑定
在Rails等传统Web框架中,控制器将多个模型中的数据和模板组合在一起形成视图,并将其
提供给用户,这个组合过程会产生一个单向视图。如果没有创建任何自定义的JavaScript组件,视
图只会体现它渲染时模型暴露出的数据。在写这篇文章时,已经出现了好几个可以在视图和模型
之间自动进行数据绑定的框架。
AngularJS则采用了完全不同的解决方案。它创建实时模板来代替视图,而不是将数据合并
进模板之后更新DOM。任何一个独立视图组件中的值都是动态替换的。这个功能可以说是
AngularJS中最重要的功能之一,也是让我们只用10行代码,并且在没有任何JavaScirpt的情况下
就可以写出Hello World的关键。
要实现这个功能,只要在HTML页面中引用angular.js,并在某个DOM元素上明确设置
ng-app属性即可。 ng-app属性声明所有被其包含的内容都属于这个AngularJS应用,这也是我们
可以在Web应用中嵌套AngularJS应用的原因。只有被具有ng-app属性的DOM元素包含的元素才
会受AngularJS影响。
视图中的插值会在计算一个或多个变量时被动态替换,替换结果是字符串中的
插值被变量的值替代。
例如,如果有一个叫做name的变量,它的值是“ Ari”,那么视图中的"Hello
{{ name }}"字符串会被替换成“ Hello Ari”。
自动数据绑定使我们可以将视图理解为模型状态的映射。当客户端的数据模型发生变化时,
视图就能反映出这些变化,并且不需要写任何自定义的代码,它就可以工作。
在MVC(Model View Controller,模型视图控制器)的世界里,控制器可以不必担心会牵
扯到渲染视图的工作。这样我们就不必再担心如何分离视图和控制器逻辑,并且也可以使测试变
得既简单又令人愉悦。
MVC是一种软件架构设计模式,它将表现从用户交互中分离出来。通常来讲,
模型中包含应用的数据和与数据进行交互的方法,视图将数据呈献给用户,而
控制器则是二者之间的桥梁。
这种表现分离①能将应用中的对象很好地隔离开来,因此视图不需要知道如何保
存对象,只要知道如何显示它即可。这也意味着数据模型不需要同视图进行交
互,只需要包含数据和操作视图的方法。控制器用来存放将二者绑定在一起的
业务逻辑。

AngularJS①会记录数据模型所包含的数据在任何特定时间点的值(在Hello World例子中就是
name的值),而不是原始值。
当AngularJS认为某个值可能发生变化时,它会运行自己的事件循环来检查这个值是否变
“脏”。如果该值从上次事件循环运行之后发生了变化,则该值被认为是“脏”值。这也是Angular
可以跟踪和响应应用变化的方式。
这个事件循环会调用$digest()循环,第23章将会详细介绍。
这个过程被称作脏检查(dirty checking) 。脏检查是检查数据模型变化的有效手段。当有潜
在的变化存在时, AngularJS会在事件循环时执行脏检查(第24章会深入讨论)来保证数据的一
致性。
如果使用KnockoutJS这种通过在数据模型上绑定事件监听器来监听数据变化的框架,这个
过程会变得更复杂且低效②。处理事件合并、依赖跟踪和大量的事件触发(event firing)是非常复
杂的,而且会在性能方面导致额外的问题。
尽管存在更高效的方式,但脏检查可以运行在所有浏览器中并且是可预测的。
此外,很多在速度和效率方面有要求的软件都会使用脏检查的方案③。
借助AngularJS,不需要构建复杂和新的JavaScript功能,就可以在视图中实现类自动同步的
机制。
为了表示内部和内置的库函数,Angular使用$预定义对象。尽管这类似于全局的jQuery
对象$,但它们是完全无关的。只要遇到$符号,你都可以只把它看作一个Angular对象。
2.2 简单的数据绑定
审阅一下上面写的代码,我们使用ng-model指令将内部数据模型对象($scope)中的name
属性绑定到了文本输入字段上。
这意味着无论在文本输入字段中输入了什么,都会同步到数据模型中。
数据模型对象(model object)是指$scope对象。 $scope对象是一个简单的
JavaScript对象,其中的属性可以被视图访问,也可以同控制器进行交互。如果
不理解这个概念也没有关系,后面的例子将会对这个概念进行详细说明。
双向数据绑定(bi-directional)意味着如果视图改变了某个值,数据模型会通过
脏检查观察到这个变化,而如果数据模型改变了某个值,视图也会依据变化重
新渲染。
在输入字段上使用ng-model指令来实现数据绑定,如下所示:

<input ng-model="person.name" type="text" placeholder="Yourname">
<h1>Hello{{ person.name }}</h1>
这样绑定就设置好了(没错,就是这么简单)。我们可以观察一下视图是如何更新数据模型
的。当输入字段中的值发生变化时, person.name会被更新,而视图将反映出这个更新。
我们仅通过视图就实现了一个双向数据绑定。为了从其他角度(后端到前端)解释双向数据
绑定,后面会深入介绍控制器。
正 如 ng-app 声 明 所 有 被 它 包 含 的 元 素 都 属 于 AngularJS 应 用 一 样 , DOM 元 素 上 的
ng-controller声明所有被它包含的元素都属于某个控制器。
为了解释这个概念,我们将前面的例子修改成如下的样子:
<div ng-controller='MyController'>
<input ng-model="person.name" type="text" placeholder="Your name">
<h1>Hello {{ person.name }}</h1>
</div>
在这个例子中,我们会创建一个每秒钟走一步的时钟(时钟通常都是这样的) ,并更新clock
变量上的数据:
function MyController($scope, $timeout) {
var updateClock = function() {
$scope.clock = new Date();
$timeout(function() {
updateClock();
}, 1000);
};
updateClock();
};
在这个例子中, MyController函数接受两个参数,即该DOM元素的$scope和
$timeout。第13章将介绍如何使用不同的变量定义函数。
在这个例子中,当定时器触发时会调用updateClock()函数,将$scope.clock的值设置为当
前时间。
 $timeout对象
可以在视图中将clock变量用{{ }}包起来,以显示$scope中的clock的值:
<div ng-controller="MyController">
<h5>{{ clock }}</h5>
</div>
下面是完整的示例代码:
<!doctype html>
<html ng-app>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.13/angular.js"></script>
</head>
<body>
<div ng-controller="MyController">
<h1>Hello {{ clock }}!</h1>

</div>
<script type="text/javascript">
function MyController($scope, $timeout) {
var updateClock = function() {
$scope.clock = new Date();
$timeout(function() {
updateClock();
}, 1000);
};
updateClock();
};
</script>
</body>
</html>
在线示例: http://jsbin.com/uHiVOZo/1/edit?html,output。
尽管我们可以将所有代码都写在一个文件中,但由于需要将不同的组件分开开
发,将代码写在一个文件中会使协同工作变得非常困难。通常情况下,更好的
选择是将JavaScript放在单独的文件中,而不是index.html中。
上面的代码可以修改成:
<!doctype html>
<html ng-app>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.13/angular.js"></script>
</head>
<body>
<div ng-controller="MyController">
<h1>Hello {{ clock }}!</h1>
</div>
<script type="text/javascript" src="js/app.js"></script>
</body>
</html>
将前面例子中的JavaScript代码放在js/app.js文件中,而不是将它直接写在HTML中。
// 在app.js中
function MyController($scope, $timeout) {
var updateClock = function() {
$scope.clock = new Date();
$timeout(function() {
updateClock();
}, 1000);
};
updateClock();
};
2.3 数据绑定的最佳实践
由于JavaScript自身的特点,以及它在传递值和引用时的不同处理方式,通常认为,在视图中
通过对象的属性而非对象本身来进行引用绑定,是Angular中的最佳实践。

如果把这个最佳实践应用到上面时钟的例子中,需要把视图中的代码改写成下面这样:
<!doctype html>
<html ng-app>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.13/angular.js"></script>
</head>
<body>
<div ng-controller="MyController">
<h1>Hello {{ clock.now }}!</h1>
</div>
<script type="text/javascript" src="js/app.js"></script>
</body>
</html>
在这个例子中,相比每秒钟都更新$scope.clock,更新clock.now的值会是更好的选择。有
了这个优化后,我们将反映数据变化的逻辑做如下修改:
// 在app.js中
function MyController($scope) {
$scope.clock = {
now: new Date()
};
var updateClock = function() {
$scope.clock.now = new Date()
};
setInterval(function() {
$scope.$apply(updateClock);
}, 1000);
updateClock();
};
将所有绑定都通过这样的形式放在视图中,是个非常好的主意。

AngularJS 应用深入解析 AngularJS是一款用于构建单页Web应用的前端JavaScript框架。它允许开发者使用HTML作为模板语言,以简洁、高效的方式构建交互式的Web界面。AngularJS通过双向数据绑定、模块化、依赖注入等特性,简化了前端开发过程。AngularJS是一款功能强大、易于使用的前端JavaScript框架。它为开发者提供了丰富的特性,帮助开发者高效地构建Web应用。随着技术的不断发展,AngularJS将在现代Web开发中发挥越来越重要的作用。 阅读详情

相关推荐

AngularJS入门指南:从零开始构建你的第一个Web应用

我们的目的是帮助完全没有接触过AngularJS的初学者,从一无所知到能够独立构建一个简单的Web应用。在这个过程中,我们会涵盖AngularJS的核心知识和常用技巧,让大家对这个框架有一个初步但全面的认识。接下来的内容,我们会先介绍AngularJS的核心概念,用生活中的例子帮助大家理解;然后讲解核心算法原理和具体操作步骤,还会给出相应的代码示例;接着进行数学模型和公式的分析;之后带领大家进行项目实战,搭建开发环境、实现代码并解读;再介绍AngularJS的实际应用场景、推荐相关工具和资源;

AI架构全栈开发实战笔记 852

AngularJs前后台数据交互

从后台向前台传递数据,需将数据转化为json格式:JSONArray jsonArray = JSONArray.fromObject(list); 从前台向后台传递数据:都是以键值对的形式,一名称,一值,通过http中params属性来实现; 如从前台接收一名为bookName的参数,同时从后台向前台传递一个List 对象list的java代码: public void doPos

ren_qin的专栏 2万+

构建AngularJS动态Web应用的示例教程

本文还有配套的精品资源,点击获取 简介:AngularJS是一个由Google支持的前端JavaScript框架,用于创建动态Web应用程序。本文将通过一个名为“angular-sample-app”的示例应用程序,详细介绍AngularJS的核心特性,包括双向数据绑定、控制器、指令系统、服务与依赖注入、表单处理、路由与导航、模板和局部存储以及其他高级特性。通过这个示例应用...

weixin_42499004的博客 964

angular6学习(三):第一个数据绑定

实现功能:在输入框内输入内容,输入框下面同时出现输入的内容步骤:1. 在app.component.html文件中添加输入框,内容设置为name,同时在下面显示name的内容: 2.修改app.module.ts, 引入表单模块在imports中添加 FormsModule即可。三:显示如下...

七刀的专栏 2177

AngularJS源码解析与实践教程:打造高效Web应用

AngularJS作为前端开发领域中的一颗璀璨明珠,由Google团队精心打造,自2009年发布以来,迅速成为前端开发人员的必备工具之一。AngularJS的出现,不仅简化了复杂的单页面应用(SPA)开发,更通过其独特的数据绑定机制和依赖注入功能,引领了一种全新的Web开发模式。双向数据绑定:AngularJS通过其独特的脏值检查机制(Dirty Checking)实现了数据的双向绑定。开发者不需要手动编写代码来同步视图和模型状态,极大地提高了开发效率。依赖注入(DI)

weixin_31620365的博客 916

AngularJS应用开发:打造动态Web应用的实践指南

在AngularJS中,模块是组织应用程序的基石。它不仅负责定义应用程序的全局状态,还帮助开发者将应用分解成可管理、可测试的单元。模块可以包含控制器、服务、指令、过滤器等组件。理解模块的基本概念对于构建可维护、可扩展的AngularJS应用至关重要。AngularJS中的模块概念与传统的编程概念中的模块略有不同。在这里,模块更像是一个包含应用元数据和组件的容器。开发者通过定义模块来指定应用程序的依赖关系,这样AngularJS就可以在运行时正确地加载和初始化这些组件。

weixin_30248619的博客 978

AngularJS权威教程 第2章 数据绑定和第一个 AngularJS Web应用

Hello World 学习任何一门开发语言,都是从Hello World开始的,这种无法言语的操蛋心情,大家都懂,但是一个简易的应用能够最直接的展现他的功能,这个无法否决。吐槽一下,代码如下。。。 Simple App Hello {{ name }} 教程中给出的引入js的链接https://ajax.googleapis.com/ajax/libs/a

奋斗码农的博客 997

AI智能体评估基准AgentBench:从原理到实战的完整指南

在人工智能领域,智能体(AI Agent)的评估是衡量其实际应用能力的关键环节。评估基准通过设计标准化的测试任务,系统性地检验智能体的推理、规划和工具使用等核心能力。其技术价值在于为模型迭代和产品选型提供了客观、可复现的量化依据,能有效推动技术从演示走向工程落地。典型的应用场景包括模型能力评测、智能体框架对比以及具体应用(如自动化运维、智能客服)的性能验证。本文聚焦于清华团队推出的AgentBench,它作为一个多维度的综合评估套件,涵盖了从操作系统、数据库操作到网页浏览、数字卡牌游戏等八个贴近真实世界的任

weixin_27207591的博客 599

数据绑定和第一个AngularJS Web应用

<!DOCTYPE html> <html lang="en" ng-app> <head> <meta charset="UTF-8"> <title>Document</title> <script src="lib/angular.min.js"></script> &lt...

weixin_30834783的博客 93

山东大学软件工程应用与实践——GMSSL开源库(六)——SM9密钥交换协议

2021SC@SDUSC 文章目录基本概念符号及辅助算法SM9密钥交换协议 基本概念 1976年,Diffie和Hellman在其题为《密码学的新方向》的论文中首次给出了公钥密码学的定义,并提出了Diffie-Hellman密钥交换算法。该算法解决了对称密码体制中的密钥分发问题,使得通信双方可以通过公开信道安全地交换共享密钥。 使用SM9通信的双方通过对方的标识和自身的私钥,经过两次或者可选的三次信息传递过程,计算获取一个由双方共同决定的共享秘密密钥。该密钥可以作为对称密码算法的会话密钥,其中可选步骤用来实

m0_51588039的博客 1988

【机器人】线性方程最小二乘解法对机械臂DH参数进行标定

1.前言 看了一篇文章,觉得里面的DH参数标定法讲的很清晰,便使用Matlab复现了一下,效果还可以,特写此文记录。 2.原理 2.1.误差最佳值的最小二乘计算 有研究结果表明:几乎95%的机器人位置误差都是由机器人内部运动学的不准确描述引起的,所以对DH模型参数进行标定是很有必要的。 DH参数物理含义:选自《机器人学、机器视觉与控制-Matlab基础》 当DH参数确定后,我们...

要恰饭得嘛 1万+

AngularJS 中的数据绑定

在Rails等传统Web框架中,控制器将多个模型中的数据和模板组合在一起形成视图,并将其提供给用户,这个组合过程会产生一个单向视图。如果没有创建任何自定义的JavaScript组件,视图只会体现它渲染时模型暴露出的数据。在写这篇文章时,已经出现了好几个可以在视图和模型之间自动进行数据绑定的框架。 AngularJS则采用了完全不同的解决方案。它创建实时模板来代替视图,而不是将数据合并进模板之后更

光英的记忆博客 795

智能车数字图像处理算法入门及C语言实现

智能车图像的最最基本入门算法介绍及C语言实现,二值化 - 特征识别 - 补线 - 中心巡线 - 偏差曲率计算。

不想随波逐流的大学生一枚,我们每个人都在努力奔跑 5110

angularJS基于WEB的静态页面模板

中文网:http://www.apjs.net/ API:http://docs.angularjs.cn/api 官方网站:http://angularjs.org 以下来源于:http://www.oschina.net/p/angularjs Angular JS (Angular.JS) 是一组用来开发Web页面的框架、模板以及数据绑定和丰富UI组件。它支持整个开发进程,提

user296925354的专栏 5154

群晖如何安装软路由OpenWrt/iStoreOS作为旁路由(含网络设置、设置密码、还原出厂设置等linux命令ipk包)

openwrt的固件。

XiaoqiangClub的博客 7017

数字逻辑Fundamentals of Digital Logic with Verilog Design | 3rd Edition Solutins Chapter 6(step by step)

第六章6-1~6-42习题详解,缺少6-39和6-40

weixin_62651190的博客 1466

【笔记】AngularJs学习笔记[01] 数据绑定

数据绑定是指仅声明界面的某一部分映射到js的属性,让他们自动同步。语法: //声明一个叫name的变量,然后可以引用 name引用: 例如: //这个字符串会被name的值替换注意:ng将模版进行了动态实时创建,用于代替视图,这也区别于在backbonejs中是将数据模版组合在一起来形成view。这也是ng中最重要的功能之一 ——“动态、实时更新“。现在我们来说说实现步骤: 1、在ht...

前端进阶之路 | 中大厂、外企、国企内推 | 面试培训 | 简历修改 1116

【RAG文档解析优化】复杂Excel表格处理

—从识别表格边界,到恢复内部结构,再到生成RAG友好的表示——我们可以系统性地将这些“带刺的玫瑰”驯服。虽然代码实现可能充满细节和挑战,但其带来的回报是巨大的:一个更干净、更可靠的知识库,以及一个能真正理解和利用表格数据、从而提供精准答案的RAG系统。为了人类阅读的便利性,制作者常常会使用合并单元格来创建标题、使用多层表头来组织复杂的列、在同一个Sheet页中放置多个相关的表格,并添加大量的注释说明。它们就像一朵朵“带刺的玫瑰”,虽然蕴含着宝贵的数据,但如果直接用传统的方法(如。

kakaZhui的博客 853

AngularJS 开源项目教程:如何快速掌握双向数据绑定的终极指南

AngularJS 是一个强大的 JavaScript 框架,它通过双向数据绑定让 Web 应用开发变得更加简单高效。本文将为你提供一个完整的指南,帮助你快速理解和掌握 AngularJS 的核心功能——双向数据绑定,让你轻松构建响应式 Web 应用。 ## 什么是双向数据绑定? 双向数据绑定是 AngularJS 最核心的特性之一,它实现了模型(Model)和视图(View)之间的自动同步。

gitblog_00469的博客 974

1.2 Spring AI V1.1.2版本 架构全景:模块拆解与设计哲学

Override// 检查请求的 Token 数量throw new TokenLimitExceededException("请求超出 Token 限制");@Override// 记录实际消耗的 Token@Override// 最先执行// 接口// 不同实现// 使用方无需改变定义抽象,保证可移植性提供 Fluent API,提升开发体验Advisor 机制提供扩展点,支持灵活定制模块化设计让你只引入需要的依赖自动配置。

小林夕程的博客 220

温度PID控制PLC程序

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

使用AngularJS构建大型Web应用

AngularJS是由Google创建的一种JS框架,使用它可以扩展应用程序中的HTML词汇,从而在web应用程序中使用HTML声明动态内容。在该团队工作的软件工程师Brian Ford近日撰写了一篇blog,分享了如何使用AngularJS构建大型Web应用的经验。这些经验对于使用其他JS框架构建大型应用的开发者也极具借鉴意义。 AngularJS的官方网站上给出了这个框架的基本使用方法,如:

计算机图书自由出版人的专栏 1466

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

AngularJS 作用域与数据绑定机制

AngularJS 简介 AngularJS 是由 Google 发起的一款开源的前端 MVC 脚本框架,既适合做普通 WEB 应用也可以做 SPA(单页面应用,所有的用户操作都在一个页面中完成)。与同为 MVC 框架的 Dojo 的定位不同,AngularJS 在功能上更加轻量,而相比于 jQuery,AngularJS 又帮您省去了许多机械的绑定工作。在一些对开发速度要求高,功能模块不需要太

sookielulu的博客 695

android 蓝牙通讯demo

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

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

用AngularJS开发下一代Web应用

AngularJS是一款来自Google的前端JS框架,它的核心特性有:MVC、双向数据绑定、指令和语义化标签、模块化工具、依赖注入、HTML模板,以及对常用工具的封装,例如$http、$cookie...

QDY5945的博客 258

AngularJS是一种由Google开发的JavaScript框架,用于构建动态的Web应用程序

它采用了MVC(Model-View-Controller)的架构模式,通过数据绑定和依赖注入等特性,使得开发者可以更轻松地构建动态、可扩展的Web应用。它采用了MVC(Model-View-Controller)的架构模式,通过数据绑定和依赖注入等特性,使得开发者可以更加高效地构建复杂的前端应用。通过注入依赖,可以实现松耦合的组件设计,提高代码的可测试性和可维护性。这样可以提高代码的可重用性和可测试性。总之,AngularJS是一个功能强大、灵活易用的前端框架,可以帮助开发者构建现代化的Web应用。

[Blog][Domain] programb.blog.youkuaiyun.com 956

10个很棒的AngularJS教程来启动您的Web编程项目

AngularJS(通常称为“ Angular”或“ Angular.js”)是一个开放源代码的Web应用程序框架,主要由Google以及由个人开发人员和公司组成的社区维护,以解决开发单页应用程序时遇到的许多挑战。 它旨在通过提供客户端模型-视图-控制器(MVC)和模型-视图-视图模型(MVVM)体系结构以及富Internet应用程序中常用组件的框架来简化此类应用程序的开发和测试。 ...

danpu0978的博客 240

JavaScript框架之AngularJS学习——双向数据绑定

AngaularJS学习——双向数据绑定 数据绑定是AngularJS框架最优秀的特性之一,能够帮助Web前端开发人员在很大程度上减少对DOM的操作。 数据绑定是AngularJS框架在视图(DOM元素)与作用域之间佳妮的数据同步机制。所谓“双向”,是指界面的操作能够实时同步到作用域中,作用域中的数据修改也能够实现回显到界面中。 作用域可以被视为一个容器,里面有一些基于key-val

陈小名的博客 837
上一篇: 初识AngularJS
下一篇: http状态码301和302详解及区别——辛酸的探索之路
Apress92
博客等级 码龄11年 39粉丝 26原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值