机器学习测试笔记(15)——神经网络

本文涉及的产品
性能测试 PTS,5000VUM额度
简介: 机器学习测试笔记(15)——神经网络

1.神经网络基础


         

image.png

             

上面这个图是动物神经的解刨图,由于神经仅有兴奋与抑制两种状态,这与计算机仅有“01”两种状态相吻合,这也就是神经网络可以应用于计算机的原因。神经网络的发展历史如下:

  • 1943年,美国神经解剖学家沃伦麦克洛奇(Warren McCulloch)与神经网络和数学家沃尔特皮茨(Walter Pitts)提出脑神经元的抽象模型,即M-P (McCulloch-Pitts neuronMCP)
  • 1958 年,计算机科学家弗兰克罗森布拉特(Frank Rossenblatt)提出第一个感知机学习法则。
  • 1969 年,计算机领域的专业人士马文明斯基(Marvin Minsky),出版了preceptron的一书,提出了感知机的弱点,使得神经网络会输陷于低谷
  • 1979年,杰弗瑞·欣顿(GeofferyHinton)提出了反向传播算法(BackpropagationBP),因此杰弗瑞·欣顿被称为神经网络之父。
  • 后来出现了多层感知器(Multilayer PreceptronMLP
  • 现在的深度学习,都属于神经网络的范畴。


人工智能,机器学习,深度学习之间的关系如下图所示。

image.png


动物的神经网络活动过程如下:

  1. 外部刺激通过神经末梢转为电信号,传到神经元细胞;
  2. 无数神经元构成神经中枢;
  3. 神经中枢综合各种信号做出判断;
  4. 把神经中枢的指令发送到人体各个部分,对外部刺激做出反应。

神经网络原理公式:

= wk1⋅x1+ wk2⋅x2 + ⋯ + wkn⋅xn + bk


如下图所示:

image.png


[xk1,xk2,…xkn]为输入,求和以后加上偏置值bk,最后通过激活函数𝝋(⋅)达到预测值。不考虑偏置值bk和激活函数𝝋(⋅),我们可以以下图左边进行简单表示:

image.png


MLP模型多层感知器中,我们会在输入与输出之间加入1-n个隐藏层重复上面进行加权求和计算,如上图右边所示。隐藏层的层数叫做神经网络的深度,下面这张图为深度为2的神经网络。

image.png

image.png


输出:

  • y = h21+h22+h23

神经网络包括输入层、隐藏层和输出层。输入层为一组输入参数(x1,x2,…,xm),隐藏层包括值(wk1,wk2,wkm),偏置值bk,激活函数𝝋(⋅)和加法器𝛴

为了让模型比普通话线性模型更为强大,我们需要对结果进行非线性校正(即激活函数𝝋(⋅)),非线性校正包括下面4类:

  • identity :对样本不做处理,f(x)=x
  • logistic (回归分析) : f(x)=1/[1+exp(−x)]
  • tanh (双曲正切处理)tangent hyperbolic)
  • relu (非线性矫正)rectified linear unit) 默认

我们在这里仅介绍relutanh


import numpy as np
import matplotlib.pyplot as plt
def Nerver_base():
        line =  np.linspace(-5,5,200)
        #np.tanh()返回具有三角正切正弦的数组
         plt.plot(line,np.tanh(line),label='tanh')
         plt.plot(line,np.maximum(line,0),label='relu')
         plt.legend(loc='best')
        plt.xlabel('x')
        plt.ylabel('relu(x)  and tanh(x)')
        plt.show()

image.png


通过上图,可以看到tanh把值域控制在(-1,1)之间; relu<0的部分强制=0,保留>0的部分。


2. Sklearn关于MLP分类器的参数


sklearn 中使用MLP分类器函数为:from sklearn.neural_network import MLPClassifier。这个函数里面有几个参数非常重要,分别是:solverhidden_layer_sizesactivationlevelalpha

  • solver:包括'lbfgs','sgd','adam',默认为'adam'。权重优化的求解器:
  • 'lbfgs'是准牛顿方法族的优化器;
  • 'sgd'指的是随机梯度下降;
  • 'adam'是指由Kingma,DiederikJimmy Ba提出的基于随机梯度的优化器。


注意:默认解算器“adam”在相对较大的数据集(包含数千个训练样本或更多)方面在训练时间和验证分数方面都能很好地工作。但是,对于小型数据,lbfgs”可以更快地收敛并且表现更好。

  • hidden_layer_sizes[100,100],表示有两个隐藏层,第一个为100个元素,第二个为100个元素。
  • activation:包括'identity','logistic','tanh','relu',默认'relu' 隐藏层的激活函数。
  • 'identity',无操作激活,对实现线性瓶颈很有用,返回f(x)= x
  • 'logistic',logistic sigmoid函数,返回f(x)= 1 /(1+ exp(-x))
  • 'tanh',双曲tan函数,返回f(x)= tanh(x)
  • alphafloat,可选,默认为0.0001L2惩罚(正则化项)参数。

观察以下代码。

from sklearn.neural_network import MLPClassifier
from sklearn.model_selection import train_test_split
from sklearn import datasets
from matplotlib.colors import ListedColormap
def  sklearn_for_Nerver(solver,hidden_layer_sizes,activation,level,alpha):
       wine =  datasets.load_wine()
       X = wine.data[:,:2]
       y = wine.target
       X_train,X_test,y_train,y_test  = train_test_split(X, y, random_state=0)
       mlp =  MLPClassifier(solver=solver,hidden_layer_sizes=hidden_layer_sizes,activation=activation,alpha=alpha,max_iter=10000)
       mlp.fit(X_train,y_train)
       #使用不同色块
       cmap_light =  ListedColormap(['#FFAAAA','#AAFFAA','#AAAAFF'])
       cmap_bold =  ListedColormap(['#FF0000','#00FF00','#0000FF'])
       #分别将样本的两个特征值创建图像的横轴和纵轴
       x_min,x_max =  X_train[:,0].min()-1,X_train[:,0].max()+1
       y_min,y_max =  X_train[:,1].min()-1,X_train[:,1].max()+1
       xx, yy =  np.meshgrid(np.arange(x_min, x_max, .02),np.arange(y_min, y_max, .02))
       #给每个样本分配不同的颜色, predict:训练后返回预测结果,显示标签值
       Z =  mlp.predict(np.c_[xx.ravel(),yy.ravel()])
       Z =  Z.reshape(xx.shape)
       plt.figure()
       # plt.pcolormesh的作用在于能够直观表现出分类边界
       plt.pcolormesh(xx,yy,Z,cmap=cmap_light,shading='auto')
       #用散点把样本表示出来
       plt.scatter(X[:,0],X[:,1],c=y,cmap=cmap_bold,s=60,edgecolors='k')
       plt.xlim(xx.min(),xx.max())  
       plt.ylim(yy.min(),yy.max())
       plt.title("MLPClassifier:solver:"+solver+",node:"+str(hidden_layer_sizes)+",activation:"+activation+",level="+str(level)+",alpha="+str(alpha))
       print("红酒数据训练集:MLPClassifier:solver:"+solver+",node:"+str(hidden_layer_sizes)+",activation:"+activation+",level="+str(level)+",alpha="+str(alpha)+":{:.2%}".format(mlp.score(X_train,y_train)))
       print("红酒数据测试集:MLPClassifier:solver:"+solver+",node:"+str(hidden_layer_sizes)+",activation:"+activation+",level="+str(level)+",alpha="+str(alpha)+":{:.2%}".format(mlp.score(X_test,y_test)))
       plt.show()


我们通过下面的函数来调用上面的sklearn_for_Nerver函数。


image.png


分别得到以下5张图。

image.png

1solver:lbfgs,node:[100],activation:relu,level=1,alpha=0.0001

image.png


2solver:lbfgs,node:[10],activation:relu,level=1,alpha=0.0001

这张图由于node数量减少,颜色区域边界比第1章毛刺多。


image.png


3solver:lbfgs,node:[10,10],activation:relu,level=2,alpha=0.0001

由于(3)增加了隐藏层,边界更加细腻。

image.png


4solver:lbfgs,node:[10,10],activation:than,level=2,alpha=0.0001

activation变为than后,边界变得更加平滑。

image.png


5solver:lbfgs,node:[10,10],activation:than,level=2,alpha=1

通过加大alpha增加模型的正则化程度。


注解:模型越复杂,消耗资源大,但容易过拟合;反之模型简单,消耗资源小,速度快,但容易欠拟合。


3.示例:手写数字识别


MNIST 数据集来自美国国家标准与技术研究所, NationalInstitute of Standards and Technology (NIST). 训练集 (training set) 由来自 250 个不同人手写的数字构成, 其中 50% 是高中学生, 50% 来自人口普查局 (the Census Bureau) 的工作人员. 测试集(test set) 也是同样比例的手写数字数据。


在以前的版本中获取MNIST 数据的python函数为:mnist = fetch_mldata('MNISTOraginal'), sklearn 2.0版本以后变成了minist = datasets.fetch_openml('mnist_784')。第一次执行这个程序,会把MNIST 数据集从网上下载到你本地C:\Users\<用户名>\scikit_learn_data\openml目录下,时间比较长,需要你的耐心等待,以后就不用等待那么长时间了。


from PIL import Image
def writeing():
       minist =datasets.fetch_openml('mnist_784')
       print("样本数量{},样本特征数:{}".format(minist.data.shape[0],minist.data.shape[1]))
       X = minist.data/255
       y = minist.target
       X_train,X_test,y_train,y_test= train_test_split(X, y, random_state=62)
       mlp =MLPClassifier(solver='lbfgs',hidden_layer_sizes=[100,100],activation='tanh',alpha=1e-5,random_state=62)
       mlp.fit(X_train,y_train)
       print("测试集得分:{:.2%}".format(mlp.score(X_test,y_test)))
       image=Image.open('3.jpg').convert('F')
       # 调整图像的大小
       image=image.resize((28,28))
       arr=[]
       # 将图像中的像素作为预测数据点的特征
       for i in range(28):
              for j inrange(28):
                     pixel=1.0-float(image.getpixel((j,i)))/255
                     arr.append(pixel)
       # 由于只有一个样本,所以需要进行reshape操作
       arr1=np.array(arr).reshape(1,-1)# reshape成一行, 无论多少列
       # 进行图像识别
       plt.imshow(image)
       plt.show()
       print('图片中的数字是:{}'.format(mlp.predict(arr1)[0]))


输出:

样本数量70000,样本特征数:784

测试集得分:95.16%

图片中的数字是:4

image.png


sklearn 处理提供MLPClassifier分类方法,还提供方法MLPRegressor回归方法。

注意:在上面程序中,有些同学为了提高速度,采用MINST中的部分数据作为训练集和测试集,即X_train,X_test,y_train,y_test= train_test_split(X, y, random_state=62)改为X_train,X_test,y_train,y_test = train_test_split(X, y, train_size=5000,test_size=1000,random_state=62),效果不是很好,使用全数据训练虽然速度相对慢,但是正确性高。

图片支持jpgpng各种格式。


4.神经网络分类


神经网络可以分为:全连接神经网络、卷积神经网络和循环神经网络。

  • 全连接神经网络:适合入侵检测、股票检测;
  • 卷积神经网络:适合图像识别;

循环神经网络:适合对象识别、机器翻译。


—————————————————————————————————


软件安全测试

https://study.163.com/course/courseMain.htm?courseId=1209779852&share=2&shareId=480000002205486

接口自动化测试

https://study.163.com/course/courseMain.htm?courseId=1209794815&share=2&shareId=480000002205486

DevOps 和Jenkins之DevOps

https://study.163.com/course/courseMain.htm?courseId=1209817844&share=2&shareId=480000002205486

DevOps与Jenkins 2.0之Jenkins

https://study.163.com/course/courseMain.htm?courseId=1209819843&share=2&shareId=480000002205486

Selenium自动化测试

https://study.163.com/course/courseMain.htm?courseId=1209835807&share=2&shareId=480000002205486

性能测试第1季:性能测试基础知识

https://study.163.com/course/courseMain.htm?courseId=1209852815&share=2&shareId=480000002205486

性能测试第2季:LoadRunner12使用

https://study.163.com/course/courseMain.htm?courseId=1209980013&share=2&shareId=480000002205486

性能测试第3季:JMeter工具使用

https://study.163.com/course/courseMain.htm?courseId=1209903814&share=2&shareId=480000002205486

性能测试第4季:监控与调优

https://study.163.com/course/courseMain.htm?courseId=1209959801&share=2&shareId=480000002205486

Django入门

https://study.163.com/course/courseMain.htm?courseId=1210020806&share=2&shareId=480000002205486

啄木鸟顾老师漫谈软件测试

https://study.163.com/course/courseMain.htm?courseId=1209958326&share=2&shareId=480000002205486

相关实践学习
通过性能测试PTS对云服务器ECS进行规格选择与性能压测
本文为您介绍如何利用性能测试PTS对云服务器ECS进行规格选择与性能压测。
目录
相关文章
|
28天前
|
机器学习/深度学习 JSON 算法
实例分割笔记(一): 使用YOLOv5-Seg对图像进行分割检测完整版(从自定义数据集到测试验证的完整流程)
本文详细介绍了使用YOLOv5-Seg模型进行图像分割的完整流程,包括图像分割的基础知识、YOLOv5-Seg模型的特点、环境搭建、数据集准备、模型训练、验证、测试以及评价指标。通过实例代码,指导读者从自定义数据集开始,直至模型的测试验证,适合深度学习领域的研究者和开发者参考。
256 2
实例分割笔记(一): 使用YOLOv5-Seg对图像进行分割检测完整版(从自定义数据集到测试验证的完整流程)
|
24天前
|
机器学习/深度学习 弹性计算 自然语言处理
前端大模型应用笔记(二):最新llama3.2小参数版本1B的古董机测试 - 支持128K上下文,表现优异,和移动端更配
llama3.1支持128K上下文,6万字+输入,适用于多种场景。模型能力超出预期,但处理中文时需加中英翻译。测试显示,其英文支持较好,中文则需改进。llama3.2 1B参数量小,适合移动端和资源受限环境,可在阿里云2vCPU和4G ECS上运行。
|
27天前
|
机器学习/深度学习 人工智能 算法
【玉米病害识别】Python+卷积神经网络算法+人工智能+深度学习+计算机课设项目+TensorFlow+模型训练
玉米病害识别系统,本系统使用Python作为主要开发语言,通过收集了8种常见的玉米叶部病害图片数据集('矮花叶病', '健康', '灰斑病一般', '灰斑病严重', '锈病一般', '锈病严重', '叶斑病一般', '叶斑病严重'),然后基于TensorFlow搭建卷积神经网络算法模型,通过对数据集进行多轮迭代训练,最后得到一个识别精度较高的模型文件。再使用Django搭建Web网页操作平台,实现用户上传一张玉米病害图片识别其名称。
50 0
【玉米病害识别】Python+卷积神经网络算法+人工智能+深度学习+计算机课设项目+TensorFlow+模型训练
|
28天前
|
机器学习/深度学习 计算机视觉 Python
模型预测笔记(三):通过交叉验证网格搜索机器学习的最优参数
本文介绍了网格搜索(Grid Search)在机器学习中用于优化模型超参数的方法,包括定义超参数范围、创建参数网格、选择评估指标、构建模型和交叉验证策略、执行网格搜索、选择最佳超参数组合,并使用这些参数重新训练模型。文中还讨论了GridSearchCV的参数和不同机器学习问题适用的评分指标。最后提供了使用决策树分类器进行网格搜索的Python代码示例。
47 1
|
28天前
|
JSON 算法 数据可视化
测试专项笔记(一): 通过算法能力接口返回的检测结果完成相关指标的计算(目标检测)
这篇文章是关于如何通过算法接口返回的目标检测结果来计算性能指标的笔记。它涵盖了任务描述、指标分析(包括TP、FP、FN、TN、精准率和召回率),接口处理,数据集处理,以及如何使用实用工具进行文件操作和数据可视化。文章还提供了一些Python代码示例,用于处理图像文件、转换数据格式以及计算目标检测的性能指标。
53 0
测试专项笔记(一): 通过算法能力接口返回的检测结果完成相关指标的计算(目标检测)
|
28天前
|
机器学习/深度学习 并行计算 数据可视化
目标分类笔记(二): 利用PaddleClas的框架来完成多标签分类任务(从数据准备到训练测试部署的完整流程)
这篇文章介绍了如何使用PaddleClas框架完成多标签分类任务,包括数据准备、环境搭建、模型训练、预测、评估等完整流程。
73 0
目标分类笔记(二): 利用PaddleClas的框架来完成多标签分类任务(从数据准备到训练测试部署的完整流程)
|
28天前
|
机器学习/深度学习 JSON 算法
语义分割笔记(二):DeepLab V3对图像进行分割(自定义数据集从零到一进行训练、验证和测试)
本文介绍了DeepLab V3在语义分割中的应用,包括数据集准备、模型训练、测试和评估,提供了代码和资源链接。
154 0
语义分割笔记(二):DeepLab V3对图像进行分割(自定义数据集从零到一进行训练、验证和测试)
|
28天前
|
机器学习/深度学习 数据采集 算法
目标分类笔记(一): 利用包含多个网络多种训练策略的框架来完成多目标分类任务(从数据准备到训练测试部署的完整流程)
这篇博客文章介绍了如何使用包含多个网络和多种训练策略的框架来完成多目标分类任务,涵盖了从数据准备到训练、测试和部署的完整流程,并提供了相关代码和配置文件。
43 0
目标分类笔记(一): 利用包含多个网络多种训练策略的框架来完成多目标分类任务(从数据准备到训练测试部署的完整流程)
|
28天前
|
测试技术 数据安全/隐私保护 Python
自动化测试项目实战笔记(四):测试用户登录(账号密码错误,成功,出现弹框等情况)
本文介绍了使用Selenium进行自动化测试时如何测试用户登录的不同情况,包括账号密码错误、登录成功以及处理登录时出现的弹框,并提供了相应的Python代码实现。
47 0
自动化测试项目实战笔记(四):测试用户登录(账号密码错误,成功,出现弹框等情况)
|
27天前
|
机器学习/深度学习 人工智能 算法
#如何看待诺贝尔物理学奖颁给了机器学习与神经网络?#
2024年诺贝尔物理学奖首次颁发给机器学习与神经网络领域的研究者,标志着这一技术对物理学及多领域应用的深远影响。机器学习和神经网络不仅在生产、金融、医疗等行业展现出高效实用性,还在物理学研究中发挥了重要作用,如数据分析、模型优化和物理量预测等,促进了物理学与人工智能的深度融合与发展。
22 0
下一篇
无影云桌面