版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
人工智能技術(shù)開發(fā)框架計(jì)算機(jī)與軟件學(xué)院第五章深度學(xué)習(xí)框架Tensorflow201AI應(yīng)用開發(fā)概述02FlaskWEB應(yīng)用開發(fā)03數(shù)據(jù)處理與分析工具04機(jī)器學(xué)習(xí)框架Scikit-Learn05人工智能與社會(huì)倫理深度學(xué)習(xí)框架Tensorflow2Tensorflow簡介AI應(yīng)用AI模型開發(fā)應(yīng)用開發(fā)前端后端sk-learnTensorflow/pytorch/Modelarts/paddlepaddle(飛槳)百度、騰訊、阿里、華為等,AI開放平臺(tái)(AI模型)Tensorflow簡介TensorFlow起源于谷歌內(nèi)部的DisBelief平臺(tái),2015年11月9日谷歌依據(jù)Apache2.0協(xié)議將其開源TensorFlow是一個(gè)非常優(yōu)秀的深度神經(jīng)網(wǎng)絡(luò)機(jī)器開源平臺(tái),自發(fā)布以來受到人工智能研究者和工程師的熱烈追捧,在學(xué)術(shù)界和工業(yè)界迅速得到大量應(yīng)用。TensorFlow1.x經(jīng)過三年多的迭代,在2018年的GoogleCloudNext上TensorFlow團(tuán)隊(duì)宣布開啟TensorFlow2.0的迭代,2019年3月TensorFlow團(tuán)隊(duì)發(fā)布了TensorFlow2.0-Alpha版本,同年6月發(fā)布了TensorFlow2.0-Beta版本TensorFlow支持CPU和GPU作為計(jì)算資源。GPU運(yùn)行速度快,需要NVIDA運(yùn)行庫支持,運(yùn)行庫版本:CUDA10.0CuDNN7.5.0Tensorflow1.X與Tensorflow2.X的關(guān)系Tensorflow1.x對(duì)開發(fā)者很不友好,使用難度較大,2.0版本極大改善了易用性。TensorFlow2.0在TensorFlow1.x版本上進(jìn)行了大幅度改進(jìn),主要的變化如下:將Eager模式作為TensorFlow2.0默認(rèn)的運(yùn)行模式。Eager模式是一種命令行交互式的運(yùn)行環(huán)境,不用構(gòu)建Session就可以完成控制流的計(jì)算和輸出,TensorFlow1.x必須構(gòu)建Session刪除tf.contrib庫,將tf.contrib庫中的高階API和應(yīng)用整合到tf.keras庫下合并精簡API,將TensorFlow1.x中大量重復(fù)、重疊的API進(jìn)行合并精簡刪除全局變量,在TensorFlow2.0中不再有變量自動(dòng)追蹤機(jī)制,需要開發(fā)者自己實(shí)現(xiàn)對(duì)變量的追蹤。一旦丟失對(duì)變量的追蹤,變量就會(huì)被垃圾回收機(jī)制回收,不過開發(fā)者可以使用Keras對(duì)象來減輕自己的負(fù)擔(dān)確立Keras的高階API的唯一地位,在TensorFlow2.0中所有的高階API全部集中到tf.keras庫下Tensorflow2.X基本運(yùn)行模式Tensorflow2.0安裝:pipinstalltensorflow==2.0.0Tensorflow2.0導(dǎo)入:importtensorflowastfEagerExecution:動(dòng)態(tài)圖機(jī)制,是tensorflow2.0的默認(rèn)模式。而GraphExecution:靜態(tài)圖機(jī)制,是tensorflow2.0之前版本的默認(rèn)模式AutoGraph模式:支持Python原生的常用代碼。在tensorflow1.x時(shí)代,是不支持Python很多原生的代碼,如Python中的if、for語句,是tensorflow1.x所不支持的,必須使用tensorflow1.x自帶的函數(shù)tf.while、tf.cond來實(shí)現(xiàn),因此tensorflow1.x對(duì)Python用戶并不友好,而在tensorflow2.0中使用了AutoGraph模式,支持用戶使用Python原生的代碼,極大地方便了用戶的使用Tensorflow2.0系統(tǒng)架構(gòu)框架分為兩大部分,左邊為訓(xùn)練部分,右邊為模型部署Tensorflow2.0架構(gòu)說明read&preprocessdata:使用tf.data加載數(shù)據(jù)。使用輸入管道讀取訓(xùn)練數(shù)據(jù),支持NumPy內(nèi)存數(shù)據(jù)的便捷輸入,之后根據(jù)需求對(duì)數(shù)據(jù)進(jìn)行預(yù)處理操作,如數(shù)據(jù)清洗、歸一化等。tf.keras使用tf.keras:構(gòu)建、訓(xùn)練并驗(yàn)證模型。Keras提供了幾個(gè)模型構(gòu)建API(Sequential、Functional)。PremadeEstimators:TensorFLow提供了很多預(yù)先寫好的評(píng)估器,包括DNNClassifier,DNNRegressor,LinearClassifier,可以直接使用這些預(yù)訓(xùn)練的模型。TensorFlowHub:TensorFlow庫,存儲(chǔ)可重用機(jī)器學(xué)習(xí)資產(chǎn)的開放倉庫和庫,提供了許多預(yù)訓(xùn)練模型,可以下載并以最少的代碼量在TensorFlow程序中重用這些模型,即遷移學(xué)習(xí)。distributionstrategy:使用分布式策略進(jìn)行分布式訓(xùn)練。對(duì)于大型機(jī)器學(xué)習(xí)訓(xùn)練任務(wù),分布式策略API可以輕松地在不同硬件配置上分配和訓(xùn)練模型,無需更改模型的定義。TensorFlow支持各種硬件加速器,如CPU,GPU和TPU,因此用戶可以將訓(xùn)練負(fù)載分配到單節(jié)點(diǎn)/多加速器以及多節(jié)點(diǎn)/多加速器配置上。SaveModel:TensorFlow對(duì)SavedModel進(jìn)行標(biāo)準(zhǔn)化,標(biāo)準(zhǔn)化的格式是一種TensorFlowLite、TensorFlow.js等格式的可互換格式。在TensorFlow2.0中,通過標(biāo)準(zhǔn)化互換格式和API來提高跨平臺(tái)和組件的兼容性。TensorFlowServing:TensorFlow服務(wù),允許通過HTTP/REST或gRPC/協(xié)議緩沖區(qū)提供模型。TensorFlowLite:TensorFlow針對(duì)移動(dòng)和嵌入式設(shè)備的輕量級(jí)解決方案,能夠在Android,iOS和嵌入式系統(tǒng)上部署模型。TensorFlow.js:允許在JavaScript環(huán)境下部署模型,如在Web瀏覽器或服務(wù)器端通過Node.js實(shí)現(xiàn)部署。TensorFlow還支持其他語言,包括C,Java,Go,C#,Rust,Julia,R等。Tensorflow2.0開發(fā)流程Tensorflow基本數(shù)據(jù)類型Tensor的概念Tensor的基本運(yùn)算低階API高階APITensor的概念TensorFlow中的Tensor,翻譯為中文就是張量,TensorFlow就是流動(dòng)的張量。在一個(gè)TensorFlow程序中,所有的操作都是圍繞者張量的運(yùn)算、傳遞來進(jìn)行,都是基于數(shù)據(jù)流圖的計(jì)算,完成張量從數(shù)據(jù)流圖的一端流動(dòng)到另一端的計(jì)算過程。TensorFlow生動(dòng)形象地描述了復(fù)雜數(shù)據(jù)結(jié)構(gòu)在人工神經(jīng)網(wǎng)絡(luò)中的流動(dòng)、傳輸、分析和處理模式張量(Tensor):是具有統(tǒng)一類型(稱為dtype)的多維數(shù)組。所有張量都是不可變的,永遠(yuǎn)無法更新張量的內(nèi)容,只能創(chuàng)建新的張量,張量有最重要的2個(gè)屬性:形狀shape:張量的每個(gè)維度(軸)的長度(元素?cái)?shù)量),0維、1維、2維、3維等數(shù)據(jù)類型dtype:float32、int32、或者string等tensor的形狀:0維0D張量只包含一個(gè)數(shù)字,有0個(gè)維度,又稱為標(biāo)量示例代碼:rank_0_tensor=tf.constant(4)print(rank_0_tensor)運(yùn)行結(jié)果:tf.Tensor(4,shape=(),dtype=int32)tensor的形狀:1維1D張量包含一個(gè)一維數(shù)組,可以看作由0D張量組成的數(shù)組,有1個(gè)維度,又稱為向量示例代碼:rank_1_tensor=tf.constant([2.0,3.0,4.0])print(rank_1_tensor)運(yùn)行結(jié)果:tf.Tensor([2.3.4.],shape=(3,),dtype=float32)tensor的形狀:2維2D張量可以看作由1D張量組成的數(shù)組,有2個(gè)維度,又稱為矩陣示例代碼:rank_2_tensor=tf.constant([[1,2],[3,4],[5,6]],dtype=tf.float16)
print(rank_2_tensor)運(yùn)行結(jié)果:tf.Tensor([[1.2.][3.4.][5.6.]],shape=(3,2),dtype=float16)tensor的形狀:3維3D張量可以看作由2D張量組成的數(shù)組,有3個(gè)維度示例代碼:rank_3_tensor=tf.constant([[[0,1,2,3,4],
[5,6,7,8,9]],
[[10,11,12,13,14],
[15,16,17,18,19]],
[[20,21,22,23,24],
[25,26,27,28,29]],])
print(rank_3_tensor)運(yùn)行結(jié)果:tf.Tensor([[[01234][56789]]
[[1011121314][1516171819]]
[[2021222324][2526272829]]],shape=(3,2,5),dtype=int32)Tensor的基本運(yùn)算標(biāo)量運(yùn)算向量運(yùn)算矩陣運(yùn)算標(biāo)量運(yùn)算標(biāo)量運(yùn)算:對(duì)張量實(shí)施逐元素運(yùn)算,包括加、減、乘、除、乘方以及三角函數(shù)、指數(shù)、對(duì)數(shù)等常見函數(shù)示例代碼:a=tf.constant([[1,2],[3,4]])b=tf.constant([[0,0],[1,0]])print(a+b)print(a-b)print(a*b)print(a/b)向量運(yùn)算向量運(yùn)算:只在一個(gè)特定軸上運(yùn)算,將一個(gè)向量映射到一個(gè)標(biāo)量或者另外一個(gè)向量A=tf.constant([[2,20,30,3,6],[1,1,1,1,1]])print(tf.math.reduce_sum(A))print(tf.math.reduce_max(A))B=tf.constant([[2,20,30,3,6],[3,11,16,1,8],[14,45,23,5,27]])print(tf.math.reduce_sum(B,0))#沿0軸(列方向),求和print(tf.math.reduce_sum(B,1))#沿1軸(行方向),求和print(tf.math.reduce_max(B,0))#沿0軸,求最大值print(tf.math.reduce_max(B,1))#沿1軸,求最大值矩陣運(yùn)算矩陣運(yùn)算:矩陣必須是二維的,包括矩陣乘法、矩陣轉(zhuǎn)置、矩陣逆、矩陣行列式、矩陣求特征值、矩陣分解等運(yùn)算#矩陣轉(zhuǎn)置
A_trans=tf.linalg.matrix_transpose(A)
print(A_trans)
#矩陣點(diǎn)積
print(tf.linalg.matmul(B,A_trans))A=tf.constant([[2,20,30,3,6],[1,1,1,1,1]])B=tf.constant([[2,20,30,3,6],[3,11,16,1,8],[14,45,23,5,27]])低階APItf.constant():提供了常量的聲明功能tf.Variable():提供了變量的聲明功能tf.reshape():提供了多階Tensor的形狀變換功能tf.math.reduce_mean():提供了對(duì)Tensor求平均值的功能tf.random.normal():隨機(jī)生成一個(gè)Tensor,其值符合正態(tài)分布tf.random.uniform():隨機(jī)生成一個(gè)Tensor,其值符合均勻分布tf.transpose():提供了矩陣的轉(zhuǎn)置功能tf.math.argmax():提供了返回一個(gè)數(shù)組內(nèi)最大值對(duì)應(yīng)索引的功能tf.expand_dims():在輸入的Tensor中增加一個(gè)維度tf.concat():將多個(gè)Tensor在同一個(gè)維度上進(jìn)行連接tf.bitcast():提供了數(shù)據(jù)類型轉(zhuǎn)換功能tf.constant()tf.constant():提供了常量的聲明功能示例代碼:a=tf.constant(7)print(a)print(a.numpy())tf.Variable()tf.Variable():提供了變量的聲明功能示例代碼:#聲明一個(gè)Python變量a1=7#聲明一個(gè)0階Tensor變量a2=tf.Variable(7)#聲明一個(gè)1階Tensor變量,即數(shù)組a3=tf.Variable([0,1,2])print(a1,a2,a3)tf.reshape()tf.reshape():提供了多階Tensor的形狀變換功能示例代碼:a=tf.Variable([[0,1,2],[3,4,5]])print(a)#對(duì)a的形狀進(jìn)行變換,變換為(3,2)a1=tf.reshape(a,[3,2])print(a1)print(a1.shape)tf.math.reduce_mean()tf.math.reduce_mean():提供了對(duì)Tensor求平均值的功能,輸出數(shù)據(jù)類型會(huì)根據(jù)輸入數(shù)據(jù)類型來確定。使用該API時(shí)可以配置的參數(shù)如下:input_tensor:配置輸入的Tensoraxis:配置按行求平均值或按列求平均值,默認(rèn)是全行全列求平均值keepdims:配置輸出結(jié)果是否保持二維矩陣特性name:配置操作的名稱示例代碼:a=tf.constant([1,2.,3,4,5,6,7.])#輸入數(shù)據(jù)類型是float32,輸出數(shù)據(jù)類型也是float32print(a.dtype)print(tf.math.reduce_mean(a))b=tf.constant([[1,2,1],[5,2,10]])#輸入數(shù)據(jù)類型是int32,輸出數(shù)據(jù)類型也是int32print(b.dtype)#雖然平均值為3.5,但是由于上面確定了輸出類型為整型,因此強(qiáng)制賦值為整數(shù)3print(tf.math.reduce_mean(b))tf.random.normal()tf.random.normal():隨機(jī)生成一個(gè)Tensor,其值符合正態(tài)分布。使用該API時(shí)有如下參數(shù)需要配置:shape:配置生成Tensor的維度mean:配置正態(tài)分布的中心值stddev:配置正態(tài)分布的標(biāo)準(zhǔn)差seed:配置正態(tài)分布的隨機(jī)生成粒子dtype:配置生成Tensor的數(shù)據(jù)類型示例代碼:a=tf.random.normal(shape=[2,3],mean=2)print(a)#a為Tensor類型,是一個(gè)2維張量Tensorprint(type(a))#type()方法是Python的原生方法,查看Tensor對(duì)象a的類型,是一個(gè)Tensorprint(a.dtype)#由于a是Tensor類型,因此可以使用Tensor對(duì)象的dtype屬性print(a.numpy())#a轉(zhuǎn)換成numpy的array數(shù)組類型,就是普通的數(shù)組類型print(type(a.numpy()))tf.random.uniform()tf.random.uniform():隨機(jī)生成一個(gè)Tensor,其值符合均勻分布。使用該API時(shí)有如下參數(shù)需要配置:shape:配置生成Tensor的維度minval:配置隨機(jī)生成數(shù)值的最小值maxval:配置隨機(jī)生成數(shù)值的最大值seed:配置正態(tài)分布的隨機(jī)生成粒子dtype:配置生成Tensor的數(shù)據(jù)類型示例代碼:a=tf.random.uniform(shape=[2,3],minval=1,maxval=10,seed=8,dtype=32)print(a.numpy())tf.transpose()tf.transpose():提供了矩陣的轉(zhuǎn)置功能。使用該API時(shí)配置的參數(shù)如下:a:輸入需要轉(zhuǎn)置的矩陣perm:配置轉(zhuǎn)置后矩陣的形狀conjugate:當(dāng)輸入矩陣是復(fù)數(shù)時(shí),需要配置為Truename:配置本次操作的名稱示例代碼:#定義x為一個(gè)3維張量,形狀是(2,2,3)x=tf.constant([[[1,2,3],[4,5,6]],[[7,8,9],[10,11,12]]])#轉(zhuǎn)置后的形狀是(2,3,2)a=tf.transpose(x,perm=[0,2,1])print(a.numpy())tf.transpose(a,perm=[dimension_1,dimenaion_2,..,dimension_n]):dimension_n是整數(shù),每個(gè)數(shù)對(duì)應(yīng)相應(yīng)的維度,用0,1,2來表示。這個(gè)函數(shù)主要適用于交換輸入張量的不同維度用的。如果a是二維,就相當(dāng)是轉(zhuǎn)置。如果a是三維,那么perm=[2,1,0],就把輸入張量的第三維度和第一維度交換。tf.math.argmax()tf.math.argmax():提供了返回一個(gè)數(shù)組內(nèi)最大值對(duì)應(yīng)索引的功能。使用該API時(shí)有如下參數(shù)可以配置:input:配置輸入的數(shù)組axis:配置計(jì)算的維度output_type:配置輸出的格式name:配置操作的名稱示例代碼:a=tf.constant([1,2,3,4,5])x=tf.math.argmax(a)print(x.numpy())tf.expand_dims()tf.expand_dims():在輸入的Tensor中增加一個(gè)維度,比如t是一個(gè)維度為[2]的Tensor,那么tf.expand_dims(t,0)的維度就會(huì)變成[1,2]。使用這個(gè)API時(shí)需要配置如下參數(shù):input:配置輸入的Tensoraxis:配置需要添加維度的下標(biāo),比如[2,1]需要在2和1之間添加,則配置值為1name:配置輸出Tensor的名稱示例代碼:#初始化一個(gè)維度為(3,1)的Tensora=tf.constant([[1],[2],[3]])print(a.shape)print(a)#為a增加一個(gè)維度,使其維度變成(1,3,1)b=tf.expand_dims(a,0)print(b.shape)print(b)tf.concat()tf.concat():將多個(gè)Tensor在同一個(gè)維度上進(jìn)行連接,使用該API時(shí)需要進(jìn)行如下參數(shù)配置:values:配置Tensor的列表或者是一個(gè)單獨(dú)的Tensoraxis:配置按行或按列連接,axis=0表示按行連接,axis=1表示按列連接name:配置運(yùn)算操作的名稱示例代碼:a1=tf.constant([[2,3,4],[4,5,6],[2,3,4]])a2=tf.constant([[1,2,2],[6,7,9],[2,3,2]])#按行進(jìn)行連接b=tf.concat([a1,a2],axis=0)print(b.numpy())tf.bitcast()tf.bitcast():提供了數(shù)據(jù)類型轉(zhuǎn)換功能,使用該API時(shí)需要進(jìn)行如下參數(shù)配置:input:配置需要進(jìn)行類型轉(zhuǎn)換的Tensor,Tensor的類型可以為bfloat16,half,float32,float64,int64,int32,uint8,uint16,uint32,uint64,int8,int16,complex64,complex128,qint8,quint8,qint16,quint16,qint32type:配置轉(zhuǎn)換后的數(shù)據(jù)類型,可以選擇的類型包括tf.bfloat16,tf.half,tf.float32,tf.float64,64,32,tf.uint8,tf.uint16,tf.uint32,tf.uint64,8,16,plex64,plex128,tf.qint8,tf.quint8,tf.qint16,tf.quint16,tf.qint32name:配置運(yùn)算操作的名稱示例代碼:#a原本是浮點(diǎn)類型float32類型a=tf.constant(32.0)#將a轉(zhuǎn)換成整型int32b=tf.bitcast(a,type=32)print(a.dtype)print(b.dtype)Tensorflow高階API(tf.keras)Tensorflow2官方API參考://post/tf2doc.html高階API指的是對(duì)TensorFlow低階API的進(jìn)一步高層封裝,tf.keras是TensorFlow的高階API,使用方法為tf.keras.API。高階API是對(duì)低階API的高層封裝,調(diào)用高階API后,底層執(zhí)行的仍然是低階API能力在TensorFlow2.0版本中,官方推薦的高階API只有tf.keras。Keras是一個(gè)意在降低機(jī)器學(xué)習(xí)編程入門門檻的項(xiàng)目,其在業(yè)界擁有眾多的擁護(hù)者和使用者。經(jīng)過Keras社區(qū)的多年發(fā)展,Keras集成了很多符合工業(yè)和研究需求的高階API,使用這些API只需要幾行代碼就可以構(gòu)建和運(yùn)行一個(gè)非常復(fù)雜的神經(jīng)網(wǎng)絡(luò)tf.keras常用高階APIactivations:tf.keras.activations中包含了當(dāng)前主流的激活函數(shù)(目的:非線性變換)applications:tf.keras.applications中包含的是已經(jīng)進(jìn)行預(yù)訓(xùn)練的神經(jīng)網(wǎng)絡(luò)模型,可以直接進(jìn)行預(yù)測(cè)或者遷移學(xué)習(xí)backend:tf.keras.backend中包含了Keras后臺(tái)的一些基礎(chǔ)API接口datasets:tf.keras.datasets中包含了常用的公開數(shù)據(jù)訓(xùn)練集layers:tf.keras.layers中包含了已經(jīng)定義好的常用的神經(jīng)網(wǎng)絡(luò)層(卷積層、池化層、全連接層、激活層、正則化層、Dropout層等)losses:tf.keras.losses中包含了常用的損失函數(shù)optimizers:tf.keras.optimizers中包含了主流的優(yōu)化器(求取模型的最優(yōu)訓(xùn)練參數(shù),注意不是超參數(shù))preprocessing:tf.keras.preprocessing中包含了數(shù)據(jù)處理的一些方法regularizers:tf.keras.regularizers中提供了常用的正則化方法(防止過擬合),包括L1、L2等正則化方法Sequential:tf.keras.Sequential將神經(jīng)網(wǎng)絡(luò)層進(jìn)行線性組合形成神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)。Sequential是一個(gè)方法類,可以輕而易舉地以堆疊神經(jīng)網(wǎng)絡(luò)層的方式集成構(gòu)建一個(gè)復(fù)雜的神經(jīng)網(wǎng)絡(luò)模型。Sequential提供了豐富的方法,利用這些方法可以快速地實(shí)現(xiàn)神經(jīng)網(wǎng)絡(luò)模型的網(wǎng)絡(luò)層級(jí)集成、神經(jīng)網(wǎng)絡(luò)模型編譯、神經(jīng)網(wǎng)絡(luò)模型訓(xùn)練和保存,以及神經(jīng)網(wǎng)絡(luò)模型加載和預(yù)測(cè)深度學(xué)習(xí)的基本流程模型加載模型保存模型測(cè)試模型訓(xùn)練模型構(gòu)建數(shù)據(jù)預(yù)處理數(shù)據(jù)采集和標(biāo)注模型應(yīng)用Tensorflow關(guān)鍵步驟(1)模型搭建:兩種模型搭建的方法(1)Sequential編程方法(2)函數(shù)式API編程方法模型創(chuàng)建:model=tf.keras.Sequential()模型編譯:tf.keras.Sequential().compile(),即:pile()。只有編譯后才能對(duì)神經(jīng)網(wǎng)絡(luò)模型進(jìn)行訓(xùn)練。對(duì)神經(jīng)網(wǎng)絡(luò)模型進(jìn)行編譯是將高階API轉(zhuǎn)換成可以直接運(yùn)行的低階API,理解時(shí)可以類比高級(jí)開發(fā)語言的編譯模型訓(xùn)練:tf.keras.Sequential.fit(),即:model.fit()模型保存:tf.keras.Sequential.save(),即:model.save()模型加載:model=tf.keras.models.load_model()模型預(yù)測(cè):tf.keras.Sequential.predict(),即:model.predict()Tensorflow關(guān)鍵步驟(2)在模型搭建中,有兩種主要方法:Sequential方法、函數(shù)式API方法:Sequential方式:順序式編程,使用add()方法添加網(wǎng)絡(luò)層。該方法適用于簡單的網(wǎng)絡(luò),屬于低級(jí)編程模式函數(shù)式API方式:自由度更大的編程方式,使用API函數(shù)添加網(wǎng)絡(luò)層,適用于復(fù)雜網(wǎng)絡(luò)構(gòu)建,屬于高級(jí)編程模式,能夠?qū)崿F(xiàn)Sequential方式無法勝任的復(fù)雜網(wǎng)絡(luò)構(gòu)建本章先以Sequential方法為例,完整介紹Tensorflow深度學(xué)習(xí)過程,最后在實(shí)戰(zhàn)案例中介紹函數(shù)式API方法。這兩種方法的區(qū)別只是體現(xiàn)在模型構(gòu)建方面,是構(gòu)建模型的方法差異,而在模型訓(xùn)練、保存、加載、預(yù)測(cè)、應(yīng)用等方面的使用時(shí)完全一樣的。模型創(chuàng)建(Sequential方法):實(shí)例化模型對(duì)象首先要?jiǎng)?chuàng)建一個(gè)模型對(duì)象的實(shí)例,方法是:tf.keras.Sequential(),返回值為模型的實(shí)例model,之后可以對(duì)該model進(jìn)行一系列的操作示例代碼:importtensorflowastf#創(chuàng)建模型對(duì)象的實(shí)例model=tf.keras.Sequential()模型創(chuàng)建(Sequential方法):組建網(wǎng)絡(luò)層使用Sequential().add()方法來實(shí)現(xiàn)神經(jīng)網(wǎng)絡(luò)層級(jí)的集成,可以根據(jù)實(shí)際需要將tf.keras.layers中的各類神經(jīng)網(wǎng)絡(luò)層級(jí)添加進(jìn)去。Sequential().add()方法的返回值是模型對(duì)象本身,即添加了新的一層之后的model對(duì)象,即更新了model對(duì)象示例代碼:實(shí)現(xiàn)三個(gè)全連接神經(jīng)網(wǎng)絡(luò)層級(jí)的集成,構(gòu)建一個(gè)全連接神經(jīng)網(wǎng)絡(luò)模型importtensorflowastf#創(chuàng)建模型對(duì)象的實(shí)例model=tf.keras.Sequential()#使用add()方法集成神經(jīng)網(wǎng)絡(luò)層級(jí)model.add(tf.keras.layers.Dense(256,activation="relu"))model.add(tf.keras.layers.Dense(128,activation="relu"))model.add(tf.keras.layers.Dense(2,activation="softmax"))模型編譯在完成神經(jīng)網(wǎng)絡(luò)層級(jí)的集成之后需要對(duì)神經(jīng)網(wǎng)絡(luò)模型進(jìn)行編譯,只有編譯后才能對(duì)神經(jīng)網(wǎng)絡(luò)模型進(jìn)行訓(xùn)練。對(duì)神經(jīng)網(wǎng)絡(luò)模型進(jìn)行編譯是將高階API轉(zhuǎn)換成可以直接運(yùn)行的低階API,理解時(shí)可以類比高級(jí)開發(fā)語言的編譯Sequential().compile():提供了神經(jīng)網(wǎng)絡(luò)模型的編譯功能,需要定義三個(gè)參數(shù):loss:用來配置模型的損失函數(shù),可以通過名稱調(diào)用tf.lossesAPI中已經(jīng)定義好的loss函數(shù)optimizer:用來配置模型的優(yōu)化器,可以調(diào)用tf.keras.optimizersAPI配置模型所需要的優(yōu)化器metrics:用來配置模型評(píng)價(jià)的方法,如accuracy、mse等示例代碼:#編譯模型pile(loss="sparse_categorical_crossentropy",optimizer=tf.keras.optimizers.Adam(0.01),metric=["accuracy"])模型訓(xùn)練神經(jīng)網(wǎng)絡(luò)模型編譯后,可以使用準(zhǔn)備好的訓(xùn)練數(shù)據(jù)對(duì)模型進(jìn)行訓(xùn)練Sequential().fit():提供了神經(jīng)網(wǎng)絡(luò)模型的訓(xùn)練功能,主要的配置參數(shù)如下:x:配置訓(xùn)練的輸入數(shù)據(jù),可以是array或者tensor類型y:配置訓(xùn)練的標(biāo)注數(shù)據(jù),可以是array或者tensor類型batch_size:配置批大小,默認(rèn)值是32epochs:配置訓(xùn)練的epochs的數(shù)量verbose:配置訓(xùn)練過程信息輸出的級(jí)別,共有三個(gè)級(jí)別,分別是0、1、2。0代表不輸出任何訓(xùn)練過程信息;1代表以進(jìn)度條的方式輸出訓(xùn)練過程信息;2代表每個(gè)epoch輸出一條訓(xùn)練過程信息validation_split:配置驗(yàn)證數(shù)據(jù)集占訓(xùn)練數(shù)據(jù)集的比例,取值范圍為0~1validation_data:配置驗(yàn)證數(shù)據(jù)集。如果已經(jīng)配置validation_split參數(shù),則可以不配置該參數(shù)。如果同時(shí)配置validation_split和validation_data參數(shù),那么validation_split參數(shù)的配置將會(huì)失效shuffle:配置是否隨機(jī)打亂訓(xùn)練數(shù)據(jù)。當(dāng)配置steps_per_epoch為None時(shí),本參數(shù)的配置失效。initial_epoch:配置進(jìn)行fine-tune時(shí),新的訓(xùn)練周期是從指定的epoch開始繼續(xù)訓(xùn)練的steps_per_epoch:配置每個(gè)epoch訓(xùn)練的步數(shù)模型保存使用save()或者save_weights()方法保存并導(dǎo)出訓(xùn)練得到的模型,在使用這兩個(gè)方法時(shí)需要分別配置以下參數(shù):模型加載和預(yù)測(cè)當(dāng)需要使用模型進(jìn)行預(yù)測(cè)時(shí),可以使用tf.keras.models中的load_model()方法重新加載已經(jīng)保存的模型文件。在完成模型文件的重新加載之后,可以使用predict()方法對(duì)數(shù)據(jù)進(jìn)行預(yù)存輸出。在使用這兩個(gè)方法時(shí)需要分別進(jìn)行如下參數(shù)配置:示例代碼:#模型加載model=tf.keras.models.load_model(filepath)#模型預(yù)測(cè)model.predict(x)卷積神經(jīng)網(wǎng)絡(luò)的圖像識(shí)別實(shí)戰(zhàn)案例本案例使用Tensorflow實(shí)現(xiàn)一個(gè)卷積神經(jīng)網(wǎng)絡(luò)模型,實(shí)現(xiàn)圖像識(shí)別的功能,并通過一個(gè)WEB應(yīng)用程序來使用圖像識(shí)別功能。本案例涉及到3個(gè)方面的知識(shí)和內(nèi)容:圖像處理:使用Python的圖像處理工具PIL庫來進(jìn)行圖像處理方面的工作圖像識(shí)別模型:使用Tensorflow實(shí)現(xiàn)卷積神經(jīng)網(wǎng)絡(luò)模型,并進(jìn)行圖像識(shí)別工作WEB應(yīng)用開發(fā):使用Flask開發(fā)圖像識(shí)別的WEB應(yīng)用程序Python圖像處理工具PILPIL是PythonImagingLibrary的簡稱,是Python生態(tài)系統(tǒng)中圖像處理的標(biāo)準(zhǔn)庫,其功能非常強(qiáng)大且API非常簡單、易用,因此深受歡迎。除了PIL之外,常用的圖像處理工具是OpenCV庫PIL庫需要先安裝后使用。使用PIL時(shí)需要導(dǎo)入PIL包,并使用PIL中的Image類實(shí)現(xiàn)圖像的基本操作:fromPILimportImagePIL的基本功能:圖像讀寫圖像編輯圖像讀寫使用Image類進(jìn)行圖像的讀寫:讀取圖像:Image.open()圖像保存:Image.save()讀取圖像Image.open():提供了打開圖像文件和讀取圖像數(shù)據(jù)的功能示例代碼:fromPILimportImagewithopen("test.jpg","rb")asfp:im=Image.open(fp)#打開圖片文件,將圖片數(shù)據(jù)保存到im對(duì)象中去圖像保存Image.save():提供了圖像數(shù)據(jù)的保存功能,可以保存成訓(xùn)練所需要的圖像格式示例代碼:fromPILimportImageimportos,sysinfile="test.jpg"f,e=os.path.splitext(infile)outfile=f+".png"ifinfile!=outfile:
try:Image.open(infile).save(outfile)exceptIOError:print("cannotconvert",infile)圖像編輯使用Image類進(jìn)行圖像的編輯:圖像截?。篶rop()圖像尺寸變換:resize()像素變換:convert()圖像截取在實(shí)際業(yè)務(wù)場(chǎng)景中,由于所獲得的圖像尺寸可能是不一樣的,而在進(jìn)行訓(xùn)練時(shí)需要數(shù)據(jù)維度是固定的,因此,在進(jìn)行訓(xùn)練前需要對(duì)數(shù)據(jù)進(jìn)行預(yù)處理crop():提供了對(duì)圖像進(jìn)行截取以保持圖像的尺寸統(tǒng)一的功能示例代碼:fromPILimportImage#讀取圖像數(shù)據(jù)im=Image.open("test.jpg")#初始化截取圖像的范圍box=(100,100,400,400)#截取的范圍是:左上角坐標(biāo)(100,100),右下角坐標(biāo)(400,400),截取矩形#完成圖像的截取并保存圖像im.crop(box).save("crop.jpeg")圖像尺寸變換resize():提供了圖像尺寸變換功能,可以按照需要變換源圖像的尺寸示例代碼:fromPILimportImage#讀取圖像數(shù)據(jù)im=Image.open("test.jpg")#改變圖片尺寸為(寬,高),并保存im.resize((500,400)).save("resize.jpeg")像素變換convert():對(duì)圖像進(jìn)行二值化處理。這個(gè)API提供了將圖像進(jìn)行像素色彩模式轉(zhuǎn)換的功能,可以在支持的像素色彩格式間進(jìn)行轉(zhuǎn)換。在人工智能算法編程中常用的是將RGB模式進(jìn)行二值化操作示例代碼:fromPILimportImage#讀取圖像數(shù)據(jù)im=Image.open("test.jpg")#將彩色圖片轉(zhuǎn)換成灰度圖像im.convert("L").save("convert.jpeg")CIFAR-10數(shù)據(jù)集介紹CIFAR-10是由Hinton的學(xué)生AlexKrizhevsky和IlyaSutskever整理的一個(gè)用于識(shí)別普適物體的小型數(shù)據(jù)集。它一共包含10個(gè)類別的RGB彩色圖片:飛機(jī)(airplane)、汽車(automobile)、鳥類(bird)、貓(cat)、鹿(deer)、狗(dog)、蛙類(frog)、馬(horse)、船(ship)和卡車(truck)。圖片的尺寸為32×32,數(shù)據(jù)集中一共有50000張訓(xùn)練圖片和10000張測(cè)試圖片。CIFAR-10數(shù)據(jù)集下載地址:/~kriz/cifar.htmlCIFAR-10數(shù)據(jù)集分析說明CIFAR-10數(shù)據(jù)集共有60000張彩色圖像,這些圖像是32*32,分為10個(gè)類,每類6000張圖。其中50000張用于訓(xùn)練,構(gòu)成了5個(gè)訓(xùn)練批,每一批10000張圖;另外10000用于測(cè)試,單獨(dú)構(gòu)成一批。測(cè)試批的數(shù)據(jù)里,取自10類中的每一類,每一類隨機(jī)取1000張。抽剩下的就隨機(jī)排列組成了訓(xùn)練批。一個(gè)訓(xùn)練批中的各類圖像并不一定數(shù)量相同,總的來看訓(xùn)練批,每一類都有5000張圖每個(gè)batch文件包含一個(gè)字典,每個(gè)字典包含有:Data:一個(gè)10000*3072的numpy數(shù)組,數(shù)據(jù)類型是無符號(hào)整形uint8。這個(gè)數(shù)組的每一行存儲(chǔ)了32*32大小的彩色圖像(32*32*3通道=3072)。前1024個(gè)數(shù)是red通道,然后分別是green,blue。圖像以行的順序存儲(chǔ),也就是說前32個(gè)數(shù)就是這幅圖的像素矩陣的第一行l(wèi)abels:一個(gè)范圍在0-9的含有10000個(gè)數(shù)的列表(一維的數(shù)組)。第i個(gè)數(shù)就是第i個(gè)圖像的類標(biāo)數(shù)據(jù)集除了6個(gè)batch之外,還有一個(gè)文件batches.meta。它包含一個(gè)python字典對(duì)象,內(nèi)容有:一個(gè)包含10個(gè)元素的列表,每一個(gè)描述了labelsarray中每個(gè)數(shù)字對(duì)應(yīng)類標(biāo)的名字。比如:label_names[0]=="airplane",label_names[1]=="automobile"實(shí)戰(zhàn)練習(xí):將CIFAR數(shù)據(jù)集轉(zhuǎn)換保存為JPG圖片本案例作為課堂實(shí)戰(zhàn)案例Tensorflow構(gòu)建卷積神經(jīng)網(wǎng)絡(luò)(CNN)卷積神經(jīng)網(wǎng)絡(luò)(CNN)主要用于計(jì)算機(jī)視覺,如圖像、視頻類的應(yīng)用,主要有以下的層次構(gòu)成:數(shù)據(jù)輸入層:主要是對(duì)原始圖像數(shù)據(jù)進(jìn)行預(yù)處理。預(yù)處理方式:去均值、歸一化、PCA卷積層:卷積層通過卷積計(jì)算將樣本數(shù)據(jù)進(jìn)行降維采樣,以獲取具有空間關(guān)系特征的數(shù)據(jù)激活層:激活層對(duì)數(shù)據(jù)進(jìn)行非線性變換處理,目的是對(duì)數(shù)據(jù)維度進(jìn)行扭曲來獲得更多連續(xù)的概率密度空間。在CNN中,激活層一般采用的激活函數(shù)是ReLU,它具有收斂快、求梯度簡單等特點(diǎn)池化層:池化層夾在連續(xù)的卷積層中間,用于壓縮數(shù)據(jù)的維度以減少過擬合壓平層:將輸入該層級(jí)的數(shù)據(jù)壓平,不管輸入數(shù)據(jù)的維度數(shù)是多少,都會(huì)被壓平成一維全連接層:和常規(guī)的DNN一樣,全連接層在所有的神經(jīng)網(wǎng)絡(luò)層級(jí)之間都有權(quán)重連接,最終連接到輸出層。在進(jìn)行模型訓(xùn)練時(shí),神經(jīng)網(wǎng)絡(luò)會(huì)自動(dòng)調(diào)整層級(jí)之間的權(quán)重以達(dá)到擬合數(shù)據(jù)的目的Dropout層(失活):Dropout的工作機(jī)制就是每步訓(xùn)練時(shí)按照一定的概率隨機(jī)使神經(jīng)網(wǎng)絡(luò)的神經(jīng)元失效,這樣可以極大降低連接的復(fù)雜度。同時(shí)由于每次訓(xùn)練都是由不同的神經(jīng)元協(xié)同工作的,這樣的機(jī)制也可以很好地避免數(shù)據(jù)帶來的過擬合,提高了神經(jīng)網(wǎng)絡(luò)的泛化性Adam:Adam是一種可以替代傳統(tǒng)隨機(jī)梯度下降算法的梯度優(yōu)化算法數(shù)據(jù)輸入層輸入層就是圖像數(shù)據(jù)的輸入,不需要特定的處理函數(shù)API,就是tensor的輸入。tensor:(高度,寬度,通道數(shù)),例如:(32,32,3)卷積層tf.keras.layers.Conv2D():構(gòu)建卷積層對(duì)象。使用Conv2D可以創(chuàng)建一個(gè)卷積核來對(duì)輸入數(shù)據(jù)進(jìn)行卷積計(jì)算,然后輸出結(jié)果,其創(chuàng)建的卷積核可以處理二維數(shù)據(jù)。依此類推,Conv1D可以用于處理一維數(shù)據(jù),Conv3D可以用于處理三維數(shù)據(jù)。在進(jìn)行神經(jīng)網(wǎng)絡(luò)層級(jí)集成時(shí),如果使用該層作為第一層級(jí),則需要配置input_shape參數(shù)。在使用Conv2D時(shí),需要配置的主要參數(shù)如下:filters:配置輸出數(shù)據(jù)的維度,數(shù)值類型是整型,等于卷積核的數(shù)量,該參數(shù)人工設(shè)定,可以調(diào)參kernel_size:配置卷積核的大小。這里使用的是二維卷積核,因此需要配置卷積核的長和寬。數(shù)值是包含兩個(gè)整型元素值的列表或者元組strides:配置卷積核在做卷積計(jì)算時(shí)移動(dòng)步幅的大小,分為X、Y兩個(gè)方向的步幅。數(shù)值是包含兩個(gè)整型元素值的列表或者元組,當(dāng)X、Y兩個(gè)方向的步幅大小一樣時(shí),只需要配置一個(gè)步幅即可padding:配置圖像邊界數(shù)據(jù)處理策略。SAME表示補(bǔ)零,VALID表示不進(jìn)行補(bǔ)零。在進(jìn)行卷積計(jì)算或者池化時(shí)都會(huì)遇到圖像邊界數(shù)據(jù)處理的問題,當(dāng)邊界像素不能正好被卷積或者池化的步幅整除時(shí),只能在邊界外補(bǔ)零湊成一個(gè)步幅長度,或者直接舍棄邊界的像素特征data_format:配置輸入圖像數(shù)據(jù)的格式,默認(rèn)格式是channels_last,也可以根據(jù)需要設(shè)置成channels_first。圖像數(shù)據(jù)的格式分為channels_last(batch,height,width,channels)和channels_first(batch,channels,height,width)兩種,其中batch代表數(shù)據(jù)集中圖片的數(shù)量dilation_rate:配置使用擴(kuò)張卷積時(shí)每次的擴(kuò)張率activation:配置激活函數(shù),如果不配置則不會(huì)使用任何激活函數(shù)use_bias:配置該層的神經(jīng)網(wǎng)絡(luò)是否使用偏置向量kernel_initializer:配置卷積核的初始化,即采用什么方法或者算法創(chuàng)建卷積核矩陣bias_initializer:配置偏置向量的初始化,即采用什么方法或者算法創(chuàng)建偏置向量激活層激活層對(duì)數(shù)據(jù)進(jìn)行非線性變換處理,目的是對(duì)數(shù)據(jù)維度進(jìn)行扭曲來獲得更多連續(xù)的概率密度空間。在CNN中,激活層一般采用的激活函數(shù)是ReLU,它具有收斂快、求梯度簡單等特點(diǎn)池化層tf.keras.layers.MaxPool2D():MaxPool2D的作用是對(duì)卷積層輸出的空間數(shù)據(jù)進(jìn)行池化,采用的池化策略是最大值池化。在使用MaxPool2D時(shí)需要配置的參數(shù)如下:pool_size:配置池化窗口的維度,包括長和寬。數(shù)值是包含兩個(gè)整型元素值的列表或者元組strides:配置卷積核在做池化時(shí)移動(dòng)步幅的大小,分為X、Y兩個(gè)方向的步幅。數(shù)值是包含兩個(gè)整型元素值的列表或者元組,默認(rèn)與pool_size相同padding:配置處理圖像數(shù)據(jù)進(jìn)行池化時(shí)在邊界補(bǔ)零的策略。SAME表示補(bǔ)零,VALID表示不進(jìn)行補(bǔ)零。在進(jìn)行卷積計(jì)算或者池化時(shí)都會(huì)遇到圖像邊界數(shù)據(jù)的問題,當(dāng)邊界像素不能正好被卷積或者池化的步幅整除時(shí),就只能在邊界外補(bǔ)零湊成一個(gè)步幅長度,或者直接舍棄邊界的像素特征data_format:配置輸入圖像數(shù)據(jù)的格式,默認(rèn)格式是channels_last,也可以根據(jù)需要設(shè)置成channels_first。在進(jìn)行圖像數(shù)據(jù)處理時(shí),圖像數(shù)據(jù)的格式分為channels_last(batch,height,width,channels)和channels_first(batch,channels,height,width)兩種壓平層tf.keras.layers.Flatten():Flatten將輸入該層級(jí)的數(shù)據(jù)壓平,不管輸入數(shù)據(jù)的維度數(shù)是多少,都會(huì)被壓平成一維。這個(gè)層級(jí)的參數(shù)配置很簡單,只需要配置data_format即可:data_format:可被設(shè)置成channels_last或channels_first,默認(rèn)值是channels_last全連接層tf.keras.layer.Dense():Dense提供了全連接的標(biāo)準(zhǔn)神經(jīng)網(wǎng)絡(luò),配置參數(shù)如下:units:正整數(shù),輸出空間的維數(shù)activation:使用的激活函數(shù)use_bias:布爾值,是否使用偏置向量kernel_initializer:配置kernel權(quán)重矩陣的初始化器,這里的kernel是指權(quán)重w,即y=wx+b中的wbias_initializer:配置偏置向量的初始化器,這里的bias是指偏置b,即y=wx+b中的bkernel_regularizer:應(yīng)用于kernel權(quán)重矩陣的正則化函數(shù)bias_regularizer:應(yīng)用于偏置向量正則化函數(shù)activity_regularizer:應(yīng)用于本層輸出數(shù)據(jù)上的正則化函數(shù)kernel_constraint:應(yīng)用于kernel權(quán)重矩陣的約束函數(shù)bias_constraint:應(yīng)用于偏置向量的約束函數(shù)Dropout層tf.keras.layers.Dropout():對(duì)于Dropout在神經(jīng)網(wǎng)絡(luò)模型中具體作用的認(rèn)識(shí),業(yè)界分為兩派,其中一派認(rèn)為Dropout極大簡化了訓(xùn)練時(shí)神經(jīng)網(wǎng)絡(luò)的復(fù)雜度,加快了神經(jīng)網(wǎng)絡(luò)的訓(xùn)練速度;另一派認(rèn)為Dropout的主要作用是防止神經(jīng)網(wǎng)絡(luò)的過擬合,提高了神經(jīng)網(wǎng)絡(luò)的泛化性。簡單來說,Dropout的工作機(jī)制就是每步訓(xùn)練時(shí)按照一定的概率隨機(jī)使神經(jīng)網(wǎng)絡(luò)的神經(jīng)元失效,這樣可以極大降低連接的復(fù)雜度。同時(shí)由于每次訓(xùn)練都是由不同的神經(jīng)元協(xié)同工作的,這樣的機(jī)制也可以很好地避免數(shù)據(jù)帶來的過擬合,提高了神經(jīng)網(wǎng)絡(luò)的泛化性。在使用Dropout時(shí),需要配置的參數(shù)如下:rate:配置神經(jīng)元失效的概率noise_shape:配置Dropout的神經(jīng)元seed:生成隨機(jī)數(shù)Adamtf.keras.optimizers.Adam():Adam是一種可以替代傳統(tǒng)隨機(jī)梯度下降算法的梯度優(yōu)化算法,適用于解決神經(jīng)網(wǎng)絡(luò)訓(xùn)練中的高噪聲和稀疏梯度問題,它的超參數(shù)簡單、直觀并且只需要少量的調(diào)參就可以達(dá)到理想的效果。官方推薦的最優(yōu)參數(shù)組合為(alpha=0.001,beta_1=0.9,beta_2=0.999,epsilon=10E-8),在使用時(shí)可以配置如下參數(shù):learning_rate:配置學(xué)習(xí)率,即上面的參數(shù)alpha,默認(rèn)值是0.001beta_1:配置一階矩估計(jì)的指數(shù)衰減率,默認(rèn)值是0.9beta_2:配置二階矩估計(jì)的指數(shù)衰減率,默認(rèn)值是0.999epsilon:該參數(shù)是一個(gè)非常小的數(shù)值,防止出現(xiàn)除以零的情況,默認(rèn)值是10E-8amsgrad:配置是否使用AMSGrad,這是一種改進(jìn)的Adam優(yōu)化器算法name:配置優(yōu)化器的名稱Tensorflow構(gòu)建模型的兩種方法在模型搭建中,有兩種主要方法:Sequential方式:順序式編程,使用add()方法添加網(wǎng)絡(luò)層。該方法適用于簡單的網(wǎng)絡(luò),屬于低級(jí)編程模式。函數(shù)式API方式:自由度更大的編程方式,使用API函數(shù)添加網(wǎng)絡(luò)層,適用于復(fù)雜網(wǎng)絡(luò)構(gòu)建,屬于高級(jí)編程模式,能夠?qū)崿F(xiàn)Sequential方式無法勝任的復(fù)雜網(wǎng)絡(luò)構(gòu)建。本章使用兩種方法構(gòu)建CNN網(wǎng)絡(luò)模型CNN網(wǎng)絡(luò)結(jié)構(gòu)Layer(type) OutputShape==============================================conv1(Conv2D) (None,32,32,64)_________________________________________________________________________conv2(Conv2D) (None,32,32,64)________________________________________________________________________pool1(MaxPooling2D) (None,16,16,64)_________________________________________________________________________d1(Dropout) (None,16,16,64)_________________________________________________________________________batch_normalization (None,16,16,64)_________________________________________________________________________conv3(Conv2D) (None,16,16,128)_________________________________________________________________________conv4(Conv2D) (None,16,16,128)_________________________________________________________________________pool2(MaxPooling2D) (None,8,8,128)_________________________________________________________________________d2(Dropout) (None,8,8,128)_________________________________________________________________________batch_normalization_1 (Batch(None,8,8,128)_________________________________________________________________________conv5(Conv2D) (None,8,8,256)_________________________________________________________________________conv6(Conv2D) (None,8,8,256)_________________________________________________________________________pool3(MaxPooling2D) (None,4,4,256)_________________________________________________________________________d3(Dropout) (None,4,4,256)_________________________________________________________________________batch_normalization_2 (Batch(None,4,4,256)_________________________________________________________________________flatten(Flatten) (None,4096)_________________________________________________________________________dropout(Dropout
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年綠色能源項(xiàng)目合伙人共同投資合作協(xié)議范本3篇
- 多元化資產(chǎn)管理合同
- 辦公室空間利用合同
- 網(wǎng)絡(luò)文化產(chǎn)品交易服務(wù)平臺(tái)協(xié)議
- 常用購銷合同
- 軟件知識(shí)產(chǎn)權(quán)保護(hù)協(xié)議
- 2025版醫(yī)療健康企業(yè)100%股權(quán)出售及合作開發(fā)合同3篇
- 消防工程施工簡單協(xié)議書
- 少兒百科知識(shí)故事征文
- 水穩(wěn)料采購合同協(xié)議書
- 智能醫(yī)療在泌尿外科手術(shù)中的數(shù)字導(dǎo)航
- 部編人教版語文八年級(jí)下冊(cè)文言文課下注釋
- 部編版三年級(jí)下冊(cè)每課鞏固練習(xí)題
- 財(cái)富流游戲燈片
- 路面彎沉溫度修正系數(shù)
- 職業(yè)技能鑒定要素細(xì)目表和卷庫編寫要求
- 新媒體運(yùn)營培訓(xùn)課件
- 國企集團(tuán)集中采購管理制度(試行)
- ZZ007 現(xiàn)代加工技術(shù)賽項(xiàng)正式賽題及評(píng)分標(biāo)準(zhǔn)完整版包括所有附件-2023年全國職業(yè)院校技能大賽賽項(xiàng)正式賽卷
- 鍋爐維保服務(wù)投標(biāo)方案(技術(shù)標(biāo) )
- 房屋買賣合同律師見證書
評(píng)論
0/150
提交評(píng)論