版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
卷積神經(jīng)網(wǎng)絡算法動提取高級特征,并進一步分析,同時使得計算復雜度以指數(shù)級別下卷積神經(jīng)網(wǎng)絡算法識別惡意評論,識別垃圾郵件等。目錄TOC\o"1-1"\h\u171031卷積神經(jīng)網(wǎng)絡算法概述 3100592示例:helloworld!卷積神經(jīng)網(wǎng)絡 760613示例:識別惡意評論 983081.數(shù)據(jù)清洗與特征化 976872.訓練樣本 10114003.驗證效果 10160064示例:識別垃圾郵件 11卷積神經(jīng)網(wǎng)絡算法概述人臉識別等圖像識別技術(shù)正在改變?nèi)藗兊纳?,如圖17-1所示,回顧之前識別MNIST數(shù)據(jù)集時,28×28的圖片識別數(shù)字的成功率都徘徊在95%左右,那是什么樣的技術(shù)讓圖像識別長足發(fā)展的呢?答案就是卷積神經(jīng)網(wǎng)絡。圖17-1 人臉識別卷積神經(jīng)網(wǎng)絡(ConvolutionalNeuralNetwork,CNN)原本是在圖像處理領(lǐng)域應用的,后來廣泛應用于文本處理、語音識別等領(lǐng)域。是近年發(fā)展起來的,并引起廣泛重視的一種高效識別圖像的方法。20世紀60年代,Hubel和Wiesel在研究貓腦皮層中用于局部敏感和方向選擇的神經(jīng)元時發(fā)現(xiàn)其獨特的網(wǎng)絡結(jié)構(gòu)可以有效地降低反饋神經(jīng)網(wǎng)絡的復雜性,繼而提出了卷積神經(jīng)網(wǎng)絡?,F(xiàn)在,CNN究熱點之一,特別是在模式分類領(lǐng)域,由于該網(wǎng)絡避免了對圖像的復雜前期預處理,可以直接輸入原始圖像,因而得到了更為廣泛的應用,如圖17-2所示。K.Fukushima在1980年提出的新識別機是卷積神經(jīng)網(wǎng)絡的第一個實現(xiàn)網(wǎng)絡。隨后,更多的科研工作者對該網(wǎng)絡進行了改進。其中,具有代表性的研究成果是Alexander和Taylor提出的“改進認知機”,該方法綜合了各種改進方法的優(yōu)點并避免了耗時的誤差反向傳播。圖17-2 CNN圖像處理示例圖在DNN這類全連接神經(jīng)網(wǎng)絡算法中,隱藏層的前一層的每個節(jié)點都需要與下一層的每個節(jié)點連接,當節(jié)點數(shù)量巨大時,產(chǎn)生的連接就非常多,這樣,在硬件環(huán)境有限的情況下就幾乎難以完成訓練過程,如圖17-3所示。圖17-3 全連接神經(jīng)網(wǎng)絡為了解決圖像處理領(lǐng)域全連接造成的計算量巨大的問題,人們提出了局部連接,如圖17-4所示。其理論基礎是基于這樣的假設:生物在進行圖像識別時,對圖像的理解只需要處理局部的數(shù)據(jù)即可,不需要全面分析全部圖像后才能進行處理。這一假設在圖像處理領(lǐng)域得到了廣泛應用,證明其簡單有效。圖17-4 局部連接神經(jīng)網(wǎng)絡在卷積神經(jīng)網(wǎng)絡中有幾個概念需要介紹一下所謂權(quán)值共享是指當從一個大尺寸圖像中隨機選取一小塊,比如說8×8作為樣本,并且從這個小塊樣本中學習到了一些特征,這時我們可以把從這個8×8樣本中學習到的特征作為探測器,應用到這個圖像的任意地方。特別是,我們可以用從8×8樣本中所學習到的特征跟原本的大尺寸圖像作卷積,從而在這個大尺寸圖像上的任一位置獲得一個不同特征的激活值。如圖17-5所示,展示了一個3×3的卷積核在5×5的圖像上做卷積的過程。每個卷積都是一種特征提取方式,就像一個篩子,將圖像中符合條件(激活值越大越符合條件)的部分篩選出來。圖17-5 CNN權(quán)值共享原理所謂池化是指人們可以計算圖像一個區(qū)域上的某個特定特征的平均值或者最大值。這些概要統(tǒng)計特征不僅具有低得多的維度,同時還會改善結(jié)果。這種聚合的操作就叫做池化?;诰植窟B接、權(quán)值共享以及池化層的降采樣,進一步發(fā)展成了完整的CNN算法,關(guān)于CNN的詳細算法說明不是本書的重點,有興趣的讀者可以參考本章最后的參考文獻。示例:helloworld!卷積神經(jīng)網(wǎng)絡完整演示代碼請見本書GitHub上的17-1.py。數(shù)據(jù)清洗與特征化我們繼續(xù)使用MNIST數(shù)據(jù)集,MNIST數(shù)據(jù)集的詳細介紹請閱讀第3章相關(guān)內(nèi)容。這次我們利用TFLearn提供的API來獲取MNIST數(shù)據(jù)集:X,Y,testX,testY=mnist.load_data(one_hot=True)第一次調(diào)用這個API的時候,會自動下載MNIST數(shù)據(jù)集到默認目錄:DownloadingMNIST...Succesfullydownloadedtrain-images-idx3-ubyte.gz9912422bytes.Extractingmnist/train-images-idx3-ubyte.gzDownloadingMNIST...Succesfullydownloadedtrain-labels-idx1-ubyte.gz28881bytes.Extractingmnist/train-labels-idx1-ubyte.gzDownloadingMNIST...Succesfullydownloadedt10k-images-idx3-ubyte.gz1648877bytes.Extractingmnist/t10k-images-idx3-ubyte.gzDownloadingMNIST...Succesfullydownloadedt10k-labels-idx1-ubyte.gz4542bytes.Extractingmnist/t10k-labels-idx1-ubyte.gz后繼再調(diào)用該API時會自動從默認目錄中加載對應的文件:Extractingmnist/train-images-idx3-ubyte.gzExtractingmnist/train-labels-idx1-ubyte.gzExtractingmnist/t10k-images-idx3-ubyte.gzExtractingmnist/t10k-labels-idx1-ubyte.gz圖片樣本大小為28×28,TFLearn默認將其轉(zhuǎn)換成維度為784的向量,為了處理方便,需要恢復成28×28的二維向量:X=X.reshape([-1,28,28,1])testX=testX.reshape([-1,28,28,1])訓練樣本構(gòu)造CNN網(wǎng)絡,定義輸入層,大小為28×28:net=tflearn.input_data(shape=[None,28,28,1])構(gòu)造二維卷積函數(shù):net=tflearn.conv_2d(net,64,3,activation=’relu’,bias=False)組裝余下神經(jīng)網(wǎng)絡:net=tflearn.residual_bottleneck(net,3,16,64)net=tflearn.residual_bottleneck(net,1,32,128,downsample=True)net=tflearn.residual_bottleneck(net,2,32,128)net=tflearn.residual_bottleneck(net,1,64,256,downsample=True)net=tflearn.residual_bottleneck(net,2,64,256)net=tflearn.batch_normalization(net)net=tflearn.activation(net,'relu')net=tflearn.global_avg_pool(net)net=tflearn.fully_connected(net,10,activation='softmax')net=tflearn.regression(net,optimizer='momentum',loss='categorical_crossentropy',learning_rate=0.1)效果驗證訓練并交叉驗證效果,準確率達到了99%以上,非常不錯:model=tflearn.DNN(net,checkpoint_path='model_resnet_mnist',max_checkpoints=10,tensorboard_verbose=0)model.fit(X,Y,n_epoch=100,validation_set=(testX,testY),show_metric=True,batch_size=256,run_id='resnet_mnist')示例:識別惡意評論完整演示代碼請見本書GitHub上的17-2.py。數(shù)據(jù)清洗與特征化這次我們的樣本依然采用MovieReviewData數(shù)據(jù)集。MovieReviewData數(shù)據(jù)集包含1000條正面評論和1000條負面評論,被廣泛應用于文本分類尤其是惡意評論識別方面。本書使用其最新的版本,polaritydatasetv2.0,詳細的介紹請參考第3章相關(guān)內(nèi)容。MovieReviewData數(shù)據(jù)集的每條評論都保存成單獨的一個文本文件,正面和負面評論放置在不同的文件夾下面,使用詞袋模型將文本向量化。讀取文件,把每個文件轉(zhuǎn)換成一個字符串:defload_one_file(filename):x=""withopen(filename)asf:forlineinf:x+=linereturnx遍歷讀取文件夾下全部文件:defload_files(rootdir,label):list=os.listdir(rootdir)x=[]y=[]foriinrange(0,len(list)):path=os.path.join(rootdir,list[i])ifos.path.isfile(path):print"Loadfile%s"%pathy.append(label)x.append(load_one_file(path))returnx,y根據(jù)不同文件夾,標記為正面和負面,其中正面評論標記為0,負面評論標記為1:defload_data():x=[]y=[]x1,y1=load_files("../data/movie-review-data/review_polarity/txt_sentoken/pos/",0)xx=x1+x2y=y1+y2returnx,y使用詞袋模型將數(shù)據(jù)向量化,并且使用train_test_split將樣本隨機劃分成訓練集合和測試集合,分配比例為0.4,這個比例可以根據(jù)自己的需要進行調(diào)整,不過一般都是建議使用40%作為測試數(shù)據(jù):x,y=load_data()x_train,x_test,y_train,y_test=train_test_split(x,y,test_size=0.4,random_stavp=learn.preprocessing.VocabularyProcessor(max_document_length=MAX_DOCUMENT_LENGTvp.fit(x)x_train=np.array(list(vp.transform(x_train)))x_test=np.array(list(vp.transform(x_test)))n_words=len(vp.vocabulary_)print(‘Totalwords:%d'%n_words)訓練樣本構(gòu)造CNN,使用一維卷積函數(shù):network=input_data(shape=[None,MAX_DOCUMENT_LENGTH],name='input')network=tflearn.embedding(network,input_dim=n_words+1,output_dim=128)branch1=conv_1d(network,128,3,padding='valid',activation='relu',regularizer=branch2=conv_1d(network,128,4,padding='valid',activation='relu',regularizer=branch3=conv_1d(network,128,5,padding='valid',activation='relu',regularizer=network=merge([branch1,branch2,branch3],mode='concat',axis=1)network=tf.expand_dims(network,2)network=global_max_pool(network)network=dropout(network,0.5)network=fully_connected(network,2,activation='softmax')network=regression(network,optimizer='adam',learning_rate=0.001,loss='categorical_crossentropy',name='target')驗證效果CNN算法在fit函數(shù)中直接指定了測試數(shù)據(jù)集合(testX,testY):model=tflearn.DNN(network,tensorboard_verbose=0)model.fit(trainX,trainY,n_epoch=10,shuffle=True,validation_set=(testX,testY)運行程序,準確率66%左右,比之前NB和RNN算法有提升。示例:識別垃圾郵件完整演示代碼請見本書GitHub上的17-3.py。數(shù)據(jù)清洗與特征化CNN習的問題,CNN別效果還滿足需求。圖像通常是二維數(shù)組,文字通常都是一維數(shù)據(jù),是否可以通過某種轉(zhuǎn)換后,也使用CNN對文字進行處理呢?答案是肯定的。我們回顧一下在圖像處理時,CNN是如何處理二維數(shù)據(jù)的。如圖17-6所示,CNN使用二維卷積函數(shù)處理小塊圖像,提煉高級特征進一步分析。典型的二維卷積函數(shù)處理圖片的大小為3×3、4×4等。圖17-6 CNN處理圖像數(shù)據(jù)的過程同樣的原理,我們可以使用一維的卷積函數(shù)處理文字片段,提煉高級特征進一步分析。典型的一維卷積函數(shù)處理文字片段的大小為3、4、5等,如圖17-7所示。圖17-7 CNN處理文本數(shù)據(jù)的過程感謝YoonKim的經(jīng)典論文ConvolutionalNeuralNetworksforSentenceClassification給我們的知識。常見的詞袋模型可以很好地表現(xiàn)文本由哪些單詞組成,但是卻無法表達出單詞之間的前后關(guān)系,于是人們借鑒了詞袋模型的思想,使用生成的詞匯表對原有句子按照單詞逐個進行編碼。TensorFlow默認支持了這種模型:tf.contrib.learn.preprocessing.VocabularyProcessor(max_document_length,min_frequevocabulary=None,tokenizer_fn=None)其中各個參數(shù)的含義為:·max_document_length:,文檔的最大長度。如果文本的長度大于最大長度,那么它會被剪切,反之則用0填充?!in_frequency,詞頻的最小值,出現(xiàn)次數(shù)小于這個值的詞則不會被收錄到詞表中?!ocabulary,CategoricalVocabulary對象?!okenizer_fn,分詞函數(shù)。假設有如下句子需要處理:x_text=['iloveyou','metoo']基于以上句子生成詞匯表,并對'imetoo'這句話進行編碼:vocab_processor=learn.preprocessing.VocabularyProcessor(max_document_length)vocab_processor.fit(x_text)printnext(vocab_processor.transform(['imetoo'])).tolist()x=np.array(list(vocab_processor.fit_transform(x_text)))printx運行結(jié)果為:[1,4,5,0][[1230][4500]]整個過程如圖17-8所示。圖17-8 使用詞匯表模型進行編碼我們使用TensorFlow自帶的VocabularyProcessor對數(shù)據(jù)集的文本進行編碼轉(zhuǎn)換:ham,spam=load_all_files()x=ham+spamy=[0]*len(ham)+[1]*len(spam)vp=tflearn.data_utils.VocabularyProcessor(max_document_length=max_document_length,x=vp.fit_transform(x,unused_y=None)x=np.array(list(x))returnx,y使用詞匯表編碼后,將數(shù)據(jù)集合隨機分配成訓練集合和測試集合,其中測試集合比例為40%:x,y=get_features_by_tf()x_train,x_test,y_train,y_test=train_test_split(x,y,test_size=0.4,random_s將訓練和測試數(shù)據(jù)進行填充和轉(zhuǎn)換,不到最大長度的數(shù)據(jù)填充0,由于是二分類問題,把標記數(shù)據(jù)二值化。定義輸入?yún)?shù)的最大長度為文檔的最大長度:trainX=pad_sequences(trainX,maxlen=max_document_length,value=0.)testX=pad_sequences(testX,maxlen=max_document_length,value=0.)#ConvertinglabelstobinaryvectorstrainY=to_categorical(trainY,nb_classes=2)testY=to_categorical(testY,nb_classes=2)network=input_data(shape=[None,max_document_length],name='input')訓練樣本定義CNN模型,其實使用3個數(shù)量為128核,長度分別為3、4、5的一維卷積函數(shù)處理數(shù)據(jù):network=tflearn.embedding(network,input_dim=1000000,output_dim=128)branch1=conv_1d(network,128,3,padding='valid',activation='relu',regularizer=branch2=conv_1d(network,128,4,padding=
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 稅務籌劃與執(zhí)行方案設計
- 2024物業(yè)客服個人工作總結(jié)(35篇)
- 農(nóng)村旱地合同(2篇)
- Unit3Sport and Fitness(詞匯短語句式)-2025屆高三人教版英語一輪復習闖關(guān)攻略(解析版)
- 第17課 二戰(zhàn)后資本主義的新變化(分層作業(yè))(解析版)
- 第2單元 古代歐洲文明(A卷·知識通關(guān)練)(解析版)
- 2021-2026年中國天然植物殺蟲劑市場深度分析及投資戰(zhàn)略咨詢報告
- 2025陽泉市豆類種植收購合同
- 2024年度天津市公共營養(yǎng)師之二級營養(yǎng)師能力測試試卷B卷附答案
- 2024年度天津市公共營養(yǎng)師之三級營養(yǎng)師強化訓練試卷B卷附答案
- 檢修平臺施工方案
- 貴陽市南明區(qū)2023-2024學年四年級數(shù)學第一學期期末質(zhì)量跟蹤監(jiān)視試題含答案
- 第六單元大單元教學設計統(tǒng)編版語文八年級上冊
- GB/T 713.2-2023承壓設備用鋼板和鋼帶第2部分:規(guī)定溫度性能的非合金鋼和合金鋼
- 寵物養(yǎng)護與經(jīng)營專業(yè)《寵物解剖生理》課程標準
- 滬教2011課標版三年級起點五年級下冊《Buying Clothes》說課稿
- 幼兒園教職工教代會會議記錄
- 車輛移交安全協(xié)議書
- 《涑水記聞》2021年江蘇鎮(zhèn)江中考文言文閱讀真題(含答案與翻譯)
- 家庭家教家風·家庭美德·文明家庭主題班會
- 廬山云霧閱讀答案千姿百態(tài)
評論
0/150
提交評論