《人工智能基礎及應用》 習題及參考答案 王方石 第1-9章_第1頁
《人工智能基礎及應用》 習題及參考答案 王方石 第1-9章_第2頁
《人工智能基礎及應用》 習題及參考答案 王方石 第1-9章_第3頁
《人工智能基礎及應用》 習題及參考答案 王方石 第1-9章_第4頁
《人工智能基礎及應用》 習題及參考答案 王方石 第1-9章_第5頁
已閱讀5頁,還剩35頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

第1章習題1.1956年達特茅斯會議上,學者們首次提出“ArtificialIntelligence”(人工智能)這個概念時,所確定的人工智能研究方向不包括()。A.研究人類大腦結構和智能起源B.研究如何用計算機表示人類知識C.研究如何用計算機來模擬人類智能D.研究智能學習的機制在現(xiàn)階段,下列哪項尚未成為人工智能研究的主要方向和目標?()A.研究如何用計算機模擬人類智能的若干功能,如會聽、會看、會說研究如何用計算機延伸和擴展人類智能C.研究機器智能與人類智能的本質差別D.研究如何用計算機模擬人類大腦的網絡結構和部分功能3.下列關于人工智能的說法中不正確的是()。A.人工智能是關于知識的學科--怎樣表示知識以及怎樣獲得知識并使用知識的學科B.人工智能研究如何使計算機去做過去只有人才能做的智能工作C.自1956年人工智能學科誕生以來,經過多年的發(fā)展,它的理論已趨于成熟,得到了充分應用。D.人工智能不是人的智能,但能像人那樣思考。甚至也可能超過人的智能4.強人工智能強調人工智能的完整性。以下哪個不屬于強人工智能?()A.類人機器的思考和推理就像人的思維一樣B.非類人機器產生了和人完全不一樣的知覺和意識C.智能機器看起來像是智能的,其實并不真正擁有智能,也不會有自主意識D.有可能制造出真正能推理和解決問題的智能機器5.從人工智能研究流派來看,西蒙和紐厄爾提出的“邏輯理論家”方法,應該屬于()。A.行為主義B.符號主義C.連接主義D.理性主義6.從人工智能研究流派來看,麥卡錫提出的“狀態(tài)空間搜索法”,應該屬于()。A.行為主義B.符號主義C.連接主義D.理性主義7.下列關于人工智能未來發(fā)展趨勢的描述,哪些是錯誤的?()A.人工智能目前僅適用于特定的、專用的問題B.人工智能受到越來越多的關注,許多國家出臺了支持人工智能發(fā)展的戰(zhàn)略計劃C.通用人工智能的發(fā)展正處于起步階段D.人工智能將脫離人類控制,并最終毀滅人類8.考察人工智能的一些應用,目前()任務可以通過人工智能來解決。A.在市場上購買一周的食品雜貨B.以競技水平玩德州撲克游戲C.在Web上購買一周的食品雜貨D.將英文口語實時翻譯為中文口語9.()的本質就是用符號體系來描述知識,再對所得到的符號表示進行計算,從而求解問題。A.行為主義B.符號主義C.連接主義D.主觀主義10.以下說法中,錯誤的是()。A.智能,是“智慧”和“能力”的綜合表現(xiàn)B.人工智能學科誕生于1956年的達特茅斯會議C.目前的人工智能研究是在有限條件下對人類智能的某種能力在某些具體問題上的模擬D.人工智能最開始的定義是研究或制造人類的智能11.下列()屬于人工智能的研究領域。A.圖像理解B.人臉識別C.專家系統(tǒng)D.機器學習E.以上都是在達特茅斯會議上,提出了人工智能研究的主要方法,包括()。西蒙和紐維爾的邏輯理論家麥卡錫的狀態(tài)空間搜索法明斯基的人工神經網絡以上三種答案:題號123456789101112答案ACCCBBDBCDBDED第2章習題什么是知識?它有哪些特性?有哪幾類知識表示方法?答:知識是人類在長期的生活、社會實踐及科學實驗中經過總結、提升與凝練的對客觀世界(包括人類自身)的認識和經驗,也包括對事實和信息的描述或在教育和實踐中獲得的技能。知識具有相對正確性和不確定性。知識表示方法分為兩類:陳述式知識表示法和過程式知識表示法。用產生式表示:如果一種微生物的染色斑是革蘭氏陰性,其形狀呈桿狀,病人是中間宿主,那么該生物是綠桿菌的可能性有6成。答:IF本微生物的染色斑是革蘭氏陰性∧本微生物的形狀呈桿狀∧病人是中間宿主THEN該生物是綠桿菌(0.6)3.請用狀態(tài)空間表示法描述下列問題:有5個傳教士和5個野人來到河邊,準備從左岸渡河到右岸,河岸有一條船,每次至多可供3人乘渡,所有人都會劃船。為安全起見,在河的兩岸以及船上的野人數(shù)目總是不可以超過傳教士的數(shù)目(但允許在河的某一岸只有野人而沒有傳教士)。答:(1)設計狀態(tài)空間表示,令未過河的修道士數(shù)量為m未過河的野人數(shù)量為c,未過河的船的數(shù)量為b(=1表示船未過河,=0表示船已過河)。則狀態(tài)空間可以用向量:S={m,c,b}表示。理論上,過河的所有狀態(tài)數(shù)量為:6*6*2=72個初始狀態(tài)為(5,5,1),目標狀態(tài)為(0,0,0)。(2)設計狀態(tài)轉移形式狀態(tài)轉移即過河操作。用P代表船從左岸到右岸;用Q代表船從右岸到左岸。船上:修道士人數(shù)為i,野人人數(shù)為j,滿足:1≦i+j≦3;2)i≠0時,i≧j根據以上限制,可能的操作共有16種:船從左岸到右岸:P01;P02;P03;P10;P11;P20;P21;P30;(不能有P12)船從右岸到左岸:Q01;Q02;Q03;Q10;Q11;Q20;Q21;Q30;4.使用RDF三元組表示事實知識:葡萄牙籍的C羅效力于西班牙皇家馬德里足球隊。答:(皇家馬德里足球隊,屬于,西班牙)(C羅,效力,皇家馬德里足球隊)(C羅,國籍,葡萄牙)產生式系統(tǒng)哪幾部分組成?分別簡述各部分的用途,其中知識庫是指什么?答:一個產生式系統(tǒng)由規(guī)則庫、綜合數(shù)據庫、控制系統(tǒng)3部分組成。(1)規(guī)則庫:用于描述相應領域內知識的產生式集合稱為規(guī)則庫。(1分)(2)綜合數(shù)據庫又稱為事實庫,它是用于存放問題求解過程中各種當前信息(例如問題的初始狀態(tài)、原始證據、推理中得到的中間結論及最終結論)的數(shù)據結構。(3)控制系統(tǒng)又稱為推理機,包括控制程序和推理程序兩部分,負責整個產生式系統(tǒng)的運行,實現(xiàn)對問題的求解。知識庫是是指由綜合數(shù)據庫和規(guī)則庫共同組成的數(shù)據庫。第3章習題1名詞解釋搜索策略、盲目搜索策略、啟發(fā)式搜索策略、啟發(fā)信息、最優(yōu)解、算法的完備性、算法的最優(yōu)性答:略2盲目搜索策略和啟發(fā)式搜索策略的區(qū)別是什么?有哪幾種常用的盲目搜索算法?有哪幾種常用的啟發(fā)式搜索算法?答:盲目搜索策略和啟發(fā)式搜索策略的區(qū)別是:盲目搜索策略是在不具備給定問題的特定知識的情況下,系統(tǒng)按照某種固定的規(guī)則,依次或隨機地調用操作算子;啟發(fā)式搜索策略是考慮給定問題領域的可應用知識,動態(tài)地確定調用操作算子的順序,優(yōu)先選擇當前最合適的操作算子,利用啟發(fā)式信息來進行搜索,盡量減少試探的次數(shù),提高搜索效率。常用的盲目搜索策略有:深度優(yōu)先搜索和寬度優(yōu)先搜索。常用的啟發(fā)式搜索策略有:A搜索和A*搜索。3深度優(yōu)先搜索與寬度優(yōu)先搜索的區(qū)別是什么?分析兩個算法的優(yōu)缺點。答:深度優(yōu)先搜索和寬度優(yōu)先搜索都是常用的盲目搜索算法,其區(qū)別是:節(jié)點在OPEN表中的排列順序是不同的,即擴展節(jié)點的順序不同。深度優(yōu)先搜索總是選擇深度最深的節(jié)點進行擴展,若有多個相同深度的節(jié)點,則按照指定的規(guī)則從中選擇一個。若該節(jié)點沒有子節(jié)點,則選擇一個其他深度最深的節(jié)點進行擴展。依次類推,直到找到問題的解為止;或直到找不到可擴展的節(jié)點,結束。寬度優(yōu)先搜索總是優(yōu)先擴展深度最淺的節(jié)點。先擴展根節(jié)點,再擴展根節(jié)點的所有后繼,然后再擴展它們的后繼,以此類推。如果有多個節(jié)點深度是相同的,則按照事先約定的規(guī)則,從深度最淺的幾個節(jié)點中選擇一個。優(yōu)缺點:(1)深度優(yōu)先搜索算法的優(yōu)點:比寬度優(yōu)先搜索節(jié)省大量時間和空間。缺點:深度優(yōu)先搜索不具有最優(yōu)性,且不一定完備。對于狀態(tài)空間有限的問題,深度優(yōu)先搜索是完備的;但在無限狀態(tài)空間中,若沿著一個“錯誤”的路徑搜索下去而陷入“深淵”,則會導致無法到達目標節(jié)點,深度優(yōu)先搜索是不完備的。(2)寬度優(yōu)先搜索算法的優(yōu)點:是完備的。若路徑代價是節(jié)點深度的非遞減函數(shù),或者每步代價都相等,寬度優(yōu)先搜索還具有最優(yōu)性。缺點:需占用較大的存儲空間。4A搜索與A*搜索的區(qū)別是什么?答:A算法對啟發(fā)函數(shù)未做出任何限制,A搜索是不完備,也不具有最優(yōu)性。而A*搜索算法則對啟發(fā)函數(shù)h(n)加以限制,要求h(n)滿足如下條件:h(n)≤h*(n)。A*算法是完備的,且具有最優(yōu)解。5請用A*算法求解圖3.18中的八數(shù)碼問題:(1)說明所采用的啟發(fā)函數(shù),并證明其滿足A*算法的條件;(2)給出移動數(shù)碼牌的過程,并在每一步都標出此狀態(tài)的f、g、h值。圖3.18八數(shù)碼問題答:令啟發(fā)函數(shù)h=錯位將牌數(shù)證明其滿足A*算法的條件:令d(n)=已移動將牌的步數(shù),即結點n在搜索樹中的深度w(n)=結點n所表示的狀態(tài)中“錯位”的將牌數(shù)將w(n)個“不在位”的將牌放在其各自的目標位置上,至少需要移動w(n)步。h*(n)是結點n從當前位置移動到目標結點的最少實際步數(shù),顯然w(n)≤h*(n).以w(n)作為啟發(fā)式函數(shù)h(n),可以滿足對h(n)的下界的要求,即有h(n)=w(n)≤h*(n).因此,當選擇w(n)作為啟發(fā)式函數(shù)解決8數(shù)碼問題時,A算法就是A*算法。6.針對同一待求解問題,我們可以定義不同的啟發(fā)函數(shù)。例如,在八數(shù)碼問題中,還可以選擇啟發(fā)函數(shù)為:h2(n)=所有錯位數(shù)碼牌與其目標位置的距離之和此處的距離采用曼哈頓距離,曼哈頓距離就是計算兩點之間橫縱坐標的距離之和。在此定義下,圖3.6所示初始狀態(tài)中h=5,則f=5。讀者可以自己證明:采用h2(n)作為啟發(fā)函數(shù),仍滿足A*算法的要求,并用它解決八數(shù)碼問題。答:h2(n)=所有錯位數(shù)碼牌與其目標位置的距離之和證明其滿足A*算法的條件:令d(n)=已移動將牌的步數(shù),即結點n在搜索樹中的深度w(n)=結點n所表示的狀態(tài)中“錯位”的將牌數(shù)M(n)=結點n所表示的狀態(tài)中錯位將牌與其目標位置之間的曼哈頓距離之和將w(n)個“錯位”的將牌放在其各自的目標位置上,至少需要移動M(n)步。h*(n)是結點n從當前位置移動到目標結點的最少實際步數(shù),顯然M(n)≤h*(n).以M(n)作為啟發(fā)式函數(shù)h2(n),可以滿足對h2(n)的下界的要求,即有h2(n)=M(n)≤h*(n).因此,當選擇M(n)作為啟發(fā)式函數(shù)解決8數(shù)碼問題時,A算法就是A*算法。7.爬山法的基本思路和主要特點是什么?有哪些變種的爬山法?其特點是什么?答:爬山法的基本思路:在每個狀態(tài),都是不斷地向啟發(fā)函數(shù)值增加最快的方向持續(xù)移動,即登高。爬山法的主要特點:不完備、不具有最優(yōu)性。變種的爬山法有:隨機爬山法、隨機重啟爬山法。隨機爬山法、隨機重啟爬山法均不完備,但隨機重啟爬山法能以逼近1的概率接近完備。8.模擬退火法的基本思路和主要特點是什么?答:模擬退火法是一種逼近全局最優(yōu)解的概率方法,它是允許“下山”的隨機爬山法。模擬退火法的基本思路是:在退火初期,“下山”(即“變壞”)移動容易被采納,以便擺脫局部極值;但隨著時間的推移,“下山”的次數(shù)越來越少,即逐漸減少向“壞”的方向移動的頻率。模擬退火法的特點:可能會讓算法跳出局部最優(yōu)解,最終找到全局最優(yōu)解。9.遺傳算法的基本思路和主要特點是什么?答:遺傳算法的基本思路:通過模仿自然進化過程來搜索復雜問題的最優(yōu)解。特點:在求解較為復雜的組合優(yōu)化問題時,遺傳算法通常能比一些常規(guī)優(yōu)化算法更快地獲得較好的優(yōu)化結果。在遺傳算法中,后繼節(jié)點是由兩個父輩狀態(tài)組合生成的,而不是對單一狀態(tài)修改而得到的。其處理過程是有性繁殖,而不是無性繁殖。10.適應度函數(shù)在遺傳算法中的作用是什么?試舉例說明如何設計適應度函數(shù)。答:適應度函數(shù)是遺傳算法實現(xiàn)優(yōu)勝劣汰的主要依據。個體適應度的值越大,說明該個體的狀態(tài)越好,競爭能力越強,被選擇參與遺傳操作來產生新個體的可能性就越大,以此體現(xiàn)生物遺傳中適者生存的原理。例如,在八皇后問題中,采用“不相互攻擊的皇后對的數(shù)目”作為適應度函數(shù)。11.說明選擇、交叉、變異操作的作用是什么。答:(1)選擇操作是從當前種群中按照一定概率選出的優(yōu)良個體,使它們有機會作為父代繁殖下一代。其作用是使種群優(yōu)勝劣汰、不斷進化,并且提高種群的收斂速度和搜索效率。交叉操作是遺傳算法中的核心操作。交叉的作用是:獲得比父代更優(yōu)秀的個體。變異的作用:保持種群的多樣性,對選擇、交叉過程中可能丟失的某些遺傳基因進行修復和補充。當發(fā)生早熟收斂時,變異還能跳出局部最優(yōu)解的陷阱。變異操作不僅可以保證實現(xiàn)搜索的目標,而且可以提高搜索的效率。12.遺傳算法中避免局部最優(yōu)解的關鍵技術是什么?答:變異操作。第4章習題什么是機器學習?人工智能、機器學習、深度學習之間的關系是什么?答:機器學習是研究如何使機器模擬或實現(xiàn)人類的學習行為,以獲取知識和技能,并不斷改善系統(tǒng)自身性能的學科。人工智能、機器學習、深度學習之間的關系是人工智能包含機器學習,而機器學習又包含深度學習。機器學習的任務有哪些?應該分別采用哪類學習范式去解決?答:機器學習中的典型任務包括分類、回歸、聚類、排名、降維等。分類、回歸、排名采用監(jiān)督學習方法解決。聚類、降維采用無監(jiān)督學習方法解決。聚類與分類的區(qū)別是什么?有什么相似性?答:聚類與分類的相似性是:均把樣本分成若干組或若干簇;區(qū)別是:聚類是無監(jiān)督學習,分類是有監(jiān)督學習。聚類是事先不知道多少類,也不知道組的名稱。分類是給定輸入,將樣本分成事先定義好名稱的類別。邏輯回歸與線性回歸有什么區(qū)別?答:區(qū)別:線性回歸用于預測連續(xù)值,其輸出的值域是實數(shù)集,其模型是線性的;邏輯回歸主要用于解決分類問題,其輸出的值域為[0,1],其模型是非線性的。KNN算法和K-Means算法的區(qū)別是什么?各有什么局限性?答:區(qū)別:KNN用于解決分類或回歸問題,屬于監(jiān)督學習;K-means用于解決聚類問題,屬于非監(jiān)督學習。共同的局限性為:需要確定k值。若k值不合適,兩個算法的效果不好。強化學習與監(jiān)督學習、無監(jiān)督學習的區(qū)別是什么?答:(1)強化學習與監(jiān)督學習的不同之處在于:①監(jiān)督學習輸入的訓練數(shù)據是包含樣本及其標簽的強監(jiān)督信息,而強化學習從外部環(huán)境接收的反饋信息是一種弱監(jiān)督信息;②監(jiān)督學習是采用正確答案來訓練模型,給予的指導是即時的;而強化學習是采用“試錯”的方式來訓練模型,外部環(huán)境給予它的指導有時是延遲的。(2)強化學習與無監(jiān)督學習的不同之處在于:無監(jiān)督學習輸入的是沒有任何監(jiān)督信息的無標注數(shù)據,而強化學習從環(huán)境獲得的評價信息(不是正確答案)是一種弱監(jiān)督信息,盡管監(jiān)督信息很弱,但總比沒有要好。主動學習與強化學習的區(qū)別是什么?答:雖然強化學習和主動學習都可以減少模型所需的標注數(shù)據量,但它們是非常不同的概念。主動學習側重于主動選擇最具信息量的樣本進行標注,以提高模型性能。強化學習通過與環(huán)境的交互學習,通過觀察環(huán)境的反饋(獎勵或懲罰)來調整行為,以達到最大化長期獎勵的目標。主動學習注重數(shù)據選擇和標注,需要人類的參與;而強化學習注重決策和行為優(yōu)化,未必需要人的參與。主動學習與半監(jiān)督學習的區(qū)別是什么?答:主動學習需要人參與,半監(jiān)督學習不需要人參與。分別在什么場景需要采用不完全監(jiān)督學習、不確切監(jiān)督學習、不準確監(jiān)督學習?答:不完全監(jiān)督學習適用于在訓練數(shù)據中只有一小部分樣本被標注,而大多數(shù)樣本是未標注的情況。例如:在圖像分類任務中,可能只有少數(shù)圖像被手工標注,而大量圖像沒有標注。不完全監(jiān)督學習可用于有效地使用未標注圖像提高分類性能。不確切監(jiān)督學習適用于只有粗粒度標簽的情況。例如,在圖像處理中,可能只有圖像級別的標簽,而沒有像素級別的準確標注。不準確監(jiān)督學習適用于標注數(shù)據標簽可能存在噪聲或錯誤的情況。例如,圖像的標簽是錯的。舉例說明遷移學習可以應用于哪些任務?答:圖像分類、機器翻譯、生成不同風格的繪畫等。針對表1,試編程實現(xiàn)KNN算法,令k=3,預測一個新樣本點(3,4)的類別。表4-1個樣本的坐標與類別點的編號x坐標y坐標類別111C3253C1344C2435C2545C2647C1732C1821C3900C31064C1答:將新樣本點(3,4)記為T,分別計算T與10個已知樣本P的歐氏距離平方:|T-P1|2=(3-1)2+(4-1)2=13;|T-P2|2=(3-5)2+(4-3)2=5;|T-P3|2=(3-4)2+(4-4)2=1;|T-P4|2=(3-3)2+(4-5)2=1;|T-P5|2=(3-4)2+(4-5)2=2;|T-P6|2=(3-4)2+(4-7)2=10;|T-P7|2=(3-3)2+(4-2)2=4;|T-P8|2=(3-2)2+(4-1)2=10;|T-P3|2=(3-0)2+(4-0)2=25;|T-P4|2=(3-6)2+(4-4)2=9;找出其中距離T最小的3個樣本,分別是P3,P4,P5,其中類別為C2的最多。給T標記為C2類別。第5章習題請簡述Sigmoid函數(shù)的優(yōu)缺點。答:sigmoid函數(shù)的優(yōu)點:平滑、易于求導,其導數(shù)可直接用函數(shù)的輸出計算,簡單高效。sigmoid函數(shù)很好地解釋了神經元在受到刺激的情況下是否被激活和向后傳遞的情景。當取值接近0時,幾乎沒有被激活;當取值接近1時,幾乎完全被激活。sigmoid函數(shù)的缺點:當輸入的絕對值大于某個閾值時,會快速進入飽和狀態(tài)(即函數(shù)值趨于1或-1,不再有顯著的變化,梯度趨于0),會出現(xiàn)梯度消失的情況,權重無法再更新,會導致算法收斂緩慢,甚至無法完成深層網絡的訓練。因此在一些現(xiàn)代的神經網絡中,sigmoid函數(shù)逐漸被ReLU激活函數(shù)取代。(2)sigmoid函數(shù)公式中有冪函數(shù),計算耗時長,在反向傳播誤差梯度時,求導運算涉及除法。(3)sigmoid函數(shù)的輸出恒大于0,非零中心化,在多層神經網絡中,可能會造成后面層神經元的輸入發(fā)生偏置偏移,導致梯度下降變慢。請簡述BP學習算法的不足之處。答:(1)BP學習算法是有監(jiān)督學習,需要大量帶標簽的訓練數(shù)據。(2)BP神經網絡中的參數(shù)量大,收斂速度慢,需要較長的訓練時間,學習效率低。(3)BP學習算法采用梯度下降法更新學習參數(shù),容易陷入局部極值,從而找不到全局最優(yōu)解。(4)尚無理論指導如何選擇網絡隱藏層的層數(shù)和神經元的個數(shù),一般是根據經驗或通過反復實驗確定。因此,網絡往往存在很大的冗余性,在一定程度上也增加了網絡學習的負擔。請簡述卷積神經網絡的結構。答:一個卷積神經網絡可以包含多個網絡層,每層網絡由多個獨立的神經元組成。卷積神經網絡中的網絡層主要分為3種類型:卷積層、池化層和全連接層。通常,每個卷積層與最后一個全連接層之后都會采用激活函數(shù)。卷積神經網絡可以像搭積木一樣,通過疊加多個網絡層來組裝。按照神經元之間的連接范圍進行劃分,神經網絡可以分為哪兩大類?答:全連接神經網絡和卷積神經網絡按照網絡層之間的連接方式,神經網絡可以分為哪兩大類?答:前饋神經網絡和反饋神經網絡。假設有一個3層的前饋全連接神經網絡,其輸入層有5個神經元,第一個隱層有10個神經元,第二個隱層有10個神經元,輸出層有2個神經元,請計算神經網絡中的連接總數(shù)。答:170請寫出Sigmoid函數(shù)σx=1答:(σSigmoid函數(shù)與Softmax函數(shù)是否有關聯(lián)?若有,請說明兩者的關聯(lián)。答:Sigmoid是Softmax的特例。當類別數(shù)為2時,Sigmoid就是Softmax。Sigmoid用于隱層,Softmax用于輸出層。若輸入數(shù)據的大小為240×240×3,對其采用大小為4×4、不重疊的池化操作,則池化操作的步長以及池化操作后特征圖的大小分別是多少?答:4,60*60*3請指出人工神經網絡中的超參數(shù)。答:網絡層數(shù);每個隱藏層中濾波器的尺寸、步長、個數(shù);學習率;第6章習題說明CNN結構中1×1卷積的作用,哪個網絡率先使用了1×1卷積?答:(1)1×1卷積的作用是放縮特征圖的通道數(shù),若是降維,可同時減少參數(shù)量和計算量。(2)Inception結構試計算AlexNet的總參數(shù)量,給出詳細的計算過程。答:8層參數(shù)共計60965224個(1)第一個卷積層的參數(shù)量=11*11*3*96+96(偏置)=34944(2)第二個卷積層的96個特征圖分為兩組,各自在一個獨立的GPU上進行運算的參數(shù)量=(5×5×48×128+128)×2=307456(3)第三個卷積層的參數(shù)數(shù)量:3×3×256×384+384(偏置)=885120(4)第四個卷積層的參數(shù)數(shù)量:(3×3×192×192+192)×2=663936(5)第五個卷積層的參數(shù)數(shù)量:(3×3×192×128+128)×2=442624(6)第1個全連接層的參數(shù)量=(6×6×256)×4096+4096(偏置)=37752832(7)第2個全連接層的參數(shù)量=4096×4096+4096=16781312(8)第3個全連接層的參數(shù)量=4096×1000+1000=4097000請說明InceptionV1模塊中的分支MaxPool3×3+1(S)表示什么操作,為什么1×1卷積要放在MaxPool3×3+1(S)之后執(zhí)行?答:(1)InceptionV1模塊中的分支MaxPool3×3+1(S)表示:采用3×3的重疊最大池化,步長為1,padding=same(pad=1),保證輸出與輸入的特征圖尺寸相同。Inception模塊中所有的池化操作并非都為了下采樣,分支MaxPool3×3+1(S)只是為了能提取最大特征且無需學習卷積中的參數(shù)。(2)MaxPool3×3+1(S)沒有參數(shù),故1×1卷積放在其前與放在其后的參數(shù)量是一樣的。之所以放在其后,是要在不增加參數(shù)量的前提下,盡可能保留最顯著(最大值)特征,先做1×1卷積,會損失特征圖的深度信息(變薄了)。請說明BatchNormalization(BN)的作用。答:在使用梯度下降法求最優(yōu)解時,防止梯度爆炸或彌散,加快收斂速度;可以提高訓練時模型對于不同超參(學習率、初始化)的魯棒性;可以使大部分激活函數(shù)能夠遠離其飽和區(qū)域。請描述Inception(4b)模塊的結構細節(jié)。答:Inception(4b)模塊分為四個分支,采用不同尺度的卷積核來進行處理1)第1個分支Conv1×1+1(s)表示:160個1×1×512的卷積核,步長為1,padding=same(pad=0),采用ReLU激活函數(shù),輸出14×14×160。2)第2個分支Conv1×1+1(s)表示:112個1×1×512的卷積核(reductionlayers),作為3×3卷積核之前的降維,步長為1,padding=same(pad=0),ReLU計算,變成14×14×112;然后,Conv3×3+1(s)表示:224個3×3×112的卷積,步長為1,padding=same(pad=1),ReLU計算后,輸出14×14×224。3)第3個分支Conv1×1+1(s)表示:24個1×1×512的卷積核(reductionlayers),作為5×5卷積核之前的降維,步長為1,padding=same(pad=0),ReLU計算,變成14×14×24;然后,Conv5×5+1(s)表示:64個5×5×24的卷積,步長為1,padding=same(pad=2),ReLU計算后,輸出14×14×64。4)第4個分支MaxPool3×3+1(S)表示:采用3×3的重疊最大池化,步長為1,padding=same(pad=1),輸出14×14×512;然后,Conv1×1+1(s)表示:64個1×1×512的卷積(projectionlayer),步長為1,padding=same(pad=0),ReLU計算,輸出14×14×64。DepthContat表示將四個分支的特征圖層依次拼接起來,通道數(shù)為160+224+64+64=512,形成14×14×512的特征圖層。請說明ResNet和DenseNet中短路連接機制的不同之處。答:(1)兩個網絡中短路連接的密集程度不同。由于ResNet的一個殘差模塊一般只包含2~3個卷積層,所以,每層只跨越2~3層與其前面的某一層直接連接,形成短路(或捷徑)。而DenseNet的一個DenseBlock模塊一般包含6~64個卷積層,同一模塊中的所有層均互相連接。顯然,DenseNet網絡中的短路連接比ResNet中的更為密集,更好地實現(xiàn)了特征重用,增強了特征在各個層之間的傳播。(2)兩個網絡中短路連接的方式不同。在ResNet網絡的同一殘差模塊中,對于殘差映射特征圖與恒等映射特征圖,執(zhí)行對應位置上的元素級相加(element-wiseaddition)操作。而在DenseNet網絡的同一DenseBlock模塊中,每層都會與其前面所有層在通道維度上作拼接(channel-wiseconcatenation)操作,并作為下一層的輸入。假設輸入圖像為W×W×3,要求輸出大小為W×W×256的特征圖,請給出兩種升維的方法,并分別計算兩種方法的參數(shù)量。答:第一種方法:直接用256個3×3×3的濾波器,padding=same參數(shù)量為:3×3×3(深度)×256=6,912第二種方法,分兩步完成:第1步:先用1個3×3×3濾波器做卷積操作,padding=same得到W×W×1。參數(shù)量=3×3×3=27.第2步:用256個1×1×1濾波器做卷積操作,得到W×W×256總參數(shù)量為:3×3×3+3×1×1×256=795,是6912的1/9!假設上一網絡層的輸出為100×100×128,要求得到100×100×256的特征圖,請給出兩種方法,并分別計算兩種方法的參數(shù)量和計算量。答:第一種方法:經過具有256個通道的5×5卷積層之后(stride=1,pad=2),輸出數(shù)據為100×100×256,其中,參數(shù)量為128×5×5×256=819200。第二種方法:上一層輸出先經過32個1x1×128濾波器,得到100×100×32特征圖;再經過256個5×5×32(stride=1,pad=2)濾波器,那么輸出數(shù)據仍為100×100×256,但參數(shù)量已經減少為1x1x128x32+5x5x32x256=204800。參數(shù)量大約減少了4倍。第7章習題1.請簡述數(shù)字圖像的定義,并說明常用的數(shù)字圖像類型。答:數(shù)字圖像是指用數(shù)字攝像機、掃描儀等成像設備經過采樣和數(shù)字化得到的一個二維數(shù)組或矩陣,該數(shù)組或矩陣的元素稱為像素(pixel),像素值均為整數(shù),稱為灰度值。常用的數(shù)字圖像有二值圖像、灰度圖像、彩色圖像、RGBD圖像等。2.請簡要描述圖像處理的任務。答:圖像處理的任務包括:圖像采集與獲取、圖像變換、圖像去噪、圖像增強、圖像復原、圖像重建、圖像編解碼、圖像壓縮、圖像邊緣檢測、圖像分割、圖像表示與描述、圖像特征提取與分析、圖像質量評價、圖像目標檢測、圖像分類、圖像識別、圖像理解等。3.請簡述HOG圖像特征提取的過程。答:HOG圖像特征提取主要分為5個環(huán)節(jié):彩色圖像的灰度化、灰度值的Gamma校正、梯度計算、細胞單元的梯度直方圖繪制、塊特征向量表示。第一步:利用加權平均或其他方式將彩色的RGB圖像轉化為灰度圖像;第二步:通過對像素值進行歸一化、預補償和反歸一化完成圖像的Gamma校正;第三步:使用差分方式計算每個像素點的水平和垂直梯度,綜合得像素點的梯度;第四步:將圖像劃分為一個個細胞單元后,梯度按照角度不同分為K個組,據此細胞單元內的像素點歸入不同的梯度組,并累計像素點的梯度幅值作為該組權重,最終統(tǒng)計得細胞單元得梯度直方圖,作為細胞單元的K維特征向量;第五步:將相鄰的m×m細胞單元組合為塊,隨之,K維特征向量組合為m×m×K維特征向量,并將各維除以特征長度完成歸一化。通過塊在圖上的范圍移動可以計算出所有的塊特征向量,組合即得此圖的HOG特征表示。4.請簡述傳統(tǒng)圖像目標檢測的流程,并給出目標檢測的評價指標。答:傳統(tǒng)圖像目標檢測的流程一般分為4個階段:預處理圖像、生成目標候選區(qū)域、提取目標候選區(qū)域的特征、訓練目標分類器。第一步:首先對圖像執(zhí)行降噪、增強等預處理操作,提高圖像信息的有效性;之后按需要將數(shù)據劃分為訓練集、測試集、驗證集;第二步:通過滑動窗口遍歷的方式獲取目標候選區(qū)域;第三步:利用HOG、SIFT等特征表示方法描述各目標候選區(qū)域;第四步:首先選擇適配的分類器和訓練算法,然后將訓練集圖像中各候選區(qū)域的特征向量和對應標簽匹配,并輸入分類器按優(yōu)化算法訓練模型。新圖像在獲取候選區(qū)域后便可利用所得模型進行目標檢測。目標檢測的評價指標有交并比、精確度和召回率、AP、MAP等。5.圖像分割包含哪幾種?請簡述它們之間的區(qū)別和聯(lián)系。答:圖像分割包括:語義分割、實例分割和全景分割。語義分割是指對圖像進行像素級分類,將同類像素點合并成一個區(qū)域,以實現(xiàn)對圖像的分割;實例分割比語義分割要求高,除了需要完成語義分割任務之外,還需要識別圖像中每個目標實例對應的像素區(qū)域,獲得每個目標的輪廓;全景分割則是結合了語義分割和實例分割,不僅要對所有像素點進行分類,還應識別出圖像中存在的所有目標實例。6.請簡述遷移學習的定義,并說明在圖像分類中是如何應用遷移學習的。答:遷移學習是將在一個領域(稱為源領域)的知識遷移到另外一個領域(稱為目標領域),使得在目標領域能夠取得更好的學習效果。遷移學習是模仿人類“舉一反三”的能力。一般是基于模型進行遷移,即在已用其他圖像數(shù)據訓練好的分類模型上利用新的圖像數(shù)據進行微調,而不是從零開始訓練深度學習圖像分類模型。7.請簡述圖像分類的評價指標。答:圖像分類評價指標:Precision、Recall、Specificity、Accuracy、F-measure、AUC、AP、以及MAP等。8.請分別列舉幾個典型的圖像分類、圖像目標檢測和圖像分割常用的深度學習模型。答:圖像分類常用的深度學習模型:AlexNet、VGGNet、GoogLeNet和ResNet等;圖像目標檢測常用的深度學習模型:R-CNN、FastR-CNN、FasterR-CNN、YOLO、SSD等。圖像分割常用的深度學習模型:FCN、U-Net、

SegNet、DeepLab、MaskR-CNN等。第8章習題1.請簡述利用Scikit-learn庫進行模型超參數(shù)選擇的過程。答:可先預設需要優(yōu)化的超參數(shù)候選數(shù)值集合,以及模型性能比較的指標,然后構建model_selection模塊中的GridSearchCV對象進行模型篩選,最后訪問best_params_屬性獲取最佳的超參數(shù)組合。2.對于二分類的機器學習任務,請簡述利用ROC曲線選擇合適分類閾值的過程。答:ROC曲線顯示了不同分類閾值下模型的真正例率(TPR)和假正例率(FPR),可以通過觀察約登指數(shù)(Youdenindex)的大小來選擇合適的分類閾值,利用敏感度和特異度之和減去1:Youdenindex=TPR+(1-FPR)–1,約登指數(shù)范圍在0-1之間,越接近1表示分類效果很好。最佳閾值就是使得約登指數(shù)最大的那個點。3.請簡述自動求導機制。答:自動求導機制是一種在神經網絡計算框架中實現(xiàn)梯度計算的技術,它可以根據網絡結構和損失函數(shù)構建動態(tài)計算圖,然后再通過反向傳播進行梯度計算,從而實現(xiàn)參數(shù)的更新。4.請簡述PyTorch與Scikit-learn之間的差異。答:PyTorch是一個深度學習框架,主要用于構建和訓練神經網絡。而Scikit-learn是一個通用的機器學習庫,提供了很多常用的機器學習算法和數(shù)據處理方法。兩者有時也可以結合使用,例如在使用PyTorch框架之前,可以用Scikit-learn對數(shù)據進行預處理。5.請簡述PyTorch中Tensor和Function的關系。答:PyTorch中的Tensor是一種類似于Numpy的多維數(shù)組,可以用于存儲和操作數(shù)據。Function是一種用于定義Tensor之間的運算和變換的對象,可以實現(xiàn)自動求導功能。兩者的關系通過一個屬性grad_fn來體現(xiàn),grad_fn表示了當前Tensor是如何從其他Tensor計算得到的。這樣在我們需要計算梯度時,PyTorch可以通過反向追蹤grad_fn來構建動態(tài)計算圖,并使用鏈式法則來自動求導。6.請簡述PyTorch中如何利用動態(tài)計算圖實現(xiàn)自動求導。答:可分為以下四步:(1)在我們創(chuàng)建一個Tensor時,可以設置它的requires_grad屬性為True,表示我們需要對它進行求導。(2)當我們對Tensor進行各種運算和變換時,PyTorch會自動記錄這些操作,并構建一個由Function對象組成的有向無環(huán)圖(DAG),表示Tensor之間的關系。(3)當我們調用Tensor的backward()方法時,PyTorch會從當前Tensor開始。沿著動態(tài)計算圖反向傳播,根據鏈式法則計算每個Tensor的梯度,并將結果保存在它們的grad屬性中。(4)通過訪問Tensor的grad屬性即可獲取梯度值。7.請描述PyTorch中model.train()和model.eval()的作用。答:model.train()的作用是啟用BatchNormalization和Dropout,在訓練時有助于防止過擬合,但在測試時會影響模型的輸出。model.eval()的作用是不啟用BatchNormalization和Dropout,這樣可以保證模型在測試時的輸出是確定的,不受隨機因素的影響。一般來說,在訓練時我們需要調用model.train(),在測試或預測時我們需要調用model.eval()。8.請描述PyTorch中選擇深度學習模型的超參數(shù)的過程。答:可以分為以下幾步進行:(1)定義一個超參數(shù)空間,即需要調整的超參數(shù)的范圍和分布,例如學習率、批量大小等。(2)定義一個目標函數(shù),即需要優(yōu)化的指標,例如準確率、損失函數(shù)等。(3)選擇一個搜索算法,即用于探索超參數(shù)空間的方法,例如網格搜索、隨即搜索、貝葉斯優(yōu)化等。(4)運行多次實驗,每次實驗根據搜索算法從超參數(shù)空間采樣一組超參數(shù),并使用PyTorch構建和訓練模型,記錄目標函數(shù)的值。(5)分析實驗結果,找出最優(yōu)的一組超參數(shù)。9.請簡述如何使用PyTorch構建和加載自定義數(shù)據集。答:(1)定義一個繼承自torch.utils.data.Dataset的類,并實現(xiàn)三個方法:__init__,__len__和__getitem__。在__init__函數(shù)中,需要加載所有樣本和標簽數(shù)據;在__len__函數(shù)中需要返回樣本的數(shù)量;在__getitem__函數(shù)中,需要根據輸入的樣本索引返回對應的樣本特征張量和對應的標簽。(2)創(chuàng)建一個torch.utils.data.DataLoader對象,傳入數(shù)據集對象和其他參數(shù),如batch_size,shuffle等。(3)迭代DataLoader對象來獲取批量的樣本和標簽。10.請簡述Scikit-learn模型訓練過程。答:Scikit-learn模型訓練過程大致分為以下幾個步驟:(1)導入Scikit-learn模塊和所需的算法,如fromsklearnimportlinear_model。(2)準備數(shù)據集,將特征和標簽分開,如X=mnist.data,y=mnist.target。(3)劃分訓練集和測試集,如fromsklearn.model_selectionimporttrain_test_split,X_train,X_test,y_train,y_test=train_test_split(X,y)。(4)創(chuàng)建模型,如model=linear_model.LinearRegression()。(5)訓練模型,使用fit方法,如model.fit(X_train,y_train)。(6)評估模型,使用score或predict方法,如model.score(X_test,y_test),y_pred=model.predict(X_test)。第9章習題1.請簡述構建機器學習模型的基本步驟。答:(1)數(shù)據預處理:對原始數(shù)據進行清洗、數(shù)學表示、數(shù)學變換、數(shù)據整合和特征選擇等操作,使其符合模型輸入的要求。(2)數(shù)據集構建:根據根據數(shù)據分布規(guī)律和任務特點設計合理的樣本選擇和劃分策略,以特定比例將樣本分為訓練集、驗證集或測試集。(3)模型構建:根據目標和數(shù)據選擇合適的機器學習算法(如決策樹、支持向量機等),并設置相關的超參數(shù)(如學習率、正則化系數(shù)等)。(4)模型訓練:使用訓練集數(shù)據對模型進行擬合,優(yōu)化模型參數(shù),提高模型性能。(5)模型性能評估及測試:根據機器學習任務類型和目標選擇合適的單個或多個性能評價指標(AUC、敏感度、特異度、精度及F1等),并且通過比較模型在訓練集和驗證或測試集上性能的差別評估是否存在過擬合問題。根據模型性能評估結果可對預測誤差較大的樣本進行分析,尋找模型改進策略。(6)模型超參數(shù)優(yōu)化:當模型存在多個超參數(shù)時,可以基于搭建的模型訓練和評估流程,通過枚舉或搜索等方式比較不同超參數(shù)組合下模型訓練和評估的性能指標差異,尋找最佳的超參數(shù)組合。2.請簡述paddle.nn.Sequential類和paddle.nn.Layer類的作用與區(qū)別。答:paddle.nn.Sequential類是一個順序容器,它可以將多個子Layer按照構造函數(shù)參數(shù)的順序添加到容器中,并按照順序依次執(zhí)行。paddle.nn.Layer類是所有神經網絡層的基類,它定義了一些通用的屬性和方法,例如name_scope、parameters、sublayers等,用戶可以通過繼承Layer類來自定義自己的神經網絡層。3.請簡述百度飛槳框架中Model.fit方法的作用及其對應的運算過程。答:Model.fit方法是百度飛槳框架中的一個高層API,用于完成模型的訓練和保存。它的運算過程大致如下:(1)將模型封裝為paddle.Model對象,并指定優(yōu)化器、損失函數(shù)和評估指標。(2)調用Model.fit方法,傳入訓練數(shù)據、訓練輪數(shù)、批次大小、保存路徑等參數(shù)。(3)Model.fit方法在每個批次上執(zhí)行前向傳播、反向傳播和參數(shù)更新,并在每個輪數(shù)結束時計算評估指標。(4)Model.fit方法在指定的保存路徑下保存模型的參數(shù)和優(yōu)化器狀態(tài),并輸出訓練日志。4.請采用非線性擬合的LSTM模型(paddle.nn.LSTM)完成波士頓房價預測任務。答:importpaddle

paddle.device.set_device("gpu")

#設置默認的全局dtype為float64

paddle.set_default_dtype("float64")

#下載數(shù)據

train_dataset=paddle.text.datasets.UCIHousing(mode='train')

test_dataset=paddle.text.datasets.UCIHousing(mode='test')

#定義LSTM網絡結構

classLSTM(paddle.nn.Layer):

def__init__(self):

super(LSTM,self).__init__()

self.lstm=paddle.nn.LSTM(input_size=13,hidden_size=32,num_layers=1)

self.linear=paddle.nn.Linear(in_features=32,out_features=1)

defforward(self,x):

x=paddle.unsqueeze(x,axis=1)#在中間維度上增加一個維度,變成三維張量

x,_=self.lstm(x)#x.shape:(batch_size,seq_len,hidden_size)

x=x[:,-1,:]#取最后一個時刻的輸出作為全連接層的輸入,x.shape:(batch_size,hidden_size)

x=self.linear(x)#x.shape:(batch_size,output_size)

returnx

#模型訓練配置

model=paddle.Model(LSTM())

model.prepare(optimizer=paddle.optimizer.Adam(learning_rate=0.001,parameters=model.parameters()),loss=paddle.nn.MSELoss())

#訓練并驗證模型

model.fit(train_data=train_dataset,eval_data=test_dataset,epochs=10,batch_size=8,verbose=1)5.請采用LeNet模型完成手寫體數(shù)字識別任務,實現(xiàn)完整的模型訓練和預測過程。答:frompaddle.metricimportAccuracy

frompaddle.vision.transformsimportCompose,Normalize

importnumpyasnp

importpaddle

importmatplotlib.pyplotasplt

paddle.device.set_device("gpu")

transform=Compose([Normalize(mean=[127.5],std=[127.5],data_format='CHW')])

#使用transform對數(shù)據集做歸一化

train_dataset=paddle.vision.datasets.MNIST(mode='train',transform=transform)

test_dataset=paddle.vision.datasets.MNIST(mode='test',transform=transform)

#定義模型,使用paddle里自帶的LeNet函數(shù)

LeNet=paddle.vision.models.LeNet(num_classes=10)

#用Model封裝模型

model=paddle.Model(LeNet)

optimizer=paddle.optimizer.Adam(learning_rate=0.001,parameters=model.parameters())

#配置模型

model.prepare(optimizer,paddle.nn.CrossEntropyLoss(),Accuracy())

#模型訓練

#model.fit(train_dataset,test_dataset,epochs=2,batch_size=64,save_dir='multilayer_perceptron',verbose=1)

model.fit(train_dataset,test_dataset,epochs=2,batch_size=64,verbose=1)

#獲取測試集的第一個圖片

test_data0,test_label_0=test_dataset[0][0],test_dataset[0][1]

test_data0=test_data0.reshape([28,28])

plt.figure(figsize=(2,2))

#展示測試集中的第一個圖片

print(plt.imshow(test_data0,cmap=plt.cm.binary))

plt.show()

print('test_data0的標簽為:'+str(test_label_0))

#模型預測

result=model.predict(test_dataset,batch_size=1)

print('test_data0預測的數(shù)值為:%d'%np.argsort(result[0][0])[0][-1])6.請采用飛槳框架構建多層卷積神經網絡,完成鳶尾花分類任務。答:importnumpyasnp

importpaddle.nn.functionalasF

importpaddle

fromsklearnimportmodel_selection

paddle.device.set_device("gpu")

#設置默認的全局dtype為float64

paddle.set_default_dtype("float64")

#類別標簽轉化

defIris_type(s):

it={b'Iris-setosa':0,b'Iris-versicolor':1,b'Iris-virginica':2}

returnit[s]

#數(shù)據準備

#加載數(shù)據,本地若沒有鳶尾花數(shù)據集需下載到本地

data=np.loadtxt('./datasets/Iris.data',#數(shù)據文件路徑

dtype=float,#數(shù)據類型

delimiter=',',#數(shù)據分割符

converters={4:Iris_type})#將第五列使用函數(shù)Iris_type進行轉換

#數(shù)據分割

x,y=np.split(data,(4,),axis=1)#數(shù)據分組第五列開始往后為y代表縱向分割按列分割

x_train,x_test,y_train,y_test=model_selection.train_test_split(x,y,random_state=1,test_size=0.2)

x_train=paddle.to_tensor(x_train)

x_test=paddle.to_tensor(x_test)

y_train=paddle.to_tensor(y_train)

y_test=paddle.to_tensor(y_test)

classMyDataset(paddle.io.Dataset):

def__init__(self,feature,label):

#初始化數(shù)據集

self.data=feature

self.label=label

def__getitem__(self,index):

#根據索引返回樣本和標簽

returnself.data[index],self.label[index]

def__len__(self):

#返回數(shù)據集大小

returnlen(self.data)

train_dataset=MyDataset(feature=x_train,label=y_train)

test_dataset=MyDataset(feature=x_test,label=y_test)

#構建多層卷積神經網絡

classCNN(paddle.nn.Layer):

def__init__(self):

super(CNN,self).__init__()

#創(chuàng)建卷積和池化層塊,每個卷積層后面接著2x2的池化層

#卷積層L1

self.conv1=paddle.nn.Conv1D(in_channels=1,

out_channels=16,

kernel_size=2)

#池化層L2

self.pool1=paddle.nn.MaxPool1D(kernel_size=2)

#卷積層L3

self.conv2=paddle.nn.Conv1D(in_channels=16,

out_channels=32,

kernel_size=2)

#池化層L4

self.pool2=paddle.nn.MaxPool1D(kernel_size=4)

#線性層L5

self.fc=paddle.nn.Linear(64,3)

#正向傳播過程

defforward(self,x):

x=paddle.unsqueeze(x,axis=1)#在最后一個維度上增加一個維度,變成三維張量

x=self.conv1(x)

x=F.relu(x)

x=self.pool1(x)

x=F.relu(x)

x=self.conv2(x)

x=self.pool2(x)

x=paddle.flatten(x,start_axis=1,stop_axis=-1)

out=self.fc(x)

returnout

model=paddle.Model(CNN())

model.prepare(paddle.optimizer.Adam(parameters=model.parameters()),

paddle.nn.CrossEntropyLoss(),

paddle.metric.Accuracy())

model.fit(train_dataset,

epochs=5,

batch_size=10,

verbose=1)

model.evaluate(x_test,y_test,verbose=1)7.請在9.3節(jié)手寫體數(shù)字識別的模型訓練和測試過程中,增加其他性能指標的計算和比較(如AUC、敏感度、特異度等)。答:frompaddle.metricimportAccuracy

frompaddle.vision.transformsimportCompose,Normalize

fromsklearn.metricsimportroc_curve,auc,confusion_matrix

fromsklearn.preprocessingimportOneHotEncoder

importnumpyasnp

importpaddle.nn.functionalasF

importpaddle.nnasnn

importpaddleaspaddle

importmatplotlib.pyplotasplt

paddle.device.set_device("gpu")

transform=Compose([Normalize(mean=[127.5],std=[127.5],data_format='CHW')])

#使用transform對數(shù)據集做歸一化

train_dataset=paddle.vision.datasets.MNIST(mode='train',transform=transform)

test_dataset=paddle.vision.datasets.MNIST(mode='test',transform=transform)

test_loader=paddle.io.DataLoader(test_dataset,batch_size=100)

classmnist(paddle.nn.Layer):

def__init__(self):

super(mnist,self).__init__()

self.fc1=nn.Linear(in_features=28*28,out_features=100)

self.fc2=nn.Linear(in_features=100,out_features=100)

self.fc3=nn.Linear(in_features=100,out_features=10)

defforward(self,input_):

x=paddle.reshape(input_,[input_.shape[0],-1])

x=self.fc1(x)

x=F.relu(x)

x=self.fc2(x)

x=F.relu(x)

x=self.fc3(x)

y=F.softmax(x)

returny

#用Model封裝模型

model=paddle.Model(mnist())

optimizer=paddle.optimizer.Adam(learning_rate=0.001,parameters=model.parameters())

#配置模型

model.prepare(optimizer,paddle.nn.CrossEntropyLoss(),Accuracy())

#模型訓練

model.fit(train_dataset,test_dataset,epochs=2,batch_size=64,verbose=1)

y_true=[]#真實標簽列表

y_score=[]#預測得分列表

fpr=[]

tpr=[]

roc_auc=[]#auc值列表

fordataintest_loader:

x,y=data#x是輸入,y是真實標簽

out=model.predict(x)#out是輸出,包含預測得分

y_true.extend(y.numpy().tolist())#將真實標簽添加到列表中

y_score.extend(out)#將預測得分添加到列表中

#創(chuàng)建一個one-hot編碼器實例

encoder=OneHotEncoder()

#對真實標簽進行one-hot編碼

y=encoder.fit_transform(y_true).toarray()

y_true=y.reshape(-1,10)

y_score=np.array(y_score)

y_score=y_score.reshape(-1,10)

#單獨計算每一類對應的AUC值

foriinrange(10):

FPR,TPR,_=roc_curve(y_true[:,i],y_score[:,i])

fpr.append(FPR)

tpr.append(TPR)

Roc_auc=auc(fpr[i],tpr[i])

roc_auc.append(Roc_auc)

#plotROCcurvesforeachclass

colors=['blue','red','green','black','gray','gold','yellow','orange','pink','teal']

foriinrange(10):

plt.plot(fpr[i],tpr[i],color=colors[i],

label='ROCcurveofclass{0}(area={1:0.2f})'

''.format(i+1,roc_auc[i]))

print('AUC值:{}'.format(roc_auc))

#計算分類閾值為0.5時模型的敏感度特異度

y_predict=[]

foriinrange(10):

row=[]

forjinrange(len(y_score)):

ify_score[j,i]>0.5:

row.append(1)

else:

row.append(0)

y_predict.append(row)

#使用混淆矩陣計算敏感度、特異度

y_predict=np.array(y_predict)

y_predict=y_predict.reshape(-1,10)

foriinrange(10):

tn,fp,fn,tp=confusion_matrix(y_true[:,i],y_predict[:,i]).ravel()

TPR=tp/(tp+fn)

FPR=fp/(tn+fp)

print('數(shù)字{}對應的敏感度特異度分別為:{}{}'.format(i,TPR,1-FPR))

#獲取測試集的第一個圖片

test_data0,test_label_0=test_dataset[0][0],test_dataset[0][1]

test_data0=test_data0.reshape([28,28])

plt.figure(figsize=(2,2))

#展示測試集中的第一個圖片

print(plt.imshow(test_data0,cmap=plt.cm.binary))

plt.show()

print('test_data0的標簽為:'+str(test_label_0))

#模型預測

result=model.predict(test_dataset,batch_size=1)

print('test_data0預測的數(shù)值為:%d'%np.argsort(result[0][0])[0][-1])8.請在9.3節(jié)手寫體數(shù)字識別程序中增加模型超參數(shù)選擇的過程,尋找最優(yōu)的模型學習率和全連接層層數(shù)。答:frompaddle.metricimportAccuracy

frompaddle.vision.transformsimportCompose,Normalize

importnumpyasnp

importpaddle.nn.functionalasF

importpaddle.nnasnn

importpaddleaspaddle

importmatplotlib.pyplotasplt

paddle.device.set_device("gpu")

transform=Compose([Normalize(mean=[127.5],std=[127.5],data_format='CHW')])

#使用transform對數(shù)據集做歸一化

train_dataset=paddle.vision.datasets.MNIST(mode='train',transform=transform)

test_dataset=paddle.vision.datasets.MNIST(mode='test',transform=transform)

test_loader=paddle.io.DataLoader(test_dataset,batch_size=100)

#先列出幾種模型超參數(shù)對應的集合,為方便只列出幾種

learningrates=[0.001,0.005,0.01]

FC1=[200,100]

FC2=[100,50]

classmnist(paddle.nn.Layer):

def__init__(self):

super(mnist,self).__init__()

self.fc1=nn.Linear(in_features=28*28,out_features=m)

self.fc2=nn.Linear(in_features=m,out_features=n)

self.fc3=nn.Linear(in_features=n,out_features=10)

defforward(self,input_):

x=paddle.reshape(input_,[input_.shape[0],-1])

x=self.fc1(x)

x=F.relu(x)

x=self.fc2(x)

x=F.relu(x)

x=self.fc3(x)

y=F.softmax(x)

returny

#從所列超參數(shù)集合中選取參數(shù),觀察每次組合對應在測試數(shù)據集上的準確率以此選取最優(yōu)超參數(shù)

foriinlearningrates:

forminFC1:

forninFC2:

#用Model封裝模型

model=paddle.Model(mnist())

optimizer=paddle.optimizer.Adam(learning_rate=i,parameters=model.parameters())

#配置模型

model.prepare(optimizer,paddle.nn.CrossEntropyLoss(),Accuracy())

#返回模型預測值對應的標簽

predict=paddle.to_tensor(model.predict(test_dataset))

predict=paddle.reshape(predict,(-1,10))

label=paddle.argmax(predict,axis=1)

#print(label)

labels=paddle.to_tensor(test_dataset.labels)

#模型訓練

model.fit(train_dataset,epochs=2,batch_size=64,verbose=1)

acc=paddle.fluid.layers.accuracy(predict,labels)

print('學習率為{},全連接層第一層數(shù)為{},第二層為{}時,模型在測試集上的準確率為:{}'.format(i,m,n,acc))

#獲取測試集的第一個圖片

tes

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論