机器学习实验报告
机器学习实验六:深度神经网络
这个需要积分下载(因为实验报告后台查重,不建议直接白嫖)。
建议看博客,博客里面会有很多实验报告小说明会用【…】加粗注释。
实验目的:
实验要求:
根据周志华老师的《机器学习》一书中,来阐述神经网络模型。
神经网络中最基本的成分是神经元模型。在生物神经网络中,每个神经元与其他神经元相连,当它“兴奋”时,就会向相连的神经元发送化学午直,从而改变这些神经元内的点位;如果某神经元的电位超过了一个“阈值”,那么它就会被激活,即“兴奋”起来,向其他神经元发送化学物质。
1943年,[McCulloch and Pitts,1943]将上述情形抽象为图一所示的简单模型,这就是一直沿用至今的“M-P神经元模型”。

在这个模型中,神经元接收到来自n个其他神经元传递过来的输入信号,这些输入信号通过权重的链接进行传递,神经元收到的总输入值将与神经元的阈值进行比较,然后通过激活函数处理以产生神经元的输出。
感知机的模型是一个有若干输入和一个输出的模型(图二)。

其中输出和输入之间学习到一个线性关系,得到中间输出结果(公式1),接着是一个神经元激活函数,得到输出结果为1或者-1(公式2).当然,这个模型只能用于二分类,且无法学习比较复杂的非线性模型。


神经网络是基于感知机的扩展,而DNN可以理解为有很多隐藏层的神经网络。多层神经网络和深度神经网络DNN也是指的一个东西,DNN有时也叫做“多层感知机(Multi-Layer perceptron,MLP)”。










本次实验主要针对深度神经网络CNN在人脸识别案例和通用手写识别这两个案例进行实验,并展示其效果。本次实验也将进行调参,调整CNN卷积核大小、个数;池化层大小、步长等各个参数来探讨CNN网络在这些案例上的性能。
(1) ORL56_46人脸数据集
该数据集共有40个人,每个人10张图片。每张图片像素大小为56×46。本次实验随机取每个类的80%作为训练样本集;每个类的10%作为验证集;每个类的10%作为测试集。
(2) Yale人脸数据集
Yale人脸数据库,其中有15人,每人11张图片。适用于模式识别领域,是人脸识别算法实验的不二之选,图片均为100*100尺寸。本次实验随机取每个类的9/11作为训练样本集;每个类的1/11作为验证集;每个类的1/11作为测试集。
(3) FERET人脸数据集
该数据集一共200人,每人7张,已分类,灰度图,80x80像素。第1幅为标准无变化图像,第2,5幅为大幅度姿态变化图像,第3,4幅为小幅度姿态变化图像。第7幅为光照变化图像。本次实验随机取每个类的5/7作为训练样本集;每个类的1/7作为验证集;每个类的1/7作为测试集。
实验序号(1):定义CNN神经网络——输入为图像并给定图像大小;卷积核为3x3, 10个;采用5x5步长为2的最大池化。
实验序号(2):定义CNN神经网络——输入为图像并给定图像大小;卷积核为5x5, 10个;采用5x5步长为2的最大池化。
实验序号(3):定义CNN神经网络——输入为图像并给定图像大小;卷积核为3x3, 20个;采用5x5步长为2的最大池化。
实验序号(4):定义CNN神经网络——输入为图像并给定图像大小;卷积核为5x5, 20个;采用5x5步长为2的最大池化。
实验序号(5):定义CNN神经网络——输入为图像并给定图像大小;卷积核为3x3, 10个;采用2x2步长为2的最大池化。
实验序号(6):定义CNN神经网络——输入为图像并给定图像大小;卷积核为5x5, 10个;采用2x2步长为2的最大池化。
训练参数信息如下:
轮:共30轮
最大迭代次数:1170次 (训练结束状态:到达最后一次迭代)
硬件资源:单GPU
学习率调度:常数
学习率:0.01



使用 digitTrain4DArrayData 和 digitTest4DArrayData 以四维数组的形式加载训练图像和验证图像。输出 YTrain 和 YValidation 是以度为单位的旋转角度。训练数据集和验证数据集各包含 5000 个图像。MATLAB自带该数据集,本次实验直接调用digitTrain4DarrayData和digitTest4DarrayData,可以直接通过以下方式导入训练数据和测试数据:
[XTrain, YTrain] = digitTrain4DArrayData;%导入训练数据
[XTest, YTest] = digitTest4DArrayData;%导入测试数据
在这一部分实验中,我将完善人脸识别模块没有考虑到的参数部分——“激活函数”。我主要考虑两个常用的激活函数:Softmax函数和ReLU函数。
实验序号(1):定义CNN神经网络——输入为图像并给定图像大小;卷积核为3x3, 10个;采用2x2步长为2的最大池化。
实验序号(2):定义CNN神经网络——输入为图像并给定图像大小;卷积核为5x5, 10个;采用2x2步长为2的最大池化。
实验序号(3):定义CNN神经网络——输入为图像并给定图像大小;卷积核为3x3, 20个;采用2x2步长为2的最大池化。
实验序号(4):定义CNN神经网络——输入为图像并给定图像大小;卷积核为5x5, 20个;采用2x2步长为2的最大池化。
实验序号(5):定义CNN神经网络——输入为图像并给定图像大小;卷积核为3x3, 20个;采用5x5步长为2的最大池化。
实验序号(6):定义CNN神经网络——输入为图像并给定图像大小;卷积核为5x5, 20个;采用5x5步长为2的最大池化。
训练参数信息如下:
轮:共30轮
最大迭代次数:1170次 (训练结束状态:到达最后一次迭代)
硬件资源:单GPU
学习率调度:常数
学习率:0.01


本次实验的实验结论如下:
人脸识别案例实验结论:
在数据集方面,当卷积神经网络模型面对不同数据集时,模型性能表现不同,当数据集规模较小时有着优秀的分类性能,但数据集较大时会出现准确率下降问题,这是由于图像种类、形状和颜色相差较大。
当数据集规模较大时,模型所需要计算的资源会提高,训练效果会受到计算机配置影响,因此,在模型训练过程中只能降低参数要求,延长模型训练时间来完成模型的训练,同样导致准确率下降。
参数设置不好容易造成过拟合的情况,比如FERET数据集的结果呈现,在训练集中的准确率接近100%,而在测试集中只有60%左右。
手写数字识别案例实验结论:
对比了Softmax和ReLU激活函数,其中ReLU激活函数无疑更胜一筹,作为AlexNet提出的激活函数,非常优秀,在很长一段时间内是设计CNN网络的默认激活函数,为网络带来稀疏性。
Softmax激活函数的范围很大,而大脑神经元的状态仅处于抑制或兴奋两种状态,不需要(-∞,∞)这么大的范围来描述它,Softmax函数会在某种程度上造成梯度消失的情况。
本次实验报告对深度神经网络的模型,以及它们的正向传播算法、反向传播算法有了更加深刻的了解,并比较了全连接网络和卷积神经网络CNN两种网络的异同。在采用CNN在人脸识别案例和手写数据集案例的实验上,对神经网络的调参又有了一次深刻的体会。对于CNN网络模型(卷积层、池化层、全连接层),每个层所涉及的参数其实还是相对来说比较多的。实验中主要考虑了卷积核的大小、个数、池化步长和激活函数的设置,并采用了多次多种实验的方式,测得分类任务的识别率和效率。
本次实验也是机器学习这门课的最后一次实验报告,我也认认真真码完了7700+,以表示我对这门课由衷的热爱。不论是大一的计算机导论课,还是这学期我们正式系统地学习机器学习,阅读了近50篇论文的整个过程,毫无疑问,都是我在大学这两年进步最快的时间段。所以我非常感谢赖老师这么尽心尽力去准备机器学习这门课,准备这些论文,也很感谢亲切的助教,分享了很多知识,给出了很多建议,能在大学四年遇到你们尤其幸运!这也是最后一次码让人“又爱又恨”的机器学习实验报告了,竟有些不舍,那就最后用赖神最喜欢(也是我最喜欢)的《生于忧患,死于安乐》结尾吧:
舜发于畎亩之中,傅说举于版筑之间,胶鬲举于鱼盐之中,管夷吾举于士,孙叔敖举于海,百里奚举于市。故天将降大任于是人也,必先苦其心志,劳其筋骨,饿其体肤,空乏其身,行拂乱其所为,所以动心忍性,曾益其所不能。
人恒过,然后能改,困于心,衡于虑,而后作;征于色,发于声,而后喻。入则无法家拂士,出则无敌国外患者,国恒亡,然后知生于忧患而死于安乐也。
机器学习实验报告就此完结撒花★,°:.☆( ̄▽ ̄)/$:.°★ 。!!!

这似乎非常适得其反,因为太多的gem会在window上破裂。我一直在处理很多mysql和ruby-mysqlgem问题(gem本身发生段错误,一个名为UnixSocket的类显然在Windows机器上不能正常工作,等等)。我只是在浪费时间吗?我应该转向不同的脚本语言吗? 最佳答案 我在Windows上使用Ruby的经验很少,但是当我开始使用Ruby时,我是在Windows上,我的总体印象是它不是Windows原生系统。因此,在主要使用Windows多年之后,开始使用Ruby促使我切换回原来的系统Unix,这次是Linux。Rub
我想在Ruby中创建一个用于开发目的的极其简单的Web服务器(不,不想使用现成的解决方案)。代码如下:#!/usr/bin/rubyrequire'socket'server=TCPServer.new('127.0.0.1',8080)whileconnection=server.acceptheaders=[]length=0whileline=connection.getsheaders想法是从命令行运行这个脚本,提供另一个脚本,它将在其标准输入上获取请求,并在其标准输出上返回完整的响应。到目前为止一切顺利,但事实证明这真的很脆弱,因为它在第二个请求上中断并出现错误:/usr/b
导读语言模型给我们的生产生活带来了极大便利,但同时不少人也利用他们从事作弊工作。如何规避这些难辨真伪的文字所产生的负面影响也成为一大难题。在3月9日智源Live第33期活动「DetectGPT:判断文本是否为机器生成的工具」中,主讲人Eric为我们讲解了DetectGPT工作背后的思路——一种基于概率曲率检测的用于检测模型生成文本的工具,它可以帮助我们更好地分辨文章的来源和可信度,对保护信息真实、防止欺诈等方面具有重要意义。本次报告主要围绕其功能,实现和效果等展开。(文末点击“阅读原文”,查看活动回放。)Ericmitchell斯坦福大学计算机系四年级博士生,由ChelseaFinn和Chri
网络编程套接字网络编程基础知识理解源`IP`地址和目的`IP`地址理解源MAC地址和目的MAC地址认识端口号理解端口号和进程ID理解源端口号和目的端口号认识`TCP`协议认识`UDP`协议网络字节序socket编程接口`sockaddr``UDP`网络程序服务器端代码逻辑:需要用到的接口服务器端代码`udp`客户端代码逻辑`udp`客户端代码`TCP`网络程序服务器代码逻辑多个版本服务器单进程版本多进程版本多线程版本线程池版本服务器端代码客户端代码逻辑客户端代码TCP协议通讯流程TCP协议的客户端/服务器程序流程三次握手(建立连接)数据传输四次挥手(断开连接)TCP和UDP对比网络编程基础知识
目录前言滤波电路科普主要分类实际情况单位的概念常用评价参数函数型滤波器简单分析滤波电路构成低通滤波器RC低通滤波器RL低通滤波器高通滤波器RC高通滤波器RL高通滤波器部分摘自《LC滤波器设计与制作》,侵权删。前言最近需要学习放大电路和滤波电路,但是由于只在之前做音乐频谱分析仪的时候简单了解过一点点运放,所以也是相当从零开始学习了。滤波电路科普主要分类滤波器:主要是从不同频率的成分中提取出特定频率的信号。有源滤波器:由RC元件与运算放大器组成的滤波器。可滤除某一次或多次谐波,最普通易于采用的无源滤波器结构是将电感与电容串联,可对主要次谐波(3、5、7)构成低阻抗旁路。无源滤波器:无源滤波器,又称
最近在学习CAN,记录一下,也供大家参考交流。推荐几个我觉得很好的CAN学习,本文也是在看了他们的好文之后做的笔记首先是瑞萨的CAN入门,真的通透;秀!靠这篇我竟然2天理解了CAN协议!实战STM32F4CAN!原文链接:https://blog.csdn.net/XiaoXiaoPengBo/article/details/116206252CAN详解(小白教程)原文链接:https://blog.csdn.net/xwwwj/article/details/105372234一篇易懂的CAN通讯协议指南1一篇易懂的CAN通讯协议指南1-知乎(zhihu.com)视频推荐CAN总线个人知识总
深度学习部署:Windows安装pycocotools报错解决方法1.pycocotools库的简介2.pycocotools安装的坑3.解决办法更多Ai资讯:公主号AiCharm本系列是作者在跑一些深度学习实例时,遇到的各种各样的问题及解决办法,希望能够帮助到大家。ERROR:Commanderroredoutwithexitstatus1:'D:\Anaconda3\python.exe'-u-c'importsys,setuptools,tokenize;sys.argv[0]='"'"'C:\\Users\\46653\\AppData\\Local\\Temp\\pip-instal
require"socket"server="irc.rizon.net"port="6667"nick="RubyIRCBot"channel="#0x40"s=TCPSocket.open(server,port)s.print("USERTesting",0)s.print("NICK#{nick}",0)s.print("JOIN#{channel}",0)这个IRC机器人没有连接到IRC服务器,我做错了什么? 最佳答案 失败并显示此消息::irc.shakeababy.net461*USER:Notenoughparame
我完全不是程序员,正在学习使用Ruby和Rails框架进行编程。我目前正在使用Ruby1.8.7和Rails3.0.3,但我想知道我是否应该升级到Ruby1.9,因为我真的没有任何升级的“遗留”成本。缺点是什么?我是否会遇到与普通gem的兼容性问题,或者甚至其他我不太了解甚至无法预料的问题? 最佳答案 你应该升级。不要坚持从1.8.7开始。如果您发现不支持1.9.2的gem,请避免使用它们(因为它们很可能不被维护)。如果您对gem是否兼容1.9.2有任何疑问,您可以在以下位置查看:http://www.railsplugins.or
如何学习ruby的正则表达式?(对于假人) 最佳答案 http://www.rubular.com/在Ruby中使用正则表达式时是一个很棒的工具,因为它可以立即将结果可视化。 关于ruby-我如何学习ruby的正则表达式?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/1881231/