图论学习---序列是否可图?

离散数学复习笔记——图的基本概念 离散数学复习-图论 复习复习冲冲冲! 文章目录离散数学复习-图论图的基本概念顶点的度握手定理*可简单图画图的同构Peterson图完全图 正则图r部图子图通路与回路周长和围长扩大路径法无向图的连通性两个定理无向图的连通性块 图的基本概念 n阶图:有n个顶点 零图:有顶点没边 空图:没顶点没边(啥也没有) 平凡图:1阶零图N1N_1N1​ 相邻(邻接):点与点,边与边 关联:点与边(关联次数) 环:只与一个顶点关联的边 孤立点:没有边与之关联 平行边:一样的边有多条,多重图,简单图 邻域:与某个点相连的点的集 阅读详情

(Havel-Hakimi 定理)

由非负整数组成的非增序列s:d1, d2, …, dn(n ≥ 2, d1 ≥ 1)是可图的,当且仅当序列
                  s1: d2 – 1, d3 – 1, …, dd1+1 – 1, dd1+2, …, dn
是可图的。序列s1 中有n-1 个非负整数,s 序列中d1 后的前d1 个度数(即d2~dd1+1)减1 后构成
s1 中的前d1 个数。


不可图的情况:

(1)某次对剩下序列排序后,最大的度数(设为d1)超过了剩下的顶点数;

(2) 对最大度数后面的d1 个度数各减1 后,出现了负数。


例如:

(1)序列s:7, 7, 4, 3, 3, 3, 2,最大的度数为7,而除去最大度数7之后,序列s1:7,4,3,3,3,2只有6个元素,小于7,不可图。

(2)序列s:7,7,4,3,3,3,2,1,最大度数为7,序列s可图当且仅当s1:6,3,2,2,2,1,0可图,s1可图仅当s2:2,1,1,1,0,-1可图,显然s2中有负数,s2不可图,所以s不可图。


应用:

青蛙的邻居(Frogs' Neighborhood)
题目描述:
未名湖附近共有n 个大小湖泊L1, L2, ..., Ln(其中包括未名湖),每个湖泊Li 里住着一只青蛙
Fi(1≤i≤n)。如果湖泊Li 和Lj 之间有水路相连,则青蛙Fi 和Fj 互称为邻居。现在已知每只青蛙的
邻居数目x1, x2, ..., xn,请你给出每两个湖泊之间的相连关系。
输入描述:
第一行是测试数据的组数t(0 ≤ t ≤ 20)。每组数据包括两行,第一行是整数n(2 ≤ n ≤ 10),
第二行是n 个整数,x1, x2,..., xn(0 ≤ xi < n)。
输出描述:
对输入的每组测试数据,如果不存在可能的相连关系,输出"NO"。否则输出"YES",并用n×n
的矩阵表示湖泊间的相邻关系,即如果湖泊i 与湖泊j 之间有水路相连,则第i 行的第j 个数字为
1,否则为0。每两个数字之间输出一个空格。如果存在多种可能,只需给出一种符合条件的情形。
相邻两组测试数据之间输出一个空行。
样例输入:
2
7
4 3 1 5 4 2 1
6
4 3 1 4 2 0


样例输出:

YES
0 1 1 1 1 0 0
1 0 0 1 1 0 0
1 0 0 0 0 0 0
1 1 0 0 1 1 1
1 1 0 1 0 1 0
0 0 0 1 1 0 0
0 0 0 1 0 0 0
NO



很明显这个题目给的序列是湖泊的度数,应用HAVEL-HAKIMI定理即可。



c++代码:



#include<iostream>
#include<string>
#include<sstream>
#define N 15
using namespace std;
//此结构包括每个湖泊的编号和度数
struct Node
{
	unsigned int index;
	int degree;
} nodes[N];
int Edge[N][N];//邻接矩阵
int Cmp(const void* a,const void* b)
{
	return ((Node*)b)->degree -((Node*)a)->degree;
}

int main()
{
	int nTest,nLake;//,测试数目,湖泊数目
	bool flag;
	cin>>nTest;
	string line;
	

	while(nTest--){
		cin>>nLake;
		getline(cin,line);//跳到下一行

		getline(cin,line);
		istringstream ss(line);
		//初始化
		for(int i=0;i<nLake;i++){
			ss>>nodes[i].degree;
			nodes[i].index=i;
		}
		memset(Edge,0,sizeof(Edge));
		flag=true;

		for(int i=0;i<nLake&&flag;i++){
			//对nodes 数组后n-i个元素按非递增顺序排序
			qsort(nodes+i,nLake-i,sizeof(Node),Cmp);

			int maxDegree=nodes[i].degree;
			unsigned int index=nodes[i].index;

			//某次对剩下序列排序后,最大的度数(设为d1)超过了剩下的顶点数;
			if(maxDegree>nLake-i-1){
				flag=false;
				break;
			}

			for(int k=1;k<=maxDegree&&flag;++k){
				int j=i+k;
				if(nodes[j].degree<0){
					flag=false;
					break;
				}
				nodes[j].degree--;
				Edge[index][nodes[j].index]=Edge[nodes[j].index][index]=1;
			}
		}

		if(flag){
			cout<<"YES"<<endl;
			for(int i=0;i<nLake;++i){
				for(int j=0;j<nLake;++j){
					cout<<Edge[i][j]<<" ";
				}
				cout<<endl;
			}
		}else{
			cout<<"NO"<<endl;
		}
	}

	char c=getchar();
}





(图论)使用Havel-Hakimi定理判断给出的序列是否可图 先行概念: 度序列(degree sequence):若把图 G所有顶点的度数排成一个序列 s,则称 s为图 G的度序 列。例如,图 1.1(a)所示无向图 G1的度序列为 s: 2, 5, 4, 3, 3, 1;或 s': 1, 2, 3, 3, 4, 5;或 s'': 5, 4, 3, 3, 2, 1。 其中序列 s 是按顶点序号排序的,序列 s'是按度数非减顺序排列的,序列 s''是按 阅读详情

相关推荐

图论学习-序列是否可图化(2)

上次学习了havel-hakimi定理判断一个度数序列是否可图,http://blog.youkuaiyun.com/wangyanphp/article/details/8834608 (Havel-Hakimi 定理) 由非负整数组成的非增序列s:d1, d2, …, dn(n ≥ 2, d1 ≥ 1)是可图的,当且仅当序列                   s1: d2 – 1,

wangyanphp的专栏 2236

Havel-Hakimi定理(判断是否可图序列)

给定一个非负整数序列{dn},若存在一个无向图使得图中各点的度与此序列一一对应,则称此序列可图化。进一步,若图为简单图,则称此序列可简单图化 至于能不能根据这个序列构造一个图,就需要根据Havel-Hakimi定理中的方法来构图。 可图化的判定:d1+d2+……dn=0(mod 2)。关于具体图的构造,我们可以简单地把奇数度的点配对,剩下的全部搞成自环。 可简单图化的判定(Hav

苏苏爱自由 5896

离散数学——通俗易懂的描述:可图化,可简单图画

看不懂的话就接看例子理解,然后下一张图片有我总结的步骤,按照步骤会判断就行。看不懂的话就接看例子理解,然后下一张图片有我总结的步骤,按照步骤会判断就行。2.埃尔德什定理(用c语言进行测试,总是判断不对,我就用的python)(2)使用Havel定理,即判断是否可简单图化。(2)判断度数之和是否为偶数,即判断是否可图化。(3)使用埃尔德什定理,即判断是否可简单图化。其实简单一句话就是:所有度数总和为偶数,就是可图化的,反之也成立。步骤:(1)先判断度数之和是否为偶数,即判断是否可图化。(1)Havel定理。

m0_74028782的博客 1万+

Havel-Hakimi定理

Havel定理描述 给定一个非负整数序列{d1,d2,...dn},若存在一个无向图使得图中各点的度与此序列一一对应,则称此序列可图化。进一步,若图为简单图,则称此序列可简单图化。 可图化的判定比较简单:d1+d2+...dn=0(mod2)。关于具体图的构造,我们可以简单地把奇数度的点配对,剩下的全部搞成自环。 可简单图化的判定,有一个Havel定理,是说: 我们把序列排成

D_Double's Journey 1万+

离散数学考点之度序列简单图化

离散数学考点序列的简单图化如题2021年4月分析基础知识什么是度序列?什么是度序列可简单图化?扩展知识什么是 Havel-Hakimi定理 ?验证答案B 积累下知识点。 如题2021年4月 分析 之前从没遇到过的知识点。 基础知识 什么是度序列? 若把图G所有顶点的度数排成一个序列,则称该序列为图G的一个序列 什么是度序列可简单图化? 给定一个非负整数序列{d1,d2,…dn},若存在一个无向图使得图中各点的度与此序列一一对应,则称此序列可图化。进一步,若图为简单图,则称此序列可简单图化。 简单说,就是给

guangod的博客 1万+

Havel-Hakimi定理,可图性判定(是否可以连成图)

Havel定理描述 给定一个非负整数序列{d1,d2,...dn},若存在一个无向图使得图中各点的度与此序列一一对应,则称此序列可图化。进一步,若图为简单图,则称此序列可简单图化。 这个定理写起来麻烦,实际上就是说,我们把d 大到小排序以后,找出度最大的点(设度为d1),把它和度次大的d1个点之间连边,然后这个点就可以不管了,一直继续这个过程,直到建出完整的图,或出现负度等明显不合理的情况。...

此博客已废弃 1197

图论学习(一)

一个图G定义为一个有序对(V,E),记为G=(V,E),其中V是一个非空集合,称为顶点集或点集,其元素称为顶点或点。E是由V中的点组成的无序点对构成的集合,称为边集,其元素称为边,且同一点对在E中可出现多次。图G的顶点集记为V(G),边集记为E(G)。图G的顶点数(阶数)和边数可分别用符号n(G)和m(G)表示。设V=v1, v2, v3, v4},E ={v1v2 , v1v2, v2v3 },则G=(V,E)是一个4阶图。若边e=uv,此时称u和v是e的端点;

Caramel_biscuit的博客 2271

Havel-Hakimi定理(判断一个序列是否可图)->POJ1659

Havel-Hakimi定理(判断一个序列是否可图)->POJ1659给定一个非负整数序列{dn},若存在一个无向图使得图中各点的度与此序列一一对应,则称此序列可图化。进一步,若图为简单图,则称此序列可简单图化 至于能不能根据这个序列构造一个图,就需要根据Havel-Hakimi定理中的方法来构图。可图化的判定: d1+d2+……dn=0(mod 2)。关于具体图的构造,我们可以简单地把奇数度

忘川蒿里 1692

由一个非负整数组成的非递增序列来证明它是不是一个度序列,是否可图

大家好久不见!开学之初就事多,现在才有空更博文。 这次要讨论的是图论,在上课期间我遇到了一个挺有趣的问题,就是给你一个序列看它是否可图。 我们先看一看它的几何背景: 若对一个非负整数组(d1,d2,...,dn),∑ni=1di=2m,存在一个简单图G,以它为度序列,则称为这个数组是可图的。 至于怎么证明一个序列是不是可图的,我们有以下定理(证明过程略) 定理:设有非负整数组(...

azft68818的博客 1127

DegreeSequence:判断一个序列是否可图

度数序列 判断一个序列是否可图

RAG在医药行业为什么80%都翻车了?

这篇文章不是要劝你别做RAG,而是把坑说清楚。医药行业有它的特殊性——监管压力、专业术语密度、多语言混排、文档结构复杂——这些因素叠加在一起,让标准RAG教程里的那套方法论几乎直接失效

qq_31808385的博客 635

Havel-Hakimi定理---通过度数列判断是否可图化

0、可图:一个非负整数组成的序列如果是某个无向图的度序列,则该序列是可图的。 1、度序列:Sequence Degree,若把图G所有顶点的度数排成一个序列,责成该序列为图G的一个序列。该序列可以是非递增序的、可以是非递减序列、可以是任意无序的。 2、Havel-Hakimi定理:给定一个非负整数序列{d1,d2,...dn},若存在一个无向图使得图中各点的度与此序列一一对应,则称此序列可图化...

weixin_33946020的博客 3792

STM32与HT7038的高精度电能计量系统设计与实现

本文详细介绍了基于STM32微控制器与HT7038三相电能计量芯片的高精度电能计量系统设计与实现。文章从项目选型出发,深入剖析了硬件电路设计、SPI驱动开发、芯片校准及系统集成等关键环节,为智能电表、能源监控等应用提供了高性价比且稳定的国产化解决方案。

pytorch8learner的博客 389

图论学习--1 图的基本概念(思维导图)同构 偶图 补图 度序列 子图及运算 邻接谱 最短路算法 图的连通性

图的基本概念 图与简单图 一些简单概念 平凡图 只有一个顶点,无边 空图 边集为空 顶点数(阶数) 重边,重数 环 简单图 没有重边也没有环 复合图 除了简单图,就是符合图 有限图 图的同构 可以理解为:将原来图的顶点标号抹除,重新标号,两图即为同构 相互同构的图的顶点集可以一一对应起来,且边的重数也能对的上 相互同构的图的形状可能看起来不同,但在空间中经过拉扯,最终还是一样的 同构的符号是≌ 几类图(简单图) 完全图 每两个不同顶点之间都一条边

或左的博客 5781

Matlab信号处理——基于BP神经网络的调制信号分类与识别

如果你想要进一步了解更多的相关知识,可以关注下面公众号联系~会不定期发布相关设计内容包括但不限于如下内容:信号处理、通信仿真、算法设计、matlab appdesigner,gui设计、simulink仿真......希望能帮到你!对信号进行采样和处理,得到了一系列特征参数,包括幅度均值、频率峰值、频率平方均值以及相位标准差、修正后的相位标准差。

小嘤熊的博客 1308

Axure RP 10表单数据提交制作

本文介绍了如何使用Axure RP 10实现表单数据提交。

Peppaaa的博客 990

序列可图化判定及顶点着色

1.度序列可图化问题   可图化的度序列其表示的图并不唯一,即画出来的图有可能不是同构体,主要原因是由度序列产生生成矩阵的时候方法并不唯一。   例子:度序列 [3 4 2 3 4 2] 图1 图2   注意度数为3 的两个顶点在图1中并不连接,在图2中却相连,说明图1图2不是同构。   对于可图化序列的简单图绘制需要用到生成矩阵,表示了随着顶点数增...

dizhou8928的博客 1368

《四》:LBE,VR 大空间系列——Pico的空间扫描方式

(这里有个选项叫高精度扫描模式,这个功能在下方详细补充)系统会根据绘制的顶点,将区域分割成若干个4X4米的小方格,我们只需要根据提示,首先进入一个方格子空间内部,然后依次凝视每个区域上下左右前后六个面的小方格组,每一面4个,直至全部消失, 消失后地面会出现一个方形行走路径,我们沿着边缘正或反走一圈即可,完成后此块区域即自动消失。不过由于pico有一个高精度扫描圈,如图加粗的圆环,这个圆环的意思是在在内部的区域扫描精度较高,越远离原点的区域误差越大,所以为了更有效的利用,建议原点设置在场地中心区域。

unitygroup的博客 2884

poj 1659 Frogs' Neighborhood (贪心 + 判断度数序列是否可图)

Frogs' Neighborhood Time Limit: 5000MS   Memory Limit: 10000K Total Submissions: 6076   Accepted: 2636   Special Judge Description 未名湖附近共有N个大小湖泊L1, L2, ..., Ln(其中包括未名

Hadis_yuki 1414

射频仿真软件:ADS (Advanced Design System)_(29).ADS脚本编程与自动化

ADS脚本编程为射频设计提供了强大的自动化工具,可以帮助用户实现设计流程的优化、参数扫描和优化、结果分析和报告生成等任务。选择合适的脚本语言(Python、Tcl、AEL)并合理设置ADS环境,可以显著提高设计效率和准确性。通过实际项目中的应用案例,我们可以更好地理解如何利用脚本编程解决复杂的射频设计问题。希望本文对您的ADS脚本编程学习有所帮助。

kkchenjj的博客 2472

在Ubuntu系统中安装和使用wxPython进行Python图形用户界面(GUI)开发

在本文中,我将向您展示如何在Ubuntu系统上安装和使用wxPython,并提供一些示例代码来帮助您开始使用这个强大的工具。在MyFrame的构造函数中,我们创建了一个wx.Panel和一个按钮,并将按钮的点击事件绑定到一个自定义的方法on_button_click上。最后,我们创建了一个wx.App的实例,创建了一个MyFrame对象并显示它,最后通过调用app.MainLoop()启动应用程序的主事件循环。这只是一个简单的示例,但它演示了如何使用wxPython创建一个基本的GUI应用程序。

qq_37934722的博客 1040

图论-度序列可图性判断(Havel-Hakimi定理)

图论基础是人工智能机器学习关键,我建议大家找几个比较靠谱入门的机器学习或者人工智能学习平台,在此推荐一个我看过的小白人工智能入门教程,零基础教程,简单通俗易懂,点击这里可以直达:人工智能入门基础教程,一定要系统全面的去学习才能有效果,不要半途而废, 0、可图:一个非负整数组成的序列如果是某个无向图的度序列,则该序列是可图的。 1、度序列:Sequence Degree,若把图G所有顶点的度数...

浴血重生-学习空间 1万+

多 Agent 之间如何通信和协调?OpenClaw 的 Gateway 在其中扮演什么角色?

多 Agent 之间如何通信和协调?OpenClaw 的 Gateway 在其中扮演什么角色?

我哎GIS博客 1665

判断度数序列是否可图的两种方法

给定一个度数序列{d}\{d\}{d},判断是否可以根据这个度数序列构造出简单无向图。 Havel–Hakimi algorithm: 一个度数序列可以构成简单无向图,当且仅当将这个序列{d}\{d\}{d}降序排序之后,将d1d_1d1​后面的d1d_1d1​个数−1-1−1,并将d1d_1d1​从序列中除去,形成的新度数序列没有负数,且新的度数序列可以构成简单无向图。 于是我们发现,利用这个方...

ylsoi的博客 6485

怀旧版电脑GBC模拟器

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

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Havel–Hakimi algorithm(判断度数序列是否可图)

问题 J: Degree Sequence of Graph G 时间限制:1 Sec内存限制:128 MB 题目描述 Wang Haiyang is a strong and optimistic Chinese youngster. Although born and brought up in the northern inland city Harbin, he...

weixin_30782293的博客 264

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

poj 1659 Frogs' Neighborhood (Havel-Hakimi定理,判断序列是否可图)

其实质是给定一个度序列,判断是否可图, 若可图,输出YES,并输出各顶点之间的连边的情况 否则,输出NO 思路:判断一个序列是否可图,直接利用Havel-Hakimi定理即可

happy_lcj 1028

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

上一篇: Tarjan算法 转自[Beyond the Void]
下一篇: 图论学习-序列是否可图化(2)
wangyanphp
博客等级 码龄14年 90粉丝 51原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值