人工智能指的是一系列使机器能够像人类一样处理信息的技术;机器学习是利用计算机编程从历史数据中学习,对新数据进行预测的过程;神经网络是基于生物大脑结构和特征的机器学习的计算机模型;深度学习是机器学习的一个子集,它处理大量的非结构化数据,如人类的语音、文本和图像。 因此,这些概念在层次上是相互依存的,人工智能是最广泛的术语,而深度学习是最具体的: 为了大家能够对人工智能常用的Python库有一个初步的了解,以选择能够满足自己需求的库进行学习,对目前较为常见的人工智能库进行简要全面的介绍。 Python常用机器学习及深度学习库介绍1、Numpy NumPy(NumericalPython)是Python的一个扩展程序库,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库,Numpy底层使用C语言编写,数组中直接存储对象,而不是存储对象指针,所以其运算效率远高于纯Python代码。 我们可以在示例中对比下纯Python与使用Numpy库在计算列表sin值的速度对比:importnumpyasnpimportmathimportrandomimporttimestarttime。time()foriinrange(10):list1list(range(1,10000))forjinrange(len(list1)):list1〔j〕math。sin(list1〔j〕)print(使用纯Python用时{}s。format(time。time()start))starttime。time()foriinrange(10):list1np。array(np。arange(1,10000))list1np。sin(list1)print(使用Numpy用时{}s。format(time。time()start)) 从如下运行结果,可以看到使用Numpy库的速度快于纯Python编写的代码:使用纯Python用时0。017444372177124023s使用Numpy用时0。001619577407836914s2、OpenCV OpenCV是一个的跨平台计算机视觉库,可以运行在Linux、Windows和MacOS操作系统上。它轻量级而且高效由一系列C函数和少量C类构成,同时也提供了Python接口,实现了图像处理和计算机视觉方面的很多通用算法。 下面代码尝试使用一些简单的滤镜,包括图片的平滑处理、高斯模糊等:importnumpyasnpimportcv2ascvfrommatplotlibimportpyplotaspltimgcv。imread(h89817032p0。png)kernelnp。ones((5,5),np。float32)25dstcv。filter2D(img,1,kernel)blur1cv。GaussianBlur(img,(5,5),0)blur2cv。bilateralFilter(img,9,75,75)plt。figure(figsize(10,10))plt。subplot(221),plt。imshow(img〔:,:,::1〕),plt。title(Original)plt。xticks(〔〕),plt。yticks(〔〕)plt。subplot(222),plt。imshow(dst〔:,:,::1〕),plt。title(Averaging)plt。xticks(〔〕),plt。yticks(〔〕)plt。subplot(223),plt。imshow(blur1〔:,:,::1〕),plt。title(Gaussian)plt。xticks(〔〕),plt。yticks(〔〕)plt。subplot(224),plt。imshow(blur1〔:,:,::1〕),plt。title(Bilateral)plt。xticks(〔〕),plt。yticks(〔〕)plt。show() 可以参考OpenCV图像处理基础(变换和去噪),了解更多OpenCV图像处理操作。3、Scikitimage scikitimage是基于scipy的图像处理库,它将图片作为numpy数组进行处理。 例如,可以利用scikitimage改变图片比例,scikitimage提供了rescale、resize以及downscalelocalmean等函数。fromskimageimportdata,color,iofromskimage。transformimportrescale,resize,downscalelocalmeanimagecolor。rgb2gray(io。imread(h89817032p0。png))imagerescaledrescale(image,0。25,antialiasingFalse)imageresizedresize(image,(image。shape〔0〕4,image。shape〔1〕4),antialiasingTrue)imagedownscaleddownscalelocalmean(image,(4,3))plt。figure(figsize(20,20))plt。subplot(221),plt。imshow(image,cmapgray),plt。title(Original)plt。xticks(〔〕),plt。yticks(〔〕)plt。subplot(222),plt。imshow(imagerescaled,cmapgray),plt。title(Rescaled)plt。xticks(〔〕),plt。yticks(〔〕)plt。subplot(223),plt。imshow(imageresized,cmapgray),plt。title(Resized)plt。xticks(〔〕),plt。yticks(〔〕)plt。subplot(224),plt。imshow(imagedownscaled,cmapgray),plt。title(Downscaled)plt。xticks(〔〕),plt。yticks(〔〕)plt。show() 4、PythonImagingLibrary(PIL) PythonImagingLibrary(PIL)已经成为Python事实上的图像处理标准库了,这是由于,PIL功能非常强大,但API却非常简单易用。 但是由于PIL仅支持到Python2。7,再加上年久失修,于是一群志愿者在PIL的基础上创建了兼容的版本,名字叫Pillow,支持最新Python3。x,又加入了许多新特性,因此,我们可以跳过PIL,直接安装使用Pillow。5、Pillow 使用Pillow生成字母验证码图片:fromPILimportImage,ImageDraw,ImageFont,ImageFilterimportrandom随机字母:defrndChar():returnchr(random。randint(65,90))随机颜色1:defrndColor():return(random。randint(64,255),random。randint(64,255),random。randint(64,255))随机颜色2:defrndColor2():return(random。randint(32,127),random。randint(32,127),random。randint(32,127))240x60:width606height606imageImage。new(RGB,(width,height),(255,255,255))创建Font对象:fontImageFont。truetype(usrsharefontswpsofficesimhei。ttf,60)创建Draw对象:drawImageDraw。Draw(image)填充每个像素:forxinrange(width):foryinrange(height):draw。point((x,y),fillrndColor())输出文字:fortinrange(6):draw。text((60t10,150),rndChar(),fontfont,fillrndColor2())模糊:imageimage。filter(ImageFilter。BLUR)image。save(code。jpg,jpeg) 6、SimpleCV SimpleCV是一个用于构建计算机视觉应用程序的开源框架。使用它,可以访问高性能的计算机视觉库,如OpenCV,而不必首先了解位深度、文件格式、颜色空间、缓冲区管理、特征值或矩阵等术语。但其对于Python3的支持很差很差,在Python3。7中使用如下代码:fromSimpleCVimportImage,Color,DisplayloadanimagefromimgurimgImage(http:i。imgur。comlfAeZ4n。png)useakeypointdetectortofindareasofinterestfeatsimg。findKeypoints()drawthelistofkeypointsfeats。draw(colorColor。RED)showtheresultingimage。img。show()applythestuffwefoundtotheimage。outputimg。applyLayers()savetheresults。output。save(juniperfeats。png) 会报如下错误,因此不建议在Python3中使用:SyntaxError:Missingparenthesesincalltoprint。Didyoumeanprint(unittest)?7、Mahotas Mahotas是一个快速计算机视觉算法库,其构建在Numpy之上,目前拥有超过100种图像处理和计算机视觉功能,并在不断增长。 使用Mahotas加载图像,并对像素进行操作:importnumpyasnpimportmahotasimportmahotas。demosfrommahotas。thresholdingimportsoftthresholdfrommatplotlibimportpyplotaspltfromosimportpathfmahotas。demos。load(lena,asgreyTrue)ff〔128:,128:〕plt。gray()Showthedata:print(Fractionofzerosinoriginalimage:{0}。format(np。mean(f0)))plt。imshow(f)plt。show() 8、Ilastik Ilastik能够给用户提供良好的基于机器学习的生物信息图像分析服务,利用机器学习算法,轻松地分割,分类,跟踪和计数细胞或其他实验数据。大多数操作都是交互式的,并不需要机器学习专业知识。9、Scikitlearn Scikitlearn是针对Python编程语言的免费软件机器学习库。它具有各种分类,回归和聚类算法,包括支持向量机,随机森林,梯度提升,k均值和DBSCAN等多种机器学习算法。 使用Scikitlearn实现KMeans算法:importtimeimportnumpyasnpimportmatplotlib。pyplotaspltfromsklearn。clusterimportMiniBatchKMeans,KMeansfromsklearn。metrics。pairwiseimportpairwisedistancesargminfromsklearn。datasetsimportmakeblobsGeneratesampledatanp。random。seed(0)batchsize45centers〔〔1,1〕,〔1,1〕,〔1,1〕〕nclusterslen(centers)X,labelstruemakeblobs(nsamples3000,centerscenters,clusterstd0。7)ComputeclusteringwithMeanskmeansKMeans(initkmeans,nclusters3,ninit10)t0time。time()kmeans。fit(X)tbatchtime。time()t0ComputeclusteringwithMiniBatchKMeansmbkMiniBatchKMeans(initkmeans,nclusters3,batchsizebatchsize,ninit10,maxnoimprovement10,verbose0)t0time。time()mbk。fit(X)tminibatchtime。time()t0Plotresultfigplt。figure(figsize(8,3))fig。subplotsadjust(left0。02,right0。98,bottom0。05,top0。9)colors〔4EACC5,FF9C34,4E9A06〕WewanttohavethesamecolorsforthesameclusterfromtheMiniBatchKMeansandtheKMeansalgorithm。Letspairtheclustercentersperclosestone。kmeansclustercenterskmeans。clustercentersorderpairwisedistancesargmin(kmeans。clustercenters,mbk。clustercenters)mbkmeansclustercentersmbk。clustercenters〔order〕kmeanslabelspairwisedistancesargmin(X,kmeansclustercenters)mbkmeanslabelspairwisedistancesargmin(X,mbkmeansclustercenters)KMeansfork,colinzip(range(nclusters),colors):mymemberskmeanslabelskclustercenterkmeansclustercenters〔k〕plt。plot(X〔mymembers,0〕,X〔mymembers,1〕,w,markerfacecolorcol,marker。)plt。plot(clustercenter〔0〕,clustercenter〔1〕,o,markerfacecolorcol,markeredgecolork,markersize6)plt。title(KMeans)plt。xticks(())plt。yticks(())plt。show() 10、SciPy SciPy库提供了许多用户友好和高效的数值计算,如数值积分、插值、优化、线性代数等。 SciPy库定义了许多数学物理的特殊函数,包括椭圆函数、贝塞尔函数、伽马函数、贝塔函数、超几何函数、抛物线圆柱函数等等。fromscipyimportspecialimportmatplotlib。pyplotaspltimportnumpyasnpdefdrumheadheight(n,k,distance,angle,t):kthzerospecial。jnzeros(n,k)〔1〕returnnp。cos(t)np。cos(nangle)special。jn(n,distancekthzero)thetanp。r〔0:2np。pi:50j〕radiusnp。r〔0:1:50j〕xnp。array(〔rnp。cos(theta)forrinradius〕)ynp。array(〔rnp。sin(theta)forrinradius〕)znp。array(〔drumheadheight(1,1,r,theta,0。5)forrinradius〕)figplt。figure()axfig。addaxes(rect(0,0。05,0。95,0。95),projection3d)ax。plotsurface(x,y,z,rstride1,cstride1,cmapRdBur,vmin0。5,vmax0。5)ax。setxlabel(X)ax。setylabel(Y)ax。setxticks(np。arange(1,1。1,0。5))ax。setyticks(np。arange(1,1。1,0。5))ax。setzlabel(Z)plt。show() 11、NLTK NLTK是构建Python程序以处理自然语言的库。它为50多个语料库和词汇资源(如WordNet)提供了易于使用的接口,以及一套用于分类、分词、词干、标记、解析和语义推理的文本处理库、工业级自然语言处理(NaturalLanguageProcessing,NLP)库的包装器。 NLTK被称为awonderfultoolforteaching,andworkingin,computationallinguisticsusingPython。importnltkfromnltk。corpusimporttreebank首次使用需要下载nltk。download(punkt)nltk。download(averagedperceptrontagger)nltk。download(maxentnechunker)nltk。download(words)nltk。download(treebank)sentenceAteightoclockonThursdaymorningArthurdidntfeelverygood。Tokenizetokensnltk。wordtokenize(sentence)taggednltk。postag(tokens)Identifynamedentitiesentitiesnltk。chunk。nechunk(tagged)Displayaparsetreettreebank。parsedsents(wsj0001。mrg)〔0〕t。draw() 12、spaCy spaCy是一个免费的开源库,用于Python中的高级NLP。它可以用于构建处理大量文本的应用程序;也可以用来构建信息提取或自然语言理解系统,或者对文本进行预处理以进行深度学习。importspacytexts〔Netincomewas9。4millioncomparedtotheprioryearof2。7million。,Revenueexceededtwelvebilliondollars,withalossof1b。,〕nlpspacy。load(encorewebsm)fordocinnlp。pipe(texts,disable〔tok2vec,tagger,parser,attributeruler,lemmatizer〕):Dosomethingwiththedochereprint(〔(ent。text,ent。label)forentindoc。ents〕) nlp。pipe生成Doc对象,因此我们可以对它们进行迭代并访问命名实体预测:〔(9。4million,MONEY),(theprioryear,DATE),(2。7million,MONEY)〕〔(twelvebilliondollars,MONEY),(1b,MONEY)〕 13、LibROSA librosa是一个用于音乐和音频分析的Python库,它提供了创建音乐信息检索系统所必需的功能和函数。Beattrackingexampleimportlibrosa1。Getthefilepathtoanincludedaudioexamplefilenamelibrosa。example(nutcracker)2。LoadtheaudioasawaveformyStorethesamplingrateassry,srlibrosa。load(filename)3。Runthedefaultbeattrackertempo,beatframeslibrosa。beat。beattrack(yy,srsr)print(Estimatedtempo:{:。2f}beatsperminute。format(tempo))4。Converttheframeindicesofbeateventsintotimestampsbeattimeslibrosa。framestotime(beatframes,srsr)14、Pandas Pandas是一个快速、强大、灵活且易于使用的开源数据分析和操作工具,Pandas可以从各种文件格式比如CSV、JSON、SQL、MicrosoftExcel导入数据,可以对各种数据进行运算操作,比如归并、再成形、选择,还有数据清洗和数据加工特征。Pandas广泛应用在学术、金融、统计学等各个数据分析领域。importmatplotlib。pyplotaspltimportpandasaspdimportnumpyasnptspd。Series(np。random。randn(1000),indexpd。daterange(112000,periods1000))tsts。cumsum()dfpd。DataFrame(np。random。randn(1000,4),indexts。index,columnslist(ABCD))dfdf。cumsum()df。plot()plt。show() 15、Matplotlib Matplotlib是Python的绘图库,它提供了一整套和matlab相似的命令API,可以生成出版质量级别的精美图形,Matplotlib使绘图变得非常简单,在易用性和性能间取得了优异的平衡。 使用Matplotlib绘制多曲线图:plotmulticurve。pyimportnumpyasnpimportmatplotlib。pyplotaspltxnp。linspace(0。1,2np。pi,100)y1xy2np。square(x)y3np。log(x)y4np。sin(x)plt。plot(x,y1)plt。plot(x,y2)plt。plot(x,y3)plt。plot(x,y4)plt。show() 16、Seaborn Seaborn是在Matplotlib的基础上进行了更高级的API封装的Python数据可视化库,从而使得作图更加容易,应该把Seaborn视为Matplotlib的补充,而不是替代物。importseabornassnsimportmatplotlib。pyplotaspltsns。settheme(styleticks)dfsns。loaddataset(penguins)sns。pairplot(df,huespecies)plt。show() 17、Orange Orange是一个开源的数据挖掘和机器学习软件,提供了一系列的数据探索、可视化、预处理以及建模组件。Orange拥有漂亮直观的交互式用户界面,非常适合新手进行探索性数据分析和可视化展示;同时高级用户也可以将其作为Python的一个编程模块进行数据操作和组件开发。 使用pip即可安装Orange,好评pipinstallorange3 安装完成后,在命令行输入orangecanvas命令即可启动Orange图形界面:orangecanvas 启动完成后,即可看到Orange图形界面,进行各种操作。 18、PyBrain PyBrain是Python的模块化机器学习库。它的目标是为机器学习任务和各种预定义的环境提供灵活、易于使用且强大的算法来测试和比较算法。PyBrain是PythonBasedReinforcementLearning,ArtificialIntelligenceandNeuralNetworkLibrary的缩写。 我们将利用一个简单的例子来展示PyBrain的用法,构建一个多层感知器(MultiLayerPerceptron,MLP)。 首先,我们创建一个新的前馈网络对象:frompybrain。structureimportFeedForwardNetworknFeedForwardNetwork() 接下来,构建输入、隐藏和输出层:frompybrain。structureimportLinearLayer,SigmoidLayerinLayerLinearLayer(2)hiddenLayerSigmoidLayer(3)outLayerLinearLayer(1) 为了使用所构建的层,必须将它们添加到网络中:n。addInputModule(inLayer)n。addModule(hiddenLayer)n。addOutputModule(outLayer) 可以添加多个输入和输出模块。为了向前计算和反向误差传播,网络必须知道哪些层是输入、哪些层是输出。 这就需要明确确定它们应该如何连接。为此,我们使用最常见的连接类型,全连接层,由FullConnection类实现:frompybrain。structureimportFullConnectionintohiddenFullConnection(inLayer,hiddenLayer)hiddentooutFullConnection(hiddenLayer,outLayer) 与层一样,我们必须明确地将它们添加到网络中:n。addConnection(intohidden)n。addConnection(hiddentoout) 所有元素现在都已准备就位,最后,我们需要调用。sortModules()方法使MLP可用:n。sortModules() 这个调用会执行一些内部初始化,这在使用网络之前是必要的。19、Milk MILK(MACHINELEARNINGTOOLKIT)是Python语言的机器学习工具包。它主要是包含许多分类器比如SVMS、KNN、随机森林以及决策树中使用监督分类法,它还可执行特征选择,可以形成不同的例如无监督学习、密切关系传播和由MILK支持的Kmeans聚类等分类系统。 使用MILK训练一个分类器:importnumpyasnpimportmilkfeaturesnp。random。rand(100,10)labelsnp。zeros(100)features〔50:〕。5labels〔50:〕1learnermilk。defaultclassifier()modellearner。train(features,labels)Nowyoucanusethemodelonnewexamples:examplenp。random。rand(10)print(model。apply(example))example2np。random。rand(10)example2。5print(model。apply(example2))20、TensorFlow TensorFlow是一个端到端开源机器学习平台。它拥有一个全面而灵活的生态系统,一般可以将其分为TensorFlow1。x和TensorFlow2。x,TensorFlow1。x与TensorFlow2。x的主要区别在于TF1。x使用静态图而TF2。x使用EagerMode动态图。 这里主要使用TensorFlow2。x作为示例,展示在TensorFlow2。x中构建卷积神经网络(ConvolutionalNeuralNetwork,CNN)。importtensorflowastffromtensorflow。kerasimportdatasets,layers,models数据加载(trainimages,trainlabels),(testimages,testlabels)datasets。cifar10。loaddata()数据预处理trainimages,testimagestrainimages255。0,testimages255。0模型构建modelmodels。Sequential()model。add(layers。Conv2D(32,(3,3),activationrelu,inputshape(32,32,3)))model。add(layers。MaxPooling2D((2,2)))model。add(layers。Conv2D(64,(3,3),activationrelu))model。add(layers。MaxPooling2D((2,2)))model。add(layers。Conv2D(64,(3,3),activationrelu))model。add(layers。Flatten())model。add(layers。Dense(64,activationrelu))model。add(layers。Dense(10))模型编译与训练model。compile(optimizeradam,losstf。keras。losses。SparseCategoricalCrossentropy(fromlogitsTrue),metrics〔accuracy〕)historymodel。fit(trainimages,trainlabels,epochs10,validationdata(testimages,testlabels))21、PyTorch PyTorch的前身是Torch,其底层和Torch框架一样,但是使用Python重新写了很多内容,不仅更加灵活,支持动态图,而且提供了Python接口。导入库importtorchfromtorchimportnnfromtorch。utils。dataimportDataLoaderfromtorchvisionimportdatasetsfromtorchvision。transformsimportToTensor,Lambda,Composeimportmatplotlib。pyplotasplt模型构建devicecudaiftorch。cuda。isavailable()elsecpuprint(Using{}device。format(device))DefinemodelclassNeuralNetwork(nn。Module):definit(self):super(NeuralNetwork,self)。init()self。flattennn。Flatten()self。linearrelustacknn。Sequential(nn。Linear(2828,512),nn。ReLU(),nn。Linear(512,512),nn。ReLU(),nn。Linear(512,10),nn。ReLU())defforward(self,x):xself。flatten(x)logitsself。linearrelustack(x)returnlogitsmodelNeuralNetwork()。to(device)损失函数和优化器lossfnnn。CrossEntropyLoss()optimizertorch。optim。SGD(model。parameters(),lr1e3)模型训练deftrain(dataloader,model,lossfn,optimizer):sizelen(dataloader。dataset)forbatch,(X,y)inenumerate(dataloader):X,yX。to(device),y。to(device)Computepredictionerrorpredmodel(X)losslossfn(pred,y)Backpropagationoptimizer。zerograd()loss。backward()optimizer。step()ifbatch1000:loss,currentloss。item(),batchlen(X)print(floss:{loss:7f}〔{current:5d}{size:5d}〕)22、Theano Theano是一个Python库,它允许定义、优化和有效地计算涉及多维数组的数学表达式,建在NumPy之上。 在Theano中实现计算雅可比矩阵:importtheanoimporttheano。tensorasTxT。dvector(x)yx2J,updatestheano。scan(lambdai,y,x:T。grad(y〔i〕,x),sequencesT。arange(y。shape〔0〕),nonsequences〔y,x〕)ftheano。function(〔x〕,J,updatesupdates)f(〔4,4〕)23、Keras Keras是一个用Python编写的高级神经网络API,它能够以TensorFlow,CNTK,或者Theano作为后端运行。Keras的开发重点是支持快速的实验,能够以最小的时延把想法转换为实验结果。fromkeras。modelsimportSequentialfromkeras。layersimportDense模型构建modelSequential()model。add(Dense(units64,activationrelu,inputdim100))model。add(Dense(units10,activationsoftmax))模型编译与训练model。compile(losscategoricalcrossentropy,optimizersgd,metrics〔accuracy〕)model。fit(xtrain,ytrain,epochs5,batchsize32)24、Caffe 在Caffe2官方网站上,这样说道:Caffe2现在是PyTorch的一部分。虽然这些api将继续工作,但鼓励使用PyTorchapi。25、MXNet MXNet是一款设计为效率和灵活性的深度学习框架。它允许混合符号编程和命令式编程,从而最大限度提高效率和生产力。 使用MXNet构建手写数字识别模型:importmxnetasmxfrommxnetimportgluonfrommxnet。gluonimportnnfrommxnetimportautogradasagimportmxnet。ndarrayasF数据加载mnistmx。testutils。getmnist()batchsize100traindatamx。io。NDArrayIter(mnist〔traindata〕,mnist〔trainlabel〕,batchsize,shuffleTrue)valdatamx。io。NDArrayIter(mnist〔testdata〕,mnist〔testlabel〕,batchsize)CNN模型classNet(gluon。Block):definit(self,kwargs):super(Net,self)。init(kwargs)self。conv1nn。Conv2D(20,kernelsize(5,5))self。pool1nn。MaxPool2D(poolsize(2,2),strides(2,2))self。conv2nn。Conv2D(50,kernelsize(5,5))self。pool2nn。MaxPool2D(poolsize(2,2),strides(2,2))self。fc1nn。Dense(500)self。fc2nn。Dense(10)defforward(self,x):xself。pool1(F。tanh(self。conv1(x)))xself。pool2(F。tanh(self。conv2(x)))0meanscopyoversizefromcorrespondingdimension。1meansinfersizefromtherestofdimensions。xx。reshape((0,1))xF。tanh(self。fc1(x))xF。tanh(self。fc2(x))returnxnetNet()初始化与优化器定义setthecontextonGPUisavailableotherwiseCPUctx〔mx。gpu()ifmx。testutils。listgpus()elsemx。cpu()〕net。initialize(mx。init。Xavier(magnitude2。24),ctxctx)trainergluon。Trainer(net。collectparams(),sgd,{learningrate:0。03})模型训练UseAccuracyastheevaluationmetric。metricmx。metric。Accuracy()softmaxcrossentropylossgluon。loss。SoftmaxCrossEntropyLoss()foriinrange(epoch):Resetthetraindataiterator。traindata。reset()forbatchintraindata:datagluon。utils。splitandload(batch。data〔0〕,ctxlistctx,batchaxis0)labelgluon。utils。splitandload(batch。label〔0〕,ctxlistctx,batchaxis0)outputs〔〕Insidetrainingscopewithag。record():forx,yinzip(data,label):znet(x)Computessoftmaxcrossentropyloss。losssoftmaxcrossentropyloss(z,y)Backpropogatetheerrorforoneiteration。loss。backward()outputs。append(z)metric。update(label,outputs)trainer。step(batch。data〔0〕。shape〔0〕)Getstheevaluationresult。name,accmetric。get()Resetevaluationresulttoinitialstate。metric。reset()print(trainingaccatepochd:sf(i,name,acc))26、PaddlePaddle 飞桨(PaddlePaddle)以百度多年的深度学习技术研究和业务应用为基础,集深度学习核心训练和推理框架、基础模型库、端到端开发套件、丰富的工具组件于一体。是中国首个自主研发、功能完备、开源开放的产业级深度学习平台。 使用PaddlePaddle实现LeNtet5:导入需要的包importpaddleimportnumpyasnpfrompaddle。nnimportConv2D,MaxPool2D,Linear组网importpaddle。nn。functionalasF定义LeNet网络结构classLeNet(paddle。nn。Layer):definit(self,numclasses1):super(LeNet,self)。init()创建卷积和池化层创建第1个卷积层self。conv1Conv2D(inchannels1,outchannels6,kernelsize5)self。maxpool1MaxPool2D(kernelsize2,stride2)尺寸的逻辑:池化层未改变通道数;当前通道数为6创建第2个卷积层self。conv2Conv2D(inchannels6,outchannels16,kernelsize5)self。maxpool2MaxPool2D(kernelsize2,stride2)创建第3个卷积层self。conv3Conv2D(inchannels16,outchannels120,kernelsize4)尺寸的逻辑:输入层将数据拉平〔B,C,H,W〕〔B,CHW〕输入size是〔28,28〕,经过三次卷积和两次池化之后,CHW等于120self。fc1Linear(infeatures120,outfeatures64)创建全连接层,第一个全连接层的输出神经元个数为64,第二个全连接层输出神经元个数为分类标签的类别数self。fc2Linear(infeatures64,outfeaturesnumclasses)网络的前向计算过程defforward(self,x):xself。conv1(x)每个卷积层使用Sigmoid激活函数,后面跟着一个2x2的池化xF。sigmoid(x)xself。maxpool1(x)xF。sigmoid(x)xself。conv2(x)xself。maxpool2(x)xself。conv3(x)尺寸的逻辑:输入层将数据拉平〔B,C,H,W〕〔B,CHW〕xpaddle。reshape(x,〔x。shape〔0〕,1〕)xself。fc1(x)xF。sigmoid(x)xself。fc2(x)returnx27、CNTK CNTK(CognitiveToolkit)是一个深度学习工具包,通过有向图将神经网络描述为一系列计算步骤。在这个有向图中,叶节点表示输入值或网络参数,而其他节点表示对其输入的矩阵运算。CNTK可以轻松地实现和组合流行的模型类型,如CNN等。 CNTK用网络描述语言(networkdescriptionlanguage,NDL)描述一个神经网络。简单的说,要描述输入的feature,输入的label,一些参数,参数和输入之间的计算关系,以及目标节点是什么。NDLNetworkBuilder〔runndlLRndlLR〔sampleandlabeldimensionsSDimdimensionLDim1featuresInput(SDim,1)labelsInput(LDim,1)parameterstolearnB0Parameter(4)W0Parameter(4,SDim)BParameter(LDim)WParameter(LDim,4)operationst0Times(W0,features)z0Plus(t0,B0)s0Sigmoid(z0)tTimes(W,s0)zPlus(t,B)sSigmoid(z)LRLogistic(labels,s)EPSquareError(labels,s)rootnodesFeatureNodes(features)LabelNodes(labels)CriteriaNodes(LR)EvalNodes(EP)OutputNodes(s,t,z,s0,W0)〕〕作者:盼小辉 原文链接:https:blog。csdn。netLOVEmy134611articledetails118761423