《C语言参悟之旅》-读书笔记(七)

C语言参悟之旅 本书作者将丰富的开发经验凝聚在方寸之间,以轻松易懂、深入潜出的笔调将C语言的世界描绘得有声有色。 立即下载

                                                                                 第八章 预处理

cpp源文件——(预编译)》预处理文件——(编译)》目标文件——(连接)》可执行文件

预处理:源文件在进行编译时第一遍扫描之前做的工作(词法分析和语法分析)

程序员与预处理器进行交互的工具是一种被称作预处理器指示的命令(一些以“#”号开头的单行命令)

编译的源文件test.cpp

#include <stdio.h>
#define  PI  3.1415926
int main( )
{
	int r = 3;
	float girth, area;
	girth = 2*PI*r;
	area = PI*r*r;
	printf("周长为:%f 面积为: %f\n",girth, area );
}

与预编译文件test.i文件

#line 713 "c:\\program files\\microsoft visual studio 10.0\\vc\\include\\stdio.h"

__declspec(deprecated("The POSIX name for this item is deprecated. Instead, use the ISO C++ conformant name: " "_tempnam" ". See online help for details.")) __declspec(dllimport) char * __cdecl tempnam(   const char * _Directory,    const char * _FilePrefix);



#line 719 "c:\\program files\\microsoft visual studio 10.0\\vc\\include\\stdio.h"

 __declspec(deprecated("The POSIX name for this item is deprecated. Instead, use the ISO C++ conformant name: " "_fcloseall" ". See online help for details.")) __declspec(dllimport) int __cdecl fcloseall(void);
 __declspec(deprecated("The POSIX name for this item is deprecated. Instead, use the ISO C++ conformant name: " "_fdopen" ". See online help for details.")) __declspec(dllimport) FILE * __cdecl fdopen(  int _FileHandle,    const char * _Format);
 __declspec(deprecated("The POSIX name for this item is deprecated. Instead, use the ISO C++ conformant name: " "_fgetchar" ". See online help for details.")) __declspec(dllimport) int __cdecl fgetchar(void);
 __declspec(deprecated("The POSIX name for this item is deprecated. Instead, use the ISO C++ conformant name: " "_fileno" ". See online help for details.")) __declspec(dllimport) int __cdecl fileno(  FILE * _File);
 __declspec(deprecated("The POSIX name for this item is deprecated. Instead, use the ISO C++ conformant name: " "_flushall" ". See online help for details.")) __declspec(dllimport) int __cdecl flushall(void);
 __declspec(deprecated("The POSIX name for this item is deprecated. Instead, use the ISO C++ conformant name: " "_fputchar" ". See online help for details.")) __declspec(dllimport) int __cdecl fputchar(  int _Ch);
 __declspec(deprecated("The POSIX name for this item is deprecated. Instead, use the ISO C++ conformant name: " "_getw" ". See online help for details.")) __declspec(dllimport) int __cdecl getw(   FILE * _File);
 __declspec(deprecated("The POSIX name for this item is deprecated. Instead, use the ISO C++ conformant name: " "_putw" ". See online help for details.")) __declspec(dllimport) int __cdecl putw(  int _Ch,    FILE * _File);
 __declspec(deprecated("The POSIX name for this item is deprecated. Instead, use the ISO C++ conformant name: " "_rmtmp" ". See online help for details.")) __declspec(dllimport) int __cdecl rmtmp(void);

#line 731 "c:\\program files\\microsoft visual studio 10.0\\vc\\include\\stdio.h"


}
#line 735 "c:\\program files\\microsoft visual studio 10.0\\vc\\include\\stdio.h"

#pragma pack(pop)

#line 739 "c:\\program files\\microsoft visual studio 10.0\\vc\\include\\stdio.h"

#line 3 "c:\\users\\hzp\\documents\\visual studio 2010\\projects\\test03\\test03\\test03.cpp"

int main( )
{
	int r;
	float girth, area;
	girth = 2*3.1415926*r;
	area = 3.1415926*x*x;
	printf("周长为:%d 面积为: %f\n",girth, area );
}

对比两个文件的差别,得出预编译所做的工作:

1)引入:删除#include指示,并将stdio.h的内容加入到程序中来对其进行响应,

2)替换:删除恶劣#define指示,并将该文件所有PI替换为指定值

3)把注释替换成一个空格字符

4)删除一些不必要的空格

Ps:这个.i文件有助于调试错误程序

一、宏定义:

 I.无参宏定义

#define  PI  3.1415926  //指定PI的值为3.1415926
#define  ARRAY_LEN 80  //指定数组长度为80
#define  CR  '\r'      //指定CR表示换行符

作用:无参宏定义经常被用于给数值、字符、和字符串命名

优点:

           A.简化输入

           B.可读性

           C.一改全改

 II.带参宏定义

#include <stdio.h>
#define  MAX(x,y)   (((x)>(y)? (x):(y)))
int main( )
{
	int i = 0;
	int j = 1;
	printf("the larger of two:%d", MAX(i,j));
}

作用:带参宏定义经常被用作模板:如上例中  (((x)>(y)? (x):(y)))如果要经常使用(或是某些语句)
若使用宏替换可以设法得到更多的结果

#include <stdio.h>
#define  MAX_MIN(x,y,max,min)   max =(((x)>(y)? (x):(y))); min = (((x)<(y)? (x):(y)));
int main( )
{
	int i = 0;
	int j = 1;
	int max  = 0;
	int min  = 0;
	
	MAX_MIN(i, j, max,min);
	printf("两个数中的最大数是:%d\n",max);
	printf("两个数中的最小数是:%d\n",min);
}

 

说明

 1)  函数调用是在程序运行时处理的,必须为形参分配临时空间,而宏的展开则是编译前进行(不分配存储单元,也不进行值传递);

 2)宏名没有类型,其参数也没有类型,而函数的参数和返回值都是有特定类型的;

 3)无法用一个指针来指向一个宏,但可以使用一个指针指向一个函数;

III.使用宏时注意事项

1)宏定义中的各种符号都被视为替换文本,可能会引起一些错误(编译器会直接找出错误的地方,而不会找到错误的根源——宏定义本身)

#define  LENGTH  = 100;//加入了分号
int a[LENGTH];
预编译后:

int a[= 100;];

2)#define的有效范围是从其定义命令开始到此源文件结束。但可以使用#undef指示宏定义的作用域

#undef  PI //取消前面定义的圆周率的宏但如果前面没有定义,那么此句不起任何作用

3)宏可以嵌套定义

#define R     1.5
#define PI    3.1415926
#define L     2*PI*R

4)宏名作为整体被替换

#define   LENGTH   10
int  ARRAY_LENGTH   //只会替换LENGTH;而不会替换ARRAY_LENGTH

5) 必要的括号

#define  MUL(x, y)    x*y
result = MUL(5+3,6);
//被替换成5+3*6
//正确的写法加括号
#define  MUL(x, y)    ((x)*(y))//因为圆括号的运算级别最高,这样替换可以按照编程者的思路进行,而不会因为其他运算符的优先级而出现非预期的结果                                      //且参数的每一出现都要加括号,而不是只给替换文本加括号
     
#define PER(x)     (x/100)
 j = PER(i+1 );
//预编译后:
 j = i+1/100;

6)太长的情况下使用“\”:

          #define  PF(one, two,three,four,five)         printf("%d,%d,%d,%d,%d,%d"\n),  \

          one ,two,three, four,five)

7)  宏不允许重复定义

 

IV.控制版本的宏

#include <stdio.h>
int main( )
{
   printf("编译日期为: %d\n", __LINE__);
   printf("编译日期为: %s\n", __FILE__);
   printf("编译日期为: %s\n", __DATE__);
   printf("编译日期为: %s\n", __TIME__);
}

二.条件编译

1.第一种形式

#ifdef  标识符  
   程序片段1
#else
    程序片段2
#endif

说明  如果 标识符已经被#define指示定义过,则对程序片段1进行编译,否则对程序片段2进行编译

2.第二种形式

#ifndef  标识符
  程序片段1
#else
   程序片段2
#endif

说明:如果标识符未被define命令定义过,则对程序片段1进行编译,否则对程序片段2进行编译

3.第三种形式

#if 常量表达式1
    程序片段1
#elif 常量表达式2
    程序片段2
#else
     程序片段3
#endif

 说明:如果常量表达式的值为真,则编译程序片段1.......

4.条件编译的作用:

  1)编写在多台机器或多种操作系统之间可移植的程序

#if   defined(Windows)
  .......
#elif  defined (DOS)
   .....
#else  defined(UNIX)
    .....
#endif

  2)编写在不同的编译器上进行编译的程序

#if __STDC__
  标准C函数原型
#else
  其他C函数声明
#endif

  3)防止重复包含

三.文件包含
文件包含指一个源文件可以包含另一个源文件的全部或部分内容

#include<文件名>


使用尖括号时,预处理器到存放库函数头文件所在的目录中寻找要包含的文件

#indclude"文件名"


使用双括号时,系统先在用户当前的目录中寻找要包含的文件,如果找不到,则再到存放库函数所在的文件中查找

注意事项:

1)一个include只能包含一个文件

#include<file1.h>       <file2.h>//一个include只能包含一个文件

2)嵌套包含时使用条件编译来防止重复包含:

#ifndef     FIRSTINCLUDE_H
#define     FIRSTINCLUDE_H
.....
#endif

计算器的实例

limit.h:提供一些对于运算对象的限制和转换

#ifndef  LIMT_H
#define  LIMT_H
#define  TO_LONG(x)   (long)x               //将参数转换为long型
#define  IS_PLUS(x)   (x >= 0 ? 1:0)        //判断参数是否为正数
#define  CHECK_ZERO(divisor)  (divisor) == 0?1:0 //判断除数是否为0的宏

#endif

count.h:提供各种形式运算的宏定义以及运算函数原型

#ifndef  COUNT_H
#define  COUNT_H
#include <math.h>

#define   SUM(x,y)  ((x)+(y))    //计算加法的宏
#define   SUB(x,y)  ((x)-(y))
#define   MUL(x,y)  ((x)*(y))
#define   DIV(x,y)  ((x)/(y))
#define   MOD(x,y)  ((x)%(y))
#define   SQUARE(x)  ((x)*(x))
#define   CUBE(x)  ((x)*(x)*(x))
#define   SQRT(x)  sqrt(x)

void count(char);

#endif 
myio.h:提供各种形式的输入和输出操作
#ifndef  MYIO_H 
#define  MYIO_H 
#ifdef  _cplusplus
#include <iostream>
#else
#include <stdio.h>
#endif

#define  CLUE_OPE   printf("请输入一个运算符: +表示加法,-表示减法,*表示乘法,/表示除法,\n                  %%表示求余,2表示乘方,3表示立方,s表示开方\n")//输出提示信息的宏
#define  CLUE_ONE   printf("请输入一个运算对象:\n")  //提示输入两个运算对象的宏
#define  CLUE_TWO   printf("请输入两个个运算对象:\n")  //提示输入一个运算对象的宏
#define  CLUE_ZERO  printf("你输入的被除数为0,请重新输入:\n")//提示被除数不能为0的宏
#define  CLUE_PLUS  printf("开平方的书必须是正数,请重新输入:\n") //提示被开方的数必须为正数
#define  IN_OP(x)      x = getchar()               //输入运算符的宏
#define  IN_O(X)      scanf("%lf",&x)     //输入一个数据的宏
#define  IN_T(x,y)    scanf("%lf%lf", &x,&y) //输入两个数据的宏
#define  OUT_D(x)   printf("计算结果为:%f\n",x)  //输出double类型的宏
#define  OUT_L(x)   printf("计算结果为:%lf\n",x)  //输出double类型的宏
#endif

demo.c:演示各种运算

#include "count.h"
#include "limt.h"
#include "myio.h"
int main()
{
	char c;
	
	while(1)
	{
		CLUE_OPE;
	        count(IN_OP(c));
		fflush(stdin);
	}
	return 0;
}

void count(char c)
{
	double  x ,y;
	switch(c)
  {

	
	
	case '+':
		CLUE_TWO;
		IN_T(x,y);
		OUT_D(SUM(x,y));
		break;
	case '-':
		CLUE_TWO;
		IN_T(x,y);
		OUT_D(SUB(x,y));
		break;
	case'*':
		CLUE_TWO;
		IN_T(x,y);
		OUT_D(MUL(x,y));
		break;
	case'/':
		CLUE_TWO;
		IN_T(x,y);
		while(CHECK_ZERO(y))
		{  
			CLUE_ZERO;
			IN_T(x,y);
		}
		OUT_D(DIV(x,y));
		break;
	case'%':
		CLUE_TWO;
		IN_T(x,y);
		while(CHECK_ZERO(y))
		{  
			CLUE_ZERO;
			IN_T(x,y);
		}
		OUT_L(MOD(TO_LONG(x),TO_LONG(y)));
		break;
	case'2':
		CLUE_ONE;
		IN_O(x);
		OUT_D(SQUARE(x));
		break;
	case'3':
		CLUE_ONE;
		IN_O(x);
		OUT_D(CUBE(x));
		break;
	case's':
		CLUE_ONE;
		IN_O(x);
		while(!IS_PLUS(x))
		{
			CLUE_PLUS;
			IN_O(x);
		}
		OUT_D(SQRT(x));
		break;
	}
	
}


 

 

 

C语言参悟之旅pdf C语言参悟之旅 立即下载

相关推荐

《c语言参悟之旅》简介

左飞老师的《c语言参悟之旅》推荐。本文件只包含一章,如需阅读,请购买正版图书

《C语言参悟之旅》-读书笔记(六)

第7章指针 C语言编写的程序至今仍能和汇编语言程序相媲美,其中一个重要原因就是拥有一种数据类型——指针(内存操作) 1.指针和地址      数据的访问方式——直接访问和间接访问 间接访问方式     通过变量来访问( 计算机用一个别称(变量)来标识存储单元,计算机在寻找内存的数据时就要先把这个别称翻译成地址才行  ) 直接访问方式    通过地址来访问

瞎几波写 981

C语言参悟之旅.pdf

C语言参悟之旅.pdf C语言学习相关资料,收藏一下

《C语言参悟之旅》新鲜试读(完结篇)

lizhaoheng1982的专栏 4909

【excel+vba】一表拆多表+不同收件人附带不同附件

快捷处理:拆分多个不同表 给不同人发送不同内容且附带附件

weixin_42779327的博客 2968

VTK vtkLookupTable vtkScalarBarActor 颜色条

有时需要给数据做一个 vtkScalarBarActor, 我们把显示的数据的一个 坐标系 来显示 颜色条1.以 Z 显示颜色 效果如下。

q610098308的专栏 4041

c语言参悟之旅,《C语言参悟之旅》-读书笔记(一)

第一章 程序设计与C语言1.什么是计算机程序?计算机程序是指能使计算机做出信息处理行为并产生一定结果的指令集和(就像做菜的菜谱)2.高级语言的执行方式?( 1 )采用编译方式编译----->编译----->链接----->生产可执行文件(2)解释方式利用针对某种高级语言的解释软件,解释所遇到的高级语言中的每个操作并完成这些操作所要执行的动作高级程序员程序----------...

weixin_42521276的博客 355

iOS Certificates, Identifiers & Profiles简介

1. Certificates Certificates是生成开发和生产所需的证书。 2.1 certSigningRequest文件 生成证书前,需要先生成certSigningRequest文件,certSigningRequest文件由【钥匙串访问】生成。 选择菜单【钥匙串访问】,【证书助理】下的【从证书颁发机构请求证书…】 填写【用户电子邮件地址: 】,将【请求是:】的选项改为【储存到磁盘】 输入certSigningRequest文件的文件名,并指定保存位置。 保存certSignin

假装你是大灰狼的专栏 7060

《C语言参悟之旅》 -读书笔记(一)

最近在看《C语言参考之旅》,感觉这本书不错,作者有用心去写,也写出了一些实际开发过程中雪要注意的细节,和高校教师所编的书还是有一定区别,初看好像很简单,但仔细看还是有一定的深度,适合掌握了一些基本语法的 C语言学习者学习,本文记下了阅读过程中自己认为比较重要而在学校教材里没有讲透彻的地方摘录下来

瞎几波写 1104

【Autosar COM】Marvell 88Q5050 以太网交换机驱动技术解析

本驱动实现了对Marvell 88Q5050交换机的全面控制,通过模块化设计满足AUTOSAR规范要求。增加DMA加速机制提升大数据量处理性能实现TSN(时间敏感网络)特性支持引入异步通知机制替代轮询操作增强安全特性,如MACsec支持该驱动架构为车载以太网交换机控制提供了可靠基础,其设计思想可推广到其他车载网络控制器开发中。随着车载网络技术的演进,驱动需持续迭代以支持新特性与更高通信速率需求。

1451

搭建自己的MQTT服务器,实现设备上云(Ubuntu+EMQX)

这篇文章教大家在ECS云服务器上部署EMQX,搭建自己私有的MQTT服务器,配置EMQX实现设备上云,设备数据转发,存储;服务器我采用的华为云的ECS服务器,系统选择Ubuntu系统。

2万+

《C语言参悟之旅》简介

lizhaoheng1982的专栏 1628

高级数据库--作业及答案

中科大金培权老师的高级数据库课程作业及答案

一杯水果茶!足矣~ 1658

《C语言参悟之旅》-读书笔记(八)

第九章   结构体和共用体 一、结构体 由一系列具有相同类型或不同类型的的数据构成的数据集合(但不能包含函数类型) 1.定义   1)第一种形式 struct 结构体类型名 { 数据类型名1 成员名1; ......... 数据类型名2 成员名2; }; struct 结构体类型名 变量名列表;   2)第二种形式 struct 结构体类型名 {

linuxlinuxlinuxlinux的专栏 1591

核心面试聚焦:业务问题+系统问题+设计题---字节、阿里、美团等整理统计

业务系统及其他相关面试问题整理:线上相关问题排查+高并发系统的限流+高并发秒杀系统设计+负载均衡+一个网站有 20 亿 url 存在一个黑名单中,这个黑名单要怎么存?若此时随便输入一个 url,你如何快速判断该 url 是否在这个黑名单中?并且需在给定内存空间(比如:500M)内快速判断出?

曾经“等你生日那天”都遥远得像未来,如今却可欢愉的挥手说“下个十年见” 172万+

24、企业治理、风险与合规:精益思维的应用与实践

本文探讨了如何运用精益思维优化企业治理、风险与合规(GRC)流程,分析了职责分离与合规流程的误区,提出了预防性与检测性控制措施的合理搭配,并通过价值流映射、减少合规反馈循环等方法实现流程优化。以Etsy的PCI-DSS实施为例,展示了如何在满足法规要求的同时保持创新活力。文章还强调了构建协作型GRC文化的重要性,并展望了未来GRC的发展趋势,包括数字化转型、全球化风险管理及与可持续发展的结合。

solidity8miner的博客 104

《C语言参悟之旅》-读书笔记(四)

第五章 函数 Ps:     函数的语法本身并不复杂,真正需要编程者去理解和体会的往往是如何用函数来拆解问题,使用函数的水平直接反映在编程者能够组织多大规模的程序 1.C语言中的main( )函数           main( )函数可以调用任何C语言函数;           但任何C语言函数都不能调用main( )函数,main( )函数通常在其所属的程序执行时被操作系统调用。 2

linuxlinuxlinuxlinux的专栏 816

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

《C语言参悟之旅》-读书笔记(九)

第十章  文件 文件就是一组相关元素或数据的有序集合,每个集合都有一个符号化的指代(文件名) 文件通常都被存在外部存储器上,它只在需要使用时被调入内存 一.相关概念: 1.主要分类   1).  普通文件:驻留在磁盘或其他外部介质上的一些有序数据集,   2).设备文件(逻辑上的文件): 和主机相连的各种外部设备:如显示器、打印机、键盘 2.流的概念  流就是表示文本输入(或输出)

linuxlinuxlinuxlinux的专栏 2226

Statistics and Machine Learning Toolbox

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

OV9734 DATASHEET,完整规格书

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

《C语言参悟之旅》-读书笔记(三)

第四章   流程控制 1.流程图(当初学的时候觉得很麻烦,现在觉得对整理编程思路帮助还是很大) 2.顺序结构   3.分支结构  1)形式 (  else 总是与其前面最近的 if 配对 )        A . if(表达式)               语句;        B. if(表达式)             语句1;           else

linuxlinuxlinuxlinux的专栏 748

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

《C语言参悟之旅》-读书笔记(二)

第三章  运算符、表达式和语句 1.在表达式中使用(   )是一种很好的编程方式能大大提高程序的可读性如:            标准C中对很多运算符的求值顺序都没有进行明确规定,实现顺序与具体实现有关( 编译环境)                                                                        -a +b / 2 - c * 5

linuxlinuxlinuxlinux的专栏 895

《C语言参悟之旅》-读书笔记(一)

第一章    程序设计与C语言            1.什么是计算机程序?               计算机程序是指能使计算机做出信息处理行为并产生一定结果的指令集和(就像做菜的菜谱)         2.高级语言的执行方式?              ( 1 )采用编译方式                                  编译----->编译----->链接--

Ac Dream 864
上一篇: 《C语言参悟之旅》-读书笔记(六)
下一篇: 《C语言参悟之旅》-读书笔记(八)
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值