DES原理分析

PyCharm 中配置 Anaconda 环境时,如果你遇到找不到 `python.exe` 的问题,通常是由于环境路径设置不正确,或者 PyCharm 没有正确识别 Anaconda 的 Pyth 在 PyCharm 中配置 Anaconda 环境时,如果遇到找不到python.exe的问题,通常是因为环境路径配置错误或者虚拟环境未激活。通过上述方法,你可以检查和修复环境设置,确保 PyCharm 能够正确识别并使用 Anaconda 的 Python 解释器。希望本教程对你有所帮助! 阅读详情

1、DES的描述     

     为了建立适用于计算机系统的商用密码,美国商业部的国家标准局NBS于1973年5月和1974年8月两次发布通告,向社会征求密码算法。在征得的算法中,由IBM公司提出的算法lucifer中选。1975年3月,NBS向社会公布了此算法,以求得公众的评论。于1976年11月被美国政府采用,DES随后被美国国家标准局和美国国家标准协会(American National Standard Institute,ANSI) 承认。1977年1月以数据加密标准DES(Data Encryption Standard)的名称正式向社会公布。

     随着攻击技术的发展,DES本身又有发展,如衍生出可抗差分分析攻击的变形DES以及密钥长度为128比特的三重DES等。

    2000年1月19日,由电子边疆基金会组织研制的25万美元的DES解密机以22.5小时的战绩,成功地破解了DES加密算法。DES已逐渐完成了它的历史使命。

    DES是一个分组加密算法,它以64位为分组对数据加密。64位一组的明文从算法的一端输入,64位的密文从另一段输出。它是一个对称算法:加密和解密用的是同一个算法。

   密钥通常表示为64位的数,但每个第8位都用作奇偶校验,可以忽略,所以密钥长度为56位。密钥可以是任意的56位的数,且可在任意的时候改变。

   DES算法只不过是加密的两个基本技术——混乱和扩散的组合,即先代替后置换,它基于密钥作用于明文,这是一轮(round),DES在明文分组上实施16轮相同的组合技术。如下图所示:

  

      2、算法概要

      DES对64位明文分组进行操作。通过一个初始置换,将明文分组分成左半部分和右半部分,各32位长。然后进行16轮完全相同的运算,这些运算被称为函数 f,在运算过程中数据与密钥结合。经过16轮后,左、右半部分合在一起经过一个末置换(初始置换的逆置换),算法就完成了。

   在每一轮中,密钥位移位,然后再从密钥的56位中选出48位。通过一个扩展置换将数据的右半部分扩展成48位,并通过一个异或操作与48位密钥结合,通过 8个S盒将这48位替代成新的32位数据,再将其置换一次。这四步运算构成了函数f。然后,通过另一个异或运算,函数f的输出与左半部分结合,其结果即成 为新的左半部分。将该操作重复16次,便实现了DES的16轮运算。一轮DES如下图所示:

    假设Bi是第i次迭代的结果,Li和Ri是Bi的左半部分和右半部分,Ki是第i轮的48位密钥,且f是实现代替、置换及密钥异或等运算的函数,那么每一轮就是:

     Li=Ri-1

     Ri=Li-1⊕f(Ri-1,Ki)

        3、初始置换

        初始置换在第一轮运算之前进行,对输入分组实施如下表所示的变换。初始置换把明文的第58位换到第1位的位置,把第50位换到第2位的位置,把第42位换到第3位的位置,依此类推。

58, 50, 42, 34, 26, 18, 10, 2,  60, 52, 44, 36, 28, 20, 12, 4

62, 54, 46, 38, 30, 22, 14, 6,  64, 56, 48, 40, 32, 24, 16, 8

57, 49, 41, 33, 25, 17, 9,  1,  59, 51, 43, 35, 27, 19, 11, 3

61, 53, 45, 37, 29, 21, 13, 5,  63, 55, 47, 39, 31, 23, 15, 7

初始置换和对应的末置换并不影响DES的安全性,它们的主要目的是为了更容易地将明文和密文数据以字节大小放入DES芯片中。

4、密钥置换

由于不考虑每个字节的第8位,DES的密钥由64位减至56位,每个字节第8位作为奇偶校验以确保密钥不发生错误。如下表所示:

57, 49, 41, 33, 25, 17, 9, 1, 58, 50, 42, 34, 26, 18

10, 2, 59, 51, 43, 35, 27, 19, 11, 3, 60, 52, 44, 36

 

 

63, 55, 47, 39, 31, 23, 15, 7, 62, 54, 46, 38, 30, 22

14, 6, 61, 53, 45, 37, 29, 21, 13, 5, 28, 20, 12, 4

在DES的每一轮中,从56位密钥产生出不同的48位子密钥(subkey),这些子密钥是这样确定的:

首先,56位密钥被分成两部分,每部分28位。

然后,根据轮数,这两部分分别循环左移1位或2位。每轮移动的位数如下表:

轮      1  2  3  4  5  6  7  8  9  10  11  12  13  14  15  16

位数   1  1  2  2  2  2  2  2  1   2   2    2    2    2    2    1

移动后,就从56位中选出48位。这个运算既置换了每位的顺序,也选择了子密钥,被称为压缩置换(compression permutation)。下表即定义了压缩置换:

14, 17, 11, 24, 1, 5, 3, 28, 15, 6, 21, 10

23, 19, 12, 4, 26, 8, 16, 7, 27, 20, 13, 2

41, 52, 31, 37, 47, 55, 30, 40, 51, 45, 33, 48

44, 49, 39, 56, 34, 53, 46, 42, 50, 36, 29, 32

可以看出,第33位的那一位在输出时移到了第35位,而处于第18位的那一位被忽略了。

5、扩展置换

这个运算将数据的右半部分从32位扩展到48位。这个操作两方面的目的:它产生了与密钥同长度的数据以进行异或运算;它提供了更长的结果,使得在替代运算中能进行压缩。如下图所示:

对每个4位输入分组,第1位和第4位分别表示输出分组中的两位,而第2位和第3位分别表示输出分组中的一位,下表给出了哪一输出位对应哪一输入位:

32,  1,  2,  3,  4,  5,  4,  5,  6,  7,  8,  9

8, 9, 10, 11, 12, 13, 12, 13, 14, 15, 16, 17

16, 17, 18, 19, 20, 21, 20, 21, 22, 23, 24, 25

24, 25, 26, 27, 28, 29, 28, 29, 30, 31, 32, 1

处于输入分组中第3位的位置移到了输出分组中的第4位,而输入分组的第21位则移到了输出分组的第30位和第32位。尽管输出分组大于输入分组,但每一个输入分组产生唯一的输出分组。

6、S盒代替

压 缩后的密钥与扩展分组异或以后,将48位的结果送入,进行代替运算。替代由8个S盒完成,每一个S盒都由6位输入,4位输出,且这8个S盒是不同的。48 位的输入被分为8个6位的分组,每一个分组对应一个S盒代替操作:分组1由S盒1操作,分组2由S盒2操作,等等。如下图所示:

每一个S盒是一个4行、16列的表。盒中的每一项都是一个4位的数。S盒的6个位输入确定了其对应的输出在哪一行哪一列。下表列出所有8个S盒:

 S盒1:

14, 4, 13, 1, 2, 15, 11, 8, 3, 10, 6, 12, 5, 9, 0, 7

0, 15, 7, 4, 14, 2, 13, 1, 10, 6, 12, 11, 9, 5, 3, 8

4, 1, 14, 8, 13, 6, 2, 11, 15, 12, 9, 7, 3, 10, 5, 0

15, 12, 8, 2, 4, 9, 1, 7, 5, 11, 3, 14, 10, 0, 6, 13

S盒2:

15, 1, 8, 14, 6, 11, 3, 4, 9, 7, 2, 13, 12, 0, 5, 10

3, 13, 4, 7, 15, 2, 8, 14, 12, 0, 1, 10, 6, 9, 11, 5

0, 14, 7, 11, 10, 4, 13, 1, 5, 8, 12, 6, 9, 3, 2, 15

13, 8, 10, 1, 3, 15, 4, 2, 11, 6, 7, 12, 0, 5, 14, 9

S盒3:

10, 0, 9, 14, 6, 3, 15, 5, 1, 13, 12, 7, 11, 4, 2, 8

13, 7, 0, 9, 3, 4, 6, 10, 2, 8, 5, 14, 12, 11, 15, 1

13, 6, 4, 9, 8, 15, 3, 0, 11, 1, 2, 12, 5, 10, 14, 7

1, 10, 13, 0, 6, 9, 8, 7, 4, 15, 14, 3, 11, 5, 2, 12

S盒4:

7, 13, 14, 3, 0, 6, 9, 10, 1, 2, 8, 5 ,11, 12, 4, 15

13, 8, 11, 5, 6, 15, 0, 3, 4, 7, 2, 12, 1, 10, 14, 9

10, 6, 9, 0, 12, 11, 7, 13, 15, 1, 3, 14, 5, 2, 8, 4

3, 15, 0, 6, 10, 1, 13, 8, 9, 4, 5, 11, 12, 7, 2, 14

S盒5:

2, 12, 4, 1, 7, 10, 11, 6, 8, 5, 3, 15, 13, 0, 14, 9

14, 11, 2, 12, 4, 7, 13, 1, 5, 0, 15, 10, 3, 9, 8, 6

4, 2, 1, 11, 10, 13, 7, 8, 15, 9, 12, 5, 6, 3, 0, 14

11, 8, 12, 7, 1, 14, 2, 13, 6, 15, 0, 9, 10, 4, 5, 3

S盒6:

12, 1, 10, 15, 9, 2, 6, 8, 0, 13, 3, 4, 14, 7, 5, 11

10, 15, 4, 2, 7, 12, 9, 5, 6, 1, 13, 14, 0, 11, 3, 8

9, 14, 15, 5, 2, 8, 12, 3, 7, 0, 4, 10, 1, 13, 11, 6

4, 3, 2, 12, 9, 5, 15, 10, 11, 14, 1, 7, 6, 0, 8, 13

S盒7:

4, 11, 2, 14, 15, 0, 8, 13, 3, 12, 9, 7, 5, 10, 6, 1

13, 0, 11, 7, 4, 9, 1, 10, 14, 3, 5, 12, 2, 15, 8, 6

1, 4, 11, 13, 12, 3, 7, 14, 10, 15, 6, 8, 0, 5, 9, 2

6, 11, 13, 8, 1, 4, 10, 7, 9, 5, 0, 15, 14, 2, 3, 12

S盒8:

13, 2, 8, 4, 6, 15, 11, 1, 10, 9, 3, 14, 5, 0, 12, 7

1, 15, 13, 8, 10, 3, 7, 4, 12, 5, 6, 11, 0, 14, 9, 2

7, 11, 4, 1, 9, 12, 14, 2, 0, 6, 10, 13, 15, 3, 5, 8

2, 1, 14, 7, 4, 10, 8, 13, 15, 12, 9, 0, 3, 5, 6, 11

假定将S盒的6位的输入标记位b1、b2、b3、b4、b5、b6。则b1和b6组合构成了一个2位数,从0到3,它对应着表的一行。从b2到b5构成了一个4位数,从0到15,对应着表中的一列。

例如,假设第6个S盒的输入为110011,第1位和第6位组合形成了11,对应着第6个S盒的第三行,中间4位组合形成了1001,它对应着同一个S盒的第9列,S盒6在第三行第9列的数是14,则用值1110来代替110011。

这是DES算法的关键步骤,所有其他的运算都是线性的,易于分析,而S盒是非线性的,它比DES的其他任何一步提供了更好的安全性。

这个代替过程的结果是8个4位的分组,他们重新合在一起形成了一个32位的分组。

7、P盒置换

S盒代替运算的32位输出依照P盒进行置换。该置换把每输入位映射到输出位,任一位不能被映射两次,也不能被略去,下表给出了每位移至的位置:

16, 7, 20, 21, 29, 12, 28, 17, 1, 15, 23, 26, 5, 18, 31, 10

2, 8, 24, 14, 32, 27, 3, 9, 19, 13, 30, 6, 22, 11, 4,  25

第21位移到了第4位,同时第4位移到了第31位。

最后,将P盒置换的结果与最初的64位分组的左半部分异或,然后左、右半部分交换,接着开始另一轮。

8、末置换

末置换是初始置换的逆过程。DES在最后一轮后,左半部分和右半部分并未交换,而是将两部分并在一起形成一个分组作为末置换的输入,该置换如下表如示:

40, 8, 48, 16, 56, 24, 64, 32, 39, 7, 47, 15, 55, 23, 63, 31

38, 6, 46, 14, 54, 22, 62, 30, 37, 5, 45, 13, 53, 21, 61, 29

36, 4, 44, 12, 52, 20, 60, 28, 35, 3, 43, 11, 51, 19, 59, 27

34, 2, 42, 10, 50, 18, 58, 26, 33, 1, 41, 9, 49, 17, 57, 25

9、DES的解密

DES使得用相同的函数来加密或解密每个分组成为可能,二者唯一的不同就是密钥的次序相反。

10、DES的发展

为了增加密钥的长度,人们建议将一种分组密码进行级联,在不同的密钥作用下,连续多次对一组明文进行加密,通常把这种技术称为多重加密技术。对DES,建议使用3DES增强加密强度。3DES算法是扩展DES密钥长度的一种方法,可使加密密钥长度扩展到128比特(112比特有效)或192比特(168比特有效)。

3DES可以用两个密钥对明文进行三次加密,假设两个密钥是K1和K2:

1)用密钥K1进行DES加密。

2)用K2对步骤1的结果进行DES解密。

3)对2)的结果使用密钥K1进行DES加密。

3DES的缺点是加、解密速度比DES慢。

在pycharm中运行sagemath脚本的配置过程 本文介绍了如何在Pycharm上运行SageMath脚本。SageMath作为强大的开源数学工具,在密码学和CTF竞赛中具有重要作用。由于原生不支持Windows,需通过WSL安装Ubuntu子系统,并在其中部署SageMath。具体步骤包括:1)启用WSL功能并安装Ubuntu;2)在子系统中安装SageMath;3)创建Python虚拟环境;4)配置PyCharm专业版使用WSL解释器。文末提供了测试脚本验证配置效果。整个过程需要1-3小时,要求Windows 10/11系统、PyCharm专 阅读详情

相关推荐

pycharm找不到‘XXX‘模块 /ModuleNotFoundError: No module named ‘XXX‘问题

pycharm找不到‘XXX’模块 /ModuleNotFoundError: No module named ‘XXX’问题 pycharm显示找不到‘XXX’模块。 首先是看下有没有下载该模块。 pycharm右上角File->Settings或直接cmd,python -m pip install XXX 已下载模块但还是ModuleNotFoundError: No module named ‘torch’,且使用conda的虚拟环境,则检查路径,没有则添加或重新设置,点击上图的“+”上方

laizhouhui8863的博客 5069

三轮DES差分攻击Java实现(无第三方库,带测试)

三轮DES差分攻击是一种高效的密码分析技术,通过分析特定明文对的差分特征与密文对的关系,利用S盒差分特性逐步缩小密钥候选范围。攻击的核心在于构建S盒差分对应表,通过查询输入输出差分获取可能的密钥值,并通过多轮迭代筛选出唯一密钥。实验表明,53.9%的情况下仅需3次更新即可破解密钥,验证了该攻击的有效性。该技术虽然对三轮DES效果显著,但对完整16轮DES因轮数增加导致差分特征弱化而难以奏效,体现了密码算法设计中轮数安全性的重要性。

分享产生双倍快乐 3296

三轮DES差分攻击

三轮DES差分攻击 文章目录三轮DES差分攻击(Python完整源码)1、写在前面2、三轮差分原理3、题目解答4、三轮差分攻击代码 1、写在前面 Readme~ 关于DES的三轮差分攻击   希望大家弄明白原理,不要只要代码   代码中的import的Des_attack的代码内容是我的上一篇Des加、解密博客中的代码,有需要的读者可以移步DES加密、解密   这里因为latex写的报告拷贝出现乱码,就把我们实验报告中的原理部分以图片形式分享出来,供大家

lunan的博客 5067

DES加密算法原理

目录: 一、DES算法: 二、主要流程: 1、初始置换: 2、加密处理--16轮迭代过程: 2.1 秘钥置换--子密钥生成: 2.2扩展置换E(E位选择表) 2.3 S-盒代替(功能表S盒) 2.4P-盒置换: 3、逆置换: 4、DES解密: 一、DES算法: 1、DES算法简介: DES算法为密码体制中的对称密码体制。需要加密的明文按64位进行分组,加密...

张维鹏的博客 5万+

目标检测pycharm的terminal终端打开,一打开提示:系统找不到指定的路径,如何解决?

🏆本文收录于 《全栈Bug调优(实战版)》 专栏,该专栏专注于分享我在真实项目开发中遇到的各类疑难Bug及其深层成因,并系统提供高效、可复现的解决思路和实操方案。无论你是刚入行的新手开发者,还是拥有多年项目经验的资深工程师,本专栏都将为你提供一条系统化、高质量的问题排查与优化路径,助力你加速成长,攻克技术壁垒,迈向技术价值最大化与职业发展的更高峰🚀!

**My Coding Family** 1813

三圈DES的差分攻击 RSA解密密钥攻击

题目1:三圈DES的差分攻击; 要求:设计必需的界面环境, (1) 输入明文及其对应的密文,产生相应的密钥 (2) 设计有好的窗口显示实验结果 题目2:RSA解密密钥攻击; 要求:设计必需的界面环境, (1) 加密密钥和解密密钥,求p、q,使n=p*q (2) 设计有好的窗口显示实验结果 这是密码学课程设计的两个题目,希望对大家的学习有帮助。

用差分分析攻击DES

差分分析DES

buctwx的博客 1616

3圈DES差分攻击小程序

以前的课设,拿上来分享。程序是Linux下的,GTK+的界面。压缩包里有源文件,GTK的.glade文件和编译好的程序。 .glade和程序要在同一目录下才能运行。 注:感谢Author: Wenbo Yang <http://solrex.cn> * Company: the State Key Laboratory of Information Security * CAS, Beijing, China.

通俗易懂,十分钟读懂DES,详解DES加密算法原理,DES攻击手段以及3DES原理。Python DES实现源码

DES(Data Encryption Standard)是一种对称加密算法。本文详细解释DES的算法原理,以及不安全的原因。附Python的实现源码。

Demonslzh的博客 7万+

密码学课程设计(DES加解密 3圈DES差分攻击)

密码学课程设计:DES标准加解密、DES弱密钥的分析、3圈DES差分攻击。

DES差分分布表程序及结果

3轮DES差分攻击报告和DES的S盒的S1的差分分布表,给出了程序和结果

pycharm 解释器中有Numpy、torch,但是运行时还是会显示找不到这两个模块。

pycharm 解释器中有Numpy、torch,但是运行时还是会显示找不到这两个模块。

qq_44258878的博客 8968

从RTL到GDSII:DC综合里那些没人告诉你的时钟约束冷知识(附真实工程示例)

本文深入探讨数字IC设计中DC综合阶段的时钟约束冷知识,包括无毛刺时钟切换、寄存器分频时钟约束、虚拟时钟应用等关键技巧。通过真实工程示例,揭示常见约束误区及解决方案,帮助工程师提升时序收敛效率。特别针对input_delay和output_delay在多时钟域场景下的设置陷阱提供实用指南。

weixin_29306317的博客 429

pycharm安装pyqt5注意事项(解决找不到pyqt5模块)

环境python3.6+pycharm+pyqt5,按照网络方法配置,报错“找不到 PyQt5模块” 1 配置前我的环境: pycharm201902版本,python3.6。操作系统:win7 64。 注意:我的python3.6是默认安装的,位置在“C:\Users\Administrator\AppData\Local\Programs\P...

asdwt123的专栏 1万+

今天出一个candence 17.4 allego的安装教程

7、安装完成,接下来进行补丁更新,找到Hotfix_SPB17.40.035_wint.iso软件 ,右击鼠标选择装载。6、因为之前选择的定制安装,这一步不知道具体要安装啥,因此都勾选,点击NECK,接下来等待安装完成。后面经过仔细对比,发现是前面更新补丁时选择了F盘,F盘是candence安装包,不是补丁。8、在破戒大师里选择安装更新补丁,并找到刚才装载的安装包里的程序,点击下一步。3、打开破戒大师,找到安装candence进行如下图选择,点击下一步。有耐心的人可以重新卸了再装一边,我就不卸了,直接装。

hcvinh的博客 2724

ADI官方例程HDL和No-OS生成Vivado工程

这一步是选择下载源,一般都是选择国内镜像,因为国外的源太慢了,这里选择阿里的镜像,如果没有这个选项可以在下面的User URL里添加就行,选择好源后然后点击下一步。下一步会从你选择的源上下载软件包目录,如果提示Unable to get setup from https://xxxxxx/,返回上一步,选择别的源,例如第二个163网易的源。然后就是你想要安装在哪了,下面的选项好像会决定环境变量存放在哪,不过一般都是个人电脑选择第一个默认的就行,然后点下一步。下好之后双击打开,就是这个界面了,直接点下一步。

代码匠的博客 3828

pycharm运行程序找不到pymysql

安装成功pymysql,但是还是找不到 把路径添加到pycharm的解释器中:/usr/local/lib/python3.7/site-packages,重启pycharm还是提示找不到pymysql 终端中import pymysql可以成功,但是pymysql --version就提示zsh: command not found: pymysql 怀疑是因为没有安装mysq...

weixin_37650015的博客 2250

pycharm配置anaconda环境时找不到conda环境解决办法

上图只显示创建的虚拟环境中的那些文件夹,但是没有显示这个虚拟环境的可执行文件,没法添加环境。搜了半天总结出问题:pycharm版本过新。

ytusdc的博客 3万+

【AI智能体】Claude Code 核心记忆文件 CLAUDE.md实战操作详解

Claude Code 核心记忆文件 CLAUDE.md实战操作详解

congge 5456

NVIDIA Jetson之交叉编译工具

参考:http://bbs.xfyun.cn/forum.php?mod=viewthread&amp;tid=33630 用TX2做红外热成像仪的识别,厂家不提供源码,只能提供对应版本的SDK,但是需要我们自己提供交叉编译器 由于之前没有做过交叉编译相关工作,对编译工具不太了解,因此查找相关资料学习下 交叉编译知识 一般来说,针对嵌入式平台的开发有两种编译模式:原生编译和交叉编译。原生编...

ZONGXP的博客 8382

pycharm运行python报错 CreateProcess error=2, 系统找不到指定的文件

运行别人的项目出现报错 Error running 'train_frcnn': Cannot run program "C:\Users\Administrator\anaconda\envs\py3\bin\python" (in directory "E:\xxx\xxxxx"): CreateProcess error=2, 系统找不到指定的文件。 此报错乃是运行环境有问题,找到项目目录下的.idea目录,在目录里有个workspace.xml的文件 进入文件,搜索 py3,跟报错中的“C:

程序员 1万+

QtQuick QML教程(2):qml语法介绍

​ qml一个普通的文本文件,后缀是.qml, 一个qml文件主要由两部分组成:(1) import语句 :这个就像C++中的头文件, 使用 import 导入qml需要的相关模块,可以查询Qt文档进行导入,注意每个版本的Qt模块声明可能都不同,相比于QWidget项目,QtQuick的变动是很大的;(2) QML对象树 :根对象是Window, 然后可以在Window中添加各种控件,例如按钮,文本,菜单等。

琅嬛福地 547

为什么pycharm远程连接服务器运行时总会出现找不到文件或目录

第二种是我只在本机上修改代码,修改完了我要在服务器上跑(一般服务器上的配置的显卡什么的比本机上的高,(一般的电脑也带不起来高配置的显卡)),这个一般是符合我们需求和预期的。就我的理解,第一种是interpreter还是用本机的,运行什么的都在本机上,服务器就像一个共享平台或者存储的地方(有一点像百度云盘)4、进入下图界面,默认情况下,选择的是Deployment configuration,将其改成SSH就可以了(finish)所以这可能是一个不稳定的bug,但这种解释太玄学了,下面有一种比较合理的解释。

virus111222的博客 6062

CAN(2)-GD32

GD32中CAN的特征。

小柚子的博客 552

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

Pycharm运行时找不到文件问题

这是解释器设置问题,在设置里找到interpreter 找到合适的目录就可以了。因为重装了python导致pycharm找不到路径了。 另外,pycharm找不到tensorflow包的问题,也是在interpreter里面增加依赖,安装一下如图2所示

u011792913的博客 3万+

Statistics and Machine Learning Toolbox

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

上一篇: RESTful Webservice 和 SOAP Webserivce 对比及区别
下一篇: DES加密算法源码(java版)
wangshfa
博客等级 码龄17年 117粉丝 2原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值