编译原理陈火旺版第四章课后题答案

【编译原理】第四章部分课后题答案 根据表4.1的语法制导定义,为输入表达式5*(4*3+2)构造注释分析树 构造表达式((a*b)+(c))的分析树和语法树 一个语法制导定义,它输出括号的对数 它输出括号嵌套的最大深度 打印出错信息 它完成一个句子的while-do最大嵌套层次的计算并输出这个计算结果 下列文法产生由+作用于整常数或实常数的表达式。两个整数相加时,结果是整型,否则是实型 表达式由+和*作用于变量x和常数组成 给出把中缀表达式翻译成没有冗余括号的中缀表达式的语法制导定义 重写例4.3语法制导定义的基础文法,然后重新设计语法制导 阅读详情
AI摘要

文章讨论了如何消除文法的左递归并将其转换为LL(1)文法,涉及文法的改写、非终结符的FIRST和FOLLOW集合计算,以及预测分析表的构造。内容包括具体文法实例的解析和分析过程。

下面答案仅供参考!

目前修改了第三题和第五题的部分问题。

1.考虑下面文法G1:

S→a∣∧∣(T)

T→T,S∣S

(1) 消去 Q 的左递归。然后,对每个非终结符,写岀不带回溯的递归子程序。

2831ac76023a4f13b806bebffa3ee957.png

(2) 经改写后的文法是否是LL(1)的?给出它的预测分析表。

2.对下面的文法G:

P→(E)lalblΛ

(1)计算这个文法的每个非终结符的FIRST和FOLIOW.

b01d447b3f6c47fdabb50f6730f08c67.png

53bbba4bb8ef40e9bc787c58f03b4e52.png

dcbd93c316e24c80aa86d798473fd8e8.png

(2)证明这个文法是LL(1)的。

 a037c261c47f4f3d9357ec2e8f9e0344.png

(3)构造它的预测分析表。

19458fc1bb454ca3be6724178b3e6e19.png

(4)构造它的递归下降分析程序。

33e92b796ebc41cd8b7c4a7ff144bf2c.png

df73d1ad98654d89905ecd47e4227b92.png

 74a89510401545099b1a7893c892ce8c.png

 595658b8e3774caaad78fda73eed898a.png

3.下面文法中,哪些是LL(1)的,说明理由。

(1)S→Abc

         A→a∣ε

         B→b∣ε

这里是不是写错了,应该是S→ABc?,下图答案是以S→ABc为准。

     看了一下网上流传的答案,基本上都是first(S)={a,b,c}和下图结果一样,如果是S->Abc的话,那么first(S)={a,b}。

edb0cc4e52f24e87ad4ea560765bd969.png

下图答案是以S→Abc为准

 

(2)S→Ab

         A→a∣B∣ε

         B→b∣ε

9a65830559444942bb55a88f1fba6a56.png

(3)S→ABBA

         A→a∣ε

         B→b∣ε

28d28749d09f43c88058787146c9f1e6.png

 (4)S→aSe∣B

       B→bBe∣C

       C→cCe∣d

82c69d45d330433484395a4f7602fdf2.png

4. 对下面文法:

              Expr→-Expr

              Expr→(Expr)∣Var

              ExprTail→-Expr∣ε

              Var→id VarTail

              VarTail→(Expr)∣ε

(1) 构造 LL(1)分析表。

(2) 给出对句子 id - -id((id))的分析过程。

构造文法的预测分析表,通常应当按下列步骤进行: (1) 消除文法的左递归(包括所有直接左递归和间接左递归); (2) 对消除左递归后的文法,提取左公因子; (3) 对经过上述改造后的文法,计算它的每个非终结符的 FIRST 集合和 FOLLOW 集合 ⑷ 根据 FIRST 集合和 FOLLOW 集合构造预测分析表:

第1步对文法G的每个产生式A→α执行第1步和第3步;

第2步对每个终结符a∈FIRST(α),把A→α加至M[A,a]中;

第3步若ε∈FIRST(α),则对任何b∈FOLLOW(A)把A→α加至M[A,b]中;

第4步把所有无定义的M[A,a]标上“出错标志”。

解答:

(1)计算每个非终结符的FIRST集合和FOLLOW集合如下:

              FIRST(Expr)={-,(,id}

              FIRST(ExprTail)={-,ε}

              FIRST(Var)={id}

              FIRST(VarTail)={(,ε}

              FOLLOW(Expr)={),#}

              FOLLOW(ExprTail)={),#}

              FOLLOW(Var)={-,),#}

              FOLLOW(VarTail)={-,∣,#}

构造其预测分析表如下:    

-id()#
ExprExpr→- ExprExpr→Var ExprTailExpr→-( Expr)
ExprTailExprTail→-ExprExprTail→εExprTail→ε
VarVar→id VarTail
VarTailVarTail→εVarTail→(Expr)VarTail→εVarTail→ε

(2)句子id--id((id))的分析过程如下:    

步骤

符号栈

输入串

所用产生式

0

# Expr

id--id((id)) #

1

# ExprTail Var

id--id((id)) #

Expr→Var ExprTail

2

# ExprTail VarTail id

id--id((id)) #

Var→id VarTail

3

# ExprTail VarTail

--id((id)) #

4

# ExprTail

--id((id)) #

VarTail→ε

5

# Expr -

--id((id)) #

ExprTail→-Expr

6

# Expr

-id((id)) #

7

# Expr -

-id((id)) #

Expr→-Expr

8

# Expr

id((id)) #

9

# ExprTail Var

id((id)) #

Expr→Var ExprTail

10

# ExprTail VarTail id

id((id)) #

Var→id VarTail

11

# ExprTail VarTail

((id)) #

12

# ExprTail ) Expr (

((id)) #

VarTail→(Expr)

13

# ExprTail ) Expr

(id)) #

14

# ExprTail ) ) Expr (

(id)) #

15

# ExprTail ) ) Expr

id)) #

16

# ExprTail ) ) ExprTal Var

id)) #

Expr→Var ExprTail

17

# ExprTail ) ) ExprTail VarTail id

id)) #

Var→id VarTail

18

# ExprTail ) ) ExprTail VarTail

)) #

19

# ExprTail ) ) ExprTail

)) #

VarTail→ε

20

# ExprTail ) )

)) #

ExprTail→ε

21

# ExprTail )

) #

22

# ExprTail

#

23

#

#

ExprTail→ε

suc

5. 把下面文法改写为 LL(1)的:

       Declist→Declist;Decl∣Decl

       Decl→IdList:Type

       IdList→IdList,id∣id

       Type→ScalarType∣array(ScalarTypeList) of Type

       ScalarType→id∣Bound..Bound

       Bound→Sign IntLiteral∣id

       Sign→+∣-∣ε

       ScalarTypeList→ScalarTypeList,ScalarType∣ScalarType

       答:本题目主要考査学生理解和运用消除文法的左递归、提取左公共因子等算法的能力, 为判断文法是否是 LL(1)文法,还要计算文法的 FIRST 集合和 FOLLOW 集合。

     消除文法的左递归的基本思想是,将文法规则中的左递归结构变换成等价的右递归结构。

     提取左公因子的算法,是对包含公共左因子的产生式候选,反复提取左因子,就能够 把每个非终结符(包括新引进者)的所有候选首符集变成为两两不相交。

     消除文法的左递归、提取左公共因子后,再计算文法的各非终结符00的首符集 FIRST( X)和随符集 FOLLOW( X),然后根据 LL(1)文法的充分必要条件(即 LL(1)文法 的定义)来判断文法是否是 LL(1)文法。

首先消除左递归,得到文法G(Declist):

                     Declist→Decl Declist’

                     Declist’→;Decl Declist’∣ε

                     Decl→IdList:Type

                     IdList→id IdList’

                     IdList’→,id List’∣ε

                     Type→ScalarType∣array(ScalarTypeList) of Type

                     ScalarType→id∣Bound..Bound

                     Bound→Sign IntLiteral∣id

                     Sign→+∣-∣ε

                     ScalarTypeList→ScalarType ScalarTypeList’

                     ScalarTypeList’→,ScalarType ScalarTypeList’∣ε

  显然,改造后的文法没有左公共因子,计算每个非终结符的FIRST集合和FOLLOW集合如下:

                     FIRST(Declist)={id}

                     FIRST(Declist’)={;,ε}

                     FIRST(Decl)={id}

                     FIRST(IdList)={id}

                     FIRST(IdList’)={,,ε}

                     FIRST(Type)={id,+,-,IntLiteral,array}

                     FIRST(ScalarType)={id,+,-,IntLiteral}

                     FIRST(Bound)={id,+,-,InLiteral}

                     FIRST(Sign)={+,-,ε}

                     FIRST(ScalarTypeList)={id,+,-,IntLiteral }

                     FIRST(ScalarTypeList’)={,,ε}

                     FOLLOW(Declist)={#}

                     FOLLOW(Declist’)={#}

                     FOLLOW(Decl)={id,;}

                     FOLLOW(IdList)={:}

                     FOLLOW(IdList’)={:}

                     FOLLOW(Type)={id,;}

                     FOLLOW(ScalarType)={id,;,),,}

                     FOLLOW(Bound)={id,;,)’,’..}

                     FOLLOW(Sign)={IntLiteral}

                     FOLLOW(ScalarTypeList)={)}

                     FOLLOW(ScalarTypeList’)={)}

显然,改造后的文法是 LL(1)的。

《编译原理》陈火旺版练习答案解析 编译器是将一种语言(源语言)转换为另一种语言(目标语言)的程序,通常用于将高级语言翻译为机器语言。编译过程涉及多个阶段,包括词法分析、语法分析、语义分析、中间代码生成、代码优化以及目标代码生成。 阅读详情

相关推荐

《编译原理》陈火旺第三版课后答案解析

编译是一个将源代码转换成机器代码的过程,它涉及多个步骤,包括词法分析、语法分析、语义分析、中间代码生成、代码优化和目标代码生成。每个阶段都由不同的编译器组件来完成,这些组件协同工作以确保最终的输出能够被计算机执行。正则表达式是一种用于匹配字符串中字符组合的模式。在词法分析的过程中,正则表达式被用来描述那些词法单元的模式,即通过定义一套规则来识别源代码中的词法单元。正则表达式由一系列的字符组成,它们可以是普通字符(例如字母和数字),也可以是具有特殊意义的元字符。

weixin_35756892的博客 1370

编译原理(龙书):第四章部分题目参考答案

目录 4.2.1 4.2.2 4.2.3 4.3.1 4.4.1 4.4.3 4.4.4 4.5.1 4.6.2 4.6.5 4.6.6 4.7.4 4.7.5 4.2.1 4.2.2 4.2.3 4.3.1 4.4.1 4.4.3 4.4.4 4.5.1 4.6.2 4.6.5 4.6.6 4.7.4 4.7.5 ...

乔卿的博客 2万+

《编译原理第三版》陈火旺教授编著及课后习题解答

语义分析的核心是定义一系列的语义规则,并将这些规则应用到语法分析后的抽象语法树(AST)上。语义规则是编程语言规范的一部分,它们定义了标识符的使用、数据类型的行为、函数的调用方式等。语义规则的应用可以分为以下几个步骤:1. 类型推导:编译器需要对AST中每个节点的类型进行推导和验证。2. 类型检查:确保程序中的表达式、变量等符合预期的类型规则。3. 作用域解析:确定变量和函数等在程序中的有效作用域,确保没有符号的冲突和非法引用。

weixin_30661119的博客 927

编译原理(第3版)陈火旺——课后习题答案——第四章

第四章 2.对下面的文法(G): E->TE’ E’->+E|ε T->FT’ T’->T|ε F->PF’ F’->*F’|ε P->(E)|A|B|^ (1)计算这个文法的每个非终结符的FIRST集和FOLLOW集 (2)证明这个文法是LL(1)的 (3)构造她的预测分析表。 解: ...

大胖东的博客 1万+

编译原理课后第四章答案

编译原理及实现第四章的课后答案 有详细的图文解说 简单易懂

陈火旺,编译原理第三版答案

编译原理经典教材课后答案,内容是全的!!!!!!!!

编译原理第四章课后题答案

题目: Expr——_Expr Expr——(Expr)|Var ExprTail ExprTail——Expr|e Var——id VarTail VarTail——(Expr)|e (1)构造LL(1)分析表 (2)给出对句子id _id((id))的分析过程

weixin_45402567的博客 7334

编译原理(陈火旺第三版)练习答案.pdf

我们的教材 编译原理(陈火旺第三版)练习答案,PDF格式的,详细解答。比较好,所以上传了。

编译原理陈火旺版第三章课后题答案

编译原理第三版陈火旺第三章课后题答案

capture3333的博客 5万+

编译原理课后题答案,第三版,陈火旺

大学本科课本,编译原理 第三版,主编陈火旺

SQLite学习——Dapper初识

dapper下载:https://www.nuget.org/packages/Dapper/1.40.0

jiDxiaohuo的博客 1294

编译原理陈火旺版第五章课后题答案

编译原理第三版第五章课后题答案

capture3333的博客 4万+

Unity2020 发布Android包,下载安装配置JDK、SDK、NDK详细教程

配置成功页面 JDK、SDK、NDK

qq_41263535的博客 1万+

编译原理陈火旺第三版第七章课后题答案

编译原理陈火旺第三版第七章课后题答案

capture3333的博客 1万+

trae CN 配置ida的mcp教程

本文介绍了在TraeCN中配置IDA Pro MCP服务的完整步骤:1)准备IDA Pro 9.0+和Python 3.11+环境;2)安装MCP服务端并配置插件;3)生成MCP配置文件;4)在TraeCN中添加HTTP类型MCP服务(默认端口13337);5)测试连接。重点说明了HTTP配置方式的操作流程,包括手动启动服务、正确填写JSON配置等关键环节。

2401_87915504的博客 1953

图论:Dijkstra算法——最详细的分析,图文并茂,一次看懂!

Dijstra算法

普罗米修斯的博客 18万+

编译原理陈火旺第三版第六章课后题答案

编译原理陈火旺第三版第六章课后题答案

capture3333的博客 1万+

纯C语言实现的Luhn算法(信用卡校验位):详解与示例

在本文中,我们详细介绍了如何使用纯C语言实现Luhn算法,并提供了一些示例代码。用于检查任意长度的数字字符串的有效性,用于计算给定数字字符串的校验位字符。我们还提供了一个简单的“main”C程序,用于在命令行上接受一个或多个数字字符串,并计算它们的校验位字符。通过阅读本文和理解示例代码,我们希望读者能够更好地理解Luhn算法的工作原理,并能够在自己的项目中应用这种算法。

qq_38334677的博客 1220

编译原理陈火旺第三版第九章课后题答案

非公用区中等价环元素的地址分配方法是:每当遇到等价环中的元素时,不是将局部数据区当前待分配地址直接分配给所遇到的等价环元素,而是将其分配给从这个等价环中找到的相对数最小的等价元素,然后再按等价环其它的等价元素的相对数与最小相对数的差数,予以分配相应的地址。公用区中等价环元素的地址分配是:当沿公用链依次给对公用区元素分配地址时,若遇到等价环中的元素,则立即把公用区当前待分配的地址分配给当前遇到的等价元素,而不必顾及其相对数是否为等价环中的最小者。(2)当控制从一个过程的活动返回时,对局部名称的值如何处理?

capture3333的博客 4720

PCL点云库入门(第6讲)——PCL库中Eigen数学工具库的基本使用(持续更新)

Eigen库是一个高性能的C++模板库,专注于线性代数、矩阵和向量运算,以及相关的数值分析和算法。在Eigen库中,所有的矩阵和向量均被视为矩阵模板类的实例。向量可以被看作是特殊形式的矩阵,具体表现为只包含1行或1列。

qq_36812406的博客 1752

人工智能训练师三级补贴3120元申领全攻略|条件+流程+五省市对比

补贴是真的,但不是"白给"的。你需要满足社保、户籍、时间等条件,严格按照流程操作。记住四件事先确认自己是否满足条件,再报名——别考完了才发现领不到紧缺工种补贴更高——确认你所在城市是否在紧缺目录中证书下发后12个月内申请——设个日历提醒材料准备齐全再提交——避免来回折腾如果你正在考虑考人工智能训练师三级证书,想要从报名到备考到拿证到申领补贴的完整一站式指南,欢迎查看我的付费专栏:📖《人工智能训练师三级·从零到拿证完全指南》80篇系统化内容,覆盖报名、备考、冲刺、拿证全流程。

白话机器学习 1518

编译原理 陈火旺第三版 课后习题答案

编译原理 陈火旺第三版 课后习题答案 去发现同类优质开源项目:https://gitcode.com/ 本文档包含经典的《编译原理》教材,陈火旺第三版的课后习题答案,为学习编译原理的同学们提供了极大的便利。通过这份答案,学生可以更好地理解教材内容,巩固所学知识。 去发现同类优质开源项目:https://gitcode.com/ ...

gitblog_06741的博客 587

宇树G1开发实践--PPT汇报(基础版)

本文介绍了一套基于宇树G1人形机器人的PPT自动演示系统,可实现"一键启动、自动演讲"功能。系统通过多线程同步技术,将音频播放与机器人动作完美结合,支持12种预设社交互动动作。硬件依赖宇树G1机器人、外接音响和网络连接,软件采用Python SDK和ALSA音频工具。核心功能包括音频文件自动排序、外接音响播放控制、机器人动作执行及音画同步。使用时需配置网络接口和音频设备号,运行后自动按顺序播放音频并执行随机动作。系统特别强调了安全注意事项,并提供了常见问题解决方案,适用于展会、汇报等需要

m0_47999117的博客 509

编译原理第三版陈火旺第二章答案

编译原理第三版陈火旺第二章答案与解析

capture3333的博客 1万+

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

程序设计语言编译原理课后习题答案陈火旺第三版资源介绍

程序设计语言编译原理课后习题答案陈火旺第三版资源介绍 去发现同类优质开源项目:https://gitcode.com/ 在现代编程领域,编译原理是不可或缺的核心知识之一。本文将为您详细介绍一款极具价值的开源项目——《程序设计语言编译原理课后习题答案(陈火旺 第三版)》。以下是该项目的核心功能、技术分析、应用场景及特点。 项目介绍 《程序设计语言编译原理课后习题答案(陈火旺 第三版)》是一款专门为学...

gitblog_06715的博客 390

android 蓝牙通讯demo

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

编译原理陈火旺版第四章课后习题解析与LL(1)文法实践

实际体验中发现,平台能自动完成90%的机械计算工作,让学习者更专注于文法设计本身的理解。特别是处理复杂文法时,一键生成分析表的功能大幅提升了验证效率。:每个表项最多只能有一个产生式,否则需要重新改写文法。- 可视化查看符号栈与输入串的匹配过程。- 实时修改文法规则观察分析表变化。,这是构造预测分析表的前提条件。时需检查所有包含B的上下文环境。:通过引入新的非终结符将形如。需要扫描所有产生式右部,如。,故在对应表项填入该产生式。非终结符处理分号连接的情况。使每个产生式首符号截然不同。,在相应列填入ε产生式。

LapisLion88的博客 709

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

上一篇: 编译原理陈火旺版第三章课后题答案
下一篇: 编译原理陈火旺版第五章课后题答案
钻仰弥坚
博客等级 码龄8年 3万+粉丝 68原创
评论 26
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

钻仰弥坚

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值