MW开发架构二次 5_第1页
MW开发架构二次 5_第2页
MW开发架构二次 5_第3页
MW开发架构二次 5_第4页
MW开发架构二次 5_第5页
已阅读5页,还剩44页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

BeihangUniversityMWORKS开发平台架构与二次开发张莉,张永飞,陈娟,刘芳6.1深度学习工具箱开发实践6.2机械运动模型库开发第6章综合应用二次开发实践016.1深度学习工具箱开发实践深度学习概述深度学习是一种机器学习方法,灵感来源于人脑神经网络的结构和功能。通过构建多层神经网络模型,利用大量数据进行训练,实现对复杂模式和特征的学习和提取。具有强大的学习能力、适应性和端到端学习能力。广泛应用于计算机视觉、自然语言处理、语音识别、搜索技术、数据挖掘、机器翻译、推荐系统等领域。取得巨大成功,推动了人工智能相关技术的快速发展。6.1深度学习概述需求分析与说明多层神经网络是深度学习的基础,通过多层次的连接进行信息传递和特征提取。MNIST手写数字识别是一个经典机器学习问题,包括训练集和测试集,每个图像是28x28像素的灰度图像,表示0到9的手写数字。MNIST问题被广泛用于测试和比较不同算法和模型的性能,适合新手入门机器学习。在不依赖外部深度学习库的情况下,基于Syslab构建多层神经网络架构,对数据进行预处理,进行网络训练和测试。6.1.1基于Syslab的多层神经网络开发与实践设计与实现前向传播:输入数据通过网络逐层传播,计算每层输出值。损失计算:网络输出与真实标签比较,计算损失函数评估性能。反向传播:计算损失函数对参数的梯度,逆向传播梯度。参数更新:根据梯度和优化算法,更新每层参数。迭代优化:重复以上步骤,逐渐减小损失函数值,完成训练。6.1.1基于Syslab的多层神经网络开发与实践6.1.1基于Syslab的多层神经网络开发与实践神经网络创建函数神经网络创建首先需要定义一个神经网络类型neural_network,其中包括权重矩阵W和偏置b,网络定义函数如下所示#定义一个神经网络类型mutablestructneural_networkW#权重b#biasend6.1.1基于Syslab的多层神经网络开发与实践神经网络创建函数设计一个神经网络创建函数,接受输入参数包括输入层神经元数量(input_layer_size)、隐含层神经元数量(hidden_layer_sizes)和输出层神经元数量(output_layer_size)。该函数将根据输入参数创建神经网络,并对权重矩阵W和偏置b等参数进行随机初始化。#神经网络创建函数示例functioncreate_network(input_layer_size,hidden_layer_sizes,output_layer_size)#初始化权重W=[[0.0],randn(hidden_layer_sizes[1],input_layer_size)]

b=[0.0,randn(hidden_layer_sizes[1])]

fori=2:length(hidden_layer_sizes)push!(W,randn(hidden_layer_sizes[i],hidden_layer_sizes[i-1]))push!(b,randn(hidden_layer_sizes[i]))end

push!(W,randn(output_layer_size,hidden_layer_sizes[end]))push!(b,randn(output_layer_size))

returnneural_network(W,b)end

6.1.1基于Syslab的多层神经网络开发与实践神经网络创建函数调用神经网络创建函数,根据本实例需求,输入784个输入层神经元,10个输出层神经元,三个隐含层每层100个神经元。#调用这个函数NN是我们新搭建的神经网络NN=create_network(784,[100,100,100],10)6.1.1基于Syslab的多层神经网络开发与实践神经网络创建函数创建完神经网络后,可通过打印输出函数println查看创建的网络#运行以下代码可以查看网络forwinNN.Wprintln(size(w))println("")end6.1.1基于Syslab的多层神经网络开发与实践网络前向传播函数神经网络的前向传播通过前馈网络实现,包括每层的正向传播计算和非线性激活。每隐含层的输入乘以权重矩阵W,加上偏置b,经过激活函数得到输出,作为下一层输入。#计算forwardpassfunctionforward_pass(network,training_instance)Z=[(0.0)]A=[training_instance[1]]

fori=2:length(network.W)push!(Z,network.W[i]*A[i-1]+network.b[i])push!(A,sigma.Z[i])end

returnZ,Aend6.1.1基于Syslab的多层神经网络开发与实践网络前向传播函数其中,sigma()为非线性激活函数。传统的多层神经网络常采用Sigmoid函数作为激活函数。#定义激活函数sigma(x)=1.0/(1.0+exp(-x))#定义激活函数的导数dsigma(x)=sigma(x)*(1-sigma(x)6.1.1基于Syslab的多层神经网络开发与实践网络前向传播函数调用编写好的正向传播函数forward_pass,即可实现正向传播,并得到神经网络在当前参数下的预测输出。#用于预测的函数functionpredict(network,training_instance)Z,A=forward_pass(network,training_instance)returnargmax(A[end])-1end6.1.1基于Syslab的多层神经网络开发与实践网络损失计算函数一次正向传播结束后,需要基于训练样本的神经网络当前参数下的预测输出,以及训练样本的标签,计算网络损失。#计算error_deltafunctionerror_deltas(network,training_instance)Z,A=forward_pass(network,training_instance)L=length(network.W)delta=[(A[end]-training_instance[2]).*dsigma.(Z[end])]fori=L-1:-1:2pushfirst!(delta,(network.W[i+1]'*delta[1]).*dsigma(Z[i]))endpushfirst!(delta,[0.0])returnA,deltaend

#A_test,delta_test=error_deltas(NN,train_data[1])6.1.1基于Syslab的多层神经网络开发与实践网络损失计算函数同样,也可以设计网络函数计算网络的识别准确率。#计算识别的准确率functionsuccess_percentage(network,data_set)returnstring("Thepercentageofcorrectlyclassifyingimagesis:",sum([predict(network,x)==argmax(x[2])-1?1:0forxindata_set])/length(data_set)*100,"%")end#success_percentage(NN,test_data)6.1.1基于Syslab的多层神经网络开发与实践反向传播与优化函数设计反向传播与参数更新函数,利用梯度下降法和反向传播更新网络参数,完成网络训练。以下是基于mini-batch方法的梯度下降示例。#写优化函数,此案例使用的是梯度下降中的minibatch方法functionmake_random_mini_batch(mini_batch_size,data_set)k=rand(1:length(dataset)-mini_batch_size)returndata_set[k:k+mini_batch_size]end

functionmini_batch_update!(network::neural_network,mini_batch_size::Int64,data_set,alpha::Float64)batch=make_random_mini_batch(mini_batch_size,data_set)L=size(network.W)A,delta=error_deltas(NN,batch[1])A_batch=[]delta_batch=[]push!(A_batch,A)push!(delta_batch,delta)

fori=2:mini_batch_sizeA,delta=error_deltas(NN,batch[i])push!(A_batch,A)push!(delta_batch,delta)endforl=L:-1:2network.W-=(alpha/mini_batch_size)*sum(delta_batch[i][l]*A_batch[i][l-1]'fori=1:mini_batch_size)network.b-=(alpha/mini_batch_size)*sum([delta_batch[i][l]fori=1:mini_batch_size])endend

6.1.1基于Syslab的多层神经网络开发与实践训练与测试-数据准备与预处理下载并安装必要的包以获取图片读取功能。导入测试数据描述以后续工具使用为准备。importPkgPkg.add("MLDatasets")Pkg.add("Images")Pkg.add("TestImages")Pkg.add("Plots")6.1.1基于Syslab的多层神经网络开发与实践训练与测试-数据准备与预处理导入MNIST数据集,包含0-9的手写数字图片,共60000张,每张图片为28x28矩阵。6.1.1基于Syslab的多层神经网络开发与实践训练与测试-数据准备与预处理使用已经安装好的包并读取训练集和测试集数据。usingMLDatasetsusingImagesusingTestImagesusingPlots#将MLDatasets包里的数据读取为训练集train_x,train_y=MNIST.traindata()#将MLDatasets包里的数据读取为测试集test_x,test_y=MNIST.testdata()6.1.1基于Syslab的多层神经网络开发与实践训练与测试-数据准备与预处理将读取的28x28手写数字图像转换为1x784向量,以符合神经网络处理要求,需要对图像进行预处理,同样的方式,预处理用于测试的测试集#Assumingtrain_xisa3Darraywithdimensions(height,width,num_samples)height,width,num_samples=size(train_x)

#InitializeXandYwithappropriatetypesandsizesX=Matrix{Float64}(undef,height*width,num_samples)Y=Matrix{Float64}(zeros(10,num_samples))#InitializeYwithzeros

#Reshapetrain_xandassignittoXinavectorizedmannerforiin1:num_samplesX[:,i].=train_x[:,:,i][:]#Vectorizedassignmentusing.=end#One-hotencodethelabelsdirectlyintoYinavectorizedmannerforiin1:num_samplesY[train_y[i]+1,i]=1.0end#CombineXandYtoformthetrainingdatatrain_data=[xforxinzip(eachcol(X),eachcol(Y))]6.1.1基于Syslab的多层神经网络开发与实践训练与测试-网络训练和训练结果显示在给定学习率、批大小和训练次数等超参数下,进行网络训练和学习,优化网络参数。随后可使用success_percentage函数计算准确率。#训练自建的神经网络NN,自定义超参数:#0.034为learningrate#10为batchsize#epoch=10for_=1:10mini_batch_update!(NN,10,train_data,0.034)end

6.1.1基于Syslab的多层神经网络开发与实践训练与测试-测试和测试结果显示网络训练完成后,将在测试集上评估训练好的网络性能。接着,我们将定义一个名为show_test_example的函数,用于展示测试图像及其分类结果。#测试并显示正确率success_percentage(NN,test_data)functionshow_test_img(i)colorview(Gray,test_x[:,:,i]')endfunctionshow_test_example(network::neural_network,i::Int64,testing_data)println("PredictedLabel:",predict(network,test_data[i]))println("ActualLabel:",argmax(testing_data[i][2]-1))show_test_img(i)end#以下随机显示10张预测结果i=rand([xforx=1:10])show_test_example(NN,i,test_data)6.1.1基于Syslab的多层神经网络开发与实践训练与测试-测试和测试结果显示由下图给出的10个随机选图的测试图像及其预测结果可以看出,除第一行第三个识别错误外(误将2识别为4),其他图像的测试结果全部正确。需求分析与说明介绍基于Python库的Syslab深度学习工具箱开发与实践。主要步骤包括:a.构建Syslab工具箱。b.使用Julia调用Python定义功能函数,封装深度学习框架功能。Syslab工具箱构建即为基于Julia语言的函数库开发,可参考3.3.2中的开发流程。重点介绍在Syslab平台中如何通过Julia调用Python深度学习框架,封装功能函数,构建深度学习工具箱。使用Cifar_10数据集二分类案例演示深度学习工具箱的训练应用流程。6.1.2基于Python库的Syslab深度学习工具箱开发与实践Julia调用Python深度学习框架在Syslab平台中,可通过pyimport和@pyimport调用Python库中的函数6.1.2基于Python库的Syslab深度学习工具箱开发与实践usingPyCallusingTyPlot#case1math=pyimport("math")v=math.sin(pi/2)println("v=$v")#v=1.0#case2@pyimportnumpyasnpx=np.linspace(0,

2π,

1000)y=np.sin(x)plot(x,y)Julia调用Python深度学习框架在Syslab中调用Python代码文件通常包括将路径添加到Python工作目录、导入Python文件以及调用Python接口这三个步骤。6.1.2基于Python库的Syslab深度学习工具箱开发与实践Julia调用Python深度学习框架过@pydef来创建一个Python类,其方法是用Julia实现的6.1.2基于Python库的Syslab深度学习工具箱开发与实践usingPyCall#python代码py"""importnumpy.polynomialclassDoubler(numpy.polynomial.Polynomial):def__init__(self,x=10):self.x=xdefmy_method(self,arg1):

returnarg1+

20@propertydefx2(self):

returnself.x*

2@x2.setterdefx2(self,new_val):self.x=new_val/

2print(Doubler().x2)

#20"""#与上面等价的写法:#@pydef:创建一个python类,其方法是用julia实现的P=pyimport("numpy.polynomial")@pydefmutablestructDoubler<:P.Polynomial__init__(self,x=

10)

=

(self.x=x)my_method(self,arg1::Number)

=arg1+

20x2.get(self)

=self.x*

2x2.set!(self,new_val)

=

(self.x=new_val/

2)endd=Doubler()println(d.x2)

#20d.x2=

10println(d.x)

#5d.x=

15println(d.x2)

#30深度学习工具箱调用效果展示-调用Mindspore函数接口定义函数这段代码定义了convolutionidLayer函数,用于创建卷积神经网络层,参数解释如下:NumChannels:输入张量通道数。NumFilters:卷积核数量。FilterSize:卷积核大小。Stride:卷积操作步幅,默认为1。PaddingMode:填充模式,默认为"same"(零填充),可选"valid"和"zeros"。PaddingSize:填充大小,默认为0。DilationFactor:空洞卷积扩张因子,默认为1。Bias:是否添加偏置项,默认为false。WeightsInitializer:权重初始化方法,默认"normal"(正态分布),可选"zeros"和"ones"。BiasInitializer:偏置项初始化方法,默认"zeros",可选"zeros"和"ones"。6.1.2基于Python库的Syslab深度学习工具箱开发与实践深度学习工具箱调用效果展示-调用自定义Python代码定义函数这段代码定义了SequentialCell函数,用于创建顺序模型,参数解释如下:layers:包含网络层的列表或元组。函数功能:根据给定的网络层列表或元组创建顺序模型。若layers为空,则返回空顺序模型;若layers的第一个元素是元组,则转换为有序字典传递给nn.SequentialCell()函数创建顺序模型;否则,直接传递layers给nn.SequentialCell()函数创建顺序模型。NetworkLayer_M:自定义模块,包含SequentialCell函数定义。确保正确导入该模块,并nn是Mindspore深度学习框架的命名空间。6.1.2基于Python库的Syslab深度学习工具箱开发与实践应用实例-数据集简介CIFAR-10是一个包含10个类别的彩色图像数据集,用于识别普适物体。包括类别:飞机、汽车、鸟类、猫、鹿、狗、蛙类、马、船和卡车。每张图片尺寸为32×32,每类别有6000张图像。训练集包含50000张图片,测试集包含10000张图片。6.1.2基于Python库的Syslab深度学习工具箱开发与实践应用实例-训练过程读取CIFAR-10训练集数据,选取CIFAR-10中的airplane与automobile两个类别图片作为训练集。读取的图片数据维度为(N,H,W,C),由于卷积层的输入维度要求为(N,C,H,W),将其进行维度转换6.1.2基于Python库的Syslab深度学习工具箱开发与实践应用实例-训练过程使用SequentialCell构建卷积神经网络,包括两个卷积层,每层后接最大池化层和rule激活函数层,最后通过全连接层和softmax激活函数层实现两类别图像特征分类。6.1.2基于Python库的Syslab深度学习工具箱开发与实践应用实例-训练过程使用trainingOptions函数设置训练参数:损失函数为CrossEntropyLoss,优化器为Adam,评价指标为准确率Accuracy,Batch_size为500,Epoch为100,学习率为0.0001,训练数据打乱。6.1.2基于Python库的Syslab深度学习工具箱开发与实践应用实例-训练过程使用trainNetwork训练卷积神经网络,输入train_data和train_label作为训练集,layers作为神经网络结构,options作为训练参数,训练完成后绘制Loss曲线6.1.2基于Python库的Syslab深度学习工具箱开发与实践应用实例-测试过程导入CIFAR-10测试集数据,包括每个类别1000张图片,总共10000张图片。选择airplane和automobile两个类别数据进行推理预测,计算准确率评估模型效果。在测试集上,模型获得94.85%的准确率,验证了训练流程和模型有效性6.1.2基于Python库的Syslab深度学习工具箱开发与实践应用实例-测试过程从测试集中随机抽取9张图片进行展示,并标注识别的类别6.1.2基于Python库的Syslab深度学习工具箱开发与实践随机抽取9张测试集图片进行展示随机抽取的测试图片预测结果示例02机械运动模型库开发1.需求分析2.机械运动模型库开发

机械组件库的需求目标是基于业务需求、架构需求、功能需求、性能需求、接口需求、运行环境需求和非功能性需求等多个方面来确保实现一个高效、可靠且易于使用的机械组件库。业务需求方面:旨在满足各种机械系统的需求,提供可靠且高效的机械组件。从架构需求方面:需要具备模块化、可扩展和可重用的设计架构,以便开发人员可以方便地进行定位和使用。从功能需求:需要提供弹簧阻尼器、机械间隙、减速器等一系列机械组件,并确保它们的功能正常且稳定。从性能需求:需要确保机械组件的性能满足系统要求,包括求解精度和效率等方面。从接口需求:需要定义机械组件之间的接口规范,确保组件的相互兼容和无缝集成。从运行环境需求:需要在规定的软件和硬件环境下稳定运行。从非功能性需求:需要具备良好的稳定性、兼容性、可扩展性和易用性,以提高系统的稳定性和用户体验。2.架构设计机械组件库考虑能够满足用户更快捷定位和使用要求,并根据机械设备功能进行划分。主要提供了机械系统构成所需的一维转动和一维平动的零部件模型包括:刹车器离合器质量块摩擦受力弹簧阻尼激励源传感器设备模

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论