日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人工智能 > pytorch >内容正文

pytorch

【Pytorch with fastai】第 1 章:你的深度学习之旅

發布時間:2023/12/20 pytorch 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【Pytorch with fastai】第 1 章:你的深度学习之旅 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

????????🔎大家好,我是Sonhhxg_柒,希望你看完之后,能對你有所幫助,不足請指正!共同學習交流🔎

📝個人主頁-Sonhhxg_柒的博客_CSDN博客?📃

🎁歡迎各位→點贊👍 + 收藏?? + 留言📝?

📣系列專欄 - 機器學習【ML】?自然語言處理【NLP】? 深度學習【DL】

?

?🖍foreword

?說明?本人講解主要包括Python、機器學習(ML)、深度學習(DL)、自然語言處理(NLP)等內容。

如果你對這個系列感興趣的話,可以關注訂閱喲👋

文章目錄

深度學習適合所有人

神經網絡:簡史

如何學習深度學習

你的項目和你的心態

軟件:PyTorch、fastai 和 Jupyter?(以及為什么不重要)

您的第一個模型

獲取 GPU 深度學習服務器

行話:圖形處??理單元 (GPU)

行話:JUPYTER NOTEBOOK

運行你的第一臺筆記本

完整和剝離的筆記本

訓練時間

什么是機器學習?

行話:機器學習

什么是神經網絡?

一點深度學習術語

機器學習固有的局限性

我們的圖像識別器如何工作

行話:分類和回歸

驗證集

行話:遷移學習

行話:微調

我們的圖像識別器學到了什么

圖像識別器可以處理非圖像任務

行話回顧

深度學習不僅僅用于圖像分類

行話:表格

驗證集和測試集

在定義測試集時使用判斷

進一步的研究


深度學習適合所有人

很多人認為你需要各種難以找到的東西才能通過深度學習獲得好的結果,但正如你將在本書中看到的那樣,這些人是錯誤的。?表 1-1列出了世界級深度學習絕對不需要的一些東西。

表 1-1。深度學習不需要什么傳說中(不需要)真實

很多數學

高中數學就夠了。

大量數據

我們已經看到了少于 50 項數據的破紀錄結果。

很多昂貴的電腦

您可以免費獲得最先進的工作所需的東西。

深度學習是一種提取和轉換數據的計算機技術——用例從人類語音識別到動物圖像分類——通過使用多層神經網絡。這些層中的每一層都從先前的層中獲取輸入并逐步細化它們。這些層通過算法進行訓練,以最大限度地減少錯誤并提高其準確性。通過這種方式,網絡學習執行指定的任務。我們將在下一節詳細討論訓練算法。

深度學習具有強大的功能、靈活性和簡單性。這就是為什么我們認為它應該應用于許多學科。這些包括社會和物理科學、藝術、醫學、金融、科學研究等等。舉一個個人的例子,盡管杰里米沒有醫學背景,但他開始Enlitic,一家使用深度學習算法診斷疾病的公司。在公司成立后的幾個月內,宣布其算法可以?比放射科醫生更準確地識別惡性腫瘤。

以下是深度學習或大量使用深度學習的方法現在是世界上最好的不同領域的數千個任務的列表:

自然語言處理 (NLP)

回答問題;語音識別;?總結文件;分類文件;在文件中查找姓名、日期等;搜索提及概念的文章

計算機視覺

衛星和無人機圖像解釋(例如,用于抗災)、人臉識別、圖像?字幕,閱讀交通標志,在自動駕駛汽車中定位行人和車輛

藥物

在放射學圖像中發現異常,包括 CT、MRI 和 X 射線圖像;計數病理切片中的特征;測量超聲波的特征;診斷糖尿病視網膜病變

生物學

折疊蛋白;分類蛋白質;許多基因組學任務,例如腫瘤正常測序和臨床上可行的基因突變分類;細胞分類;分析蛋白質/蛋白質相互作用

圖像生成

著色圖像,提高圖像分辨率,去除圖像中的噪聲,將圖像轉換為著名藝術家風格的藝術

推薦系統

網頁搜索、產品推薦、首頁布局

玩游戲

國際象棋、圍棋、大多數 Atari 視頻游戲和許多實時戰略游戲

機器人技術

處理難以定位(例如透明、有光澤、缺乏紋理)或難以拾取的物體

其他應用

財務和后勤預測、文本轉語音等等……

值得注意的是,深度學習有如此多樣的應用,但幾乎所有的深度學習都基于一種創新的模型:神經網絡。

但事實上,神經網絡并不是全新的。為了對該領域有更廣闊的視野,值得從一點歷史開始。

神經網絡:簡史

1943 年,神經生理學家 Warren McCulloch 和邏輯學家 Walter Pitts,聯手開發了一個人工神經元的數學模型。在他們的論文“神經活動中內在思想的邏輯演算”中,他們宣布了以下內容:

由于神經活動的“全有或全無”特性,神經事件及其之間的關系可以用命題邏輯來處理。發現每個網絡的行為都可以用這些術語來描述。

McCulloch 和 Pitts 意識到可以使用簡單的加法和閾值化來表示真實神經元的簡化模型,?如圖 1-1所示。皮茨是自學成才的,到 12 歲時,他收到了劍橋大學的錄取通知書,師從偉大的伯特蘭·羅素。他沒有接受這個邀請,實際上他一生都沒有接受任何高級學位或權威職位的提議。他的大部分著名作品都是在他無家可歸的時候完成的。盡管他缺乏官方認可的職位并且日益受到社會孤立,但他與 McCulloch 的合作頗具影響力,并被一位心理學家弗蘭克·羅森布拉特。????????????????????????????????????????????????????????圖 1-1。自然和人工神經元

羅森布拉特進一步開發了人工神經元,使其具有學習能力。更重要的是,他致力于制造第一個使用這些原理的設備,Mark I 感知器。在“智能自動機的設計”中,?羅森布拉特對這項工作寫道:“我們現在將見證這樣一臺機器的誕生——一臺無需任何人工訓練或控制就能感知、識別和識別周圍環境的機器?!?感知器已構建并能夠成功識別簡單的形狀。

麻省理工學院教授馬文·明斯基(在同一所高中比羅森布拉特落后一個年級!),與 Seymour Papert 一起,寫了一本書叫?感知器(麻省理工學院出版社)關于羅森布拉特的發明。他們表明,這些設備的單層無法學習一些簡單但關鍵的數學函數(例如 XOR)。在同一本書中,他們還表明,使用多層設備可以解決這些限制。不幸的是,只有這些見解中的第一個被廣泛認可。結果,在接下來的二十年里,全球學術界幾乎完全放棄了神經網絡。

在過去 50 年中,神經網絡中最關鍵的工作可能是多卷并行分布式處理(PDP)David Rumelhart、James McClelland 和 PDP 研究小組,1986 年由麻省理工學院出版社出版。第 1 章提出了與 Rosenblatt 相似的希望:

人們比今天的計算機更聰明,因為大腦采用了一種基本的計算架構,該架構更適合處理人們非常擅長的自然信息處理任務的核心方面……我們將介紹一個用于建模認知過程的計算框架, …比其他框架更接近計算風格,因為它可能由大腦完成。

PDP 在這里使用的前提是傳統計算機程序的工作方式與大腦非常不同,這可能就是為什么計算機程序(在那時)在做大腦認為容易的事情(例如識別圖片中的物體)方面做得如此糟糕的原因。作者聲稱 PDP 方法“比其他框架更接近”大腦的工作方式,因此它可能能夠更好地處理這些類型的任務。

事實上,PDP 中的方法與當今神經網絡中使用的方法非常相似。該書將并行分布式處理定義為需要以下內容:

  • 一組處理單元

  • 激活狀態

  • 每個單元的輸出功能

  • 單元之間的連接模式

  • 通過連接網絡傳播活動模式的傳播規則

  • 一種?激活規則,用于將沖擊一個單元的輸入與該單元的當前狀態相結合,以產生該單元的輸出

  • 通過經驗修改連接模式的學習?規則

  • 系統必須運行的環境

我們將在本書中看到現代神經網絡可以處理這些?要求中的每一個。

在 1980 年代,大多數模型都是用第二層神經元構建的,從而避免了 Minsky 和 ??Papert 發現的問題(這是他們的“單元之間的連接模式”,使用前面的框架)。事實上,神經網絡在 80 年代和 90 年代被廣泛用于實際項目。然而,對理論問題的誤解再次阻礙了該領域的發展。理論上,只增加一層額外的神經元就足以讓任何數學函數用這些神經網絡來近似,但在實踐中,這樣的網絡通常太大太慢而無法使用。

盡管 30 年前研究人員表明,要獲得實用的良好性能,您需要使用更多層的神經元,但直到最近十年,這一原理才得到更廣泛的認可和應用。由于使用了更多的層,再加上計算機硬件的改進、數據可用性的增加以及允許神經網絡更快訓練的算法調整,神經網絡現在終于發揮了它們的潛力。更容易。我們現在擁有了 Rosenblatt 承諾的東西:“一臺無需任何人工訓練或控制即可感知、識別和識別周圍環境的機器?!?/span>

這就是您將在本書中學習如何構建的內容。但首先,由于我們將要花很多時間在一起,讓我們互相了解一下……

如何學習深度學習

哈佛大學教授大衛·珀金斯(David Perkins)撰寫了《讓學習整體》(Jossey-Bass)一書,他對教學有很多話要說。基本思想是教整場比賽。這意味著如果你在教棒球,你首先要帶人們去看棒球比賽或讓他們玩。你不會教他們如何纏繞麻線從頭開始制作棒球、拋物線的物理學或球在球棒上的摩擦系數。

保羅洛克哈特,哥倫比亞數學博士,前布朗教授和 K-12 數學老師,在有影響力的文章“數學家的悲嘆”?是一個噩夢般的世界,音樂和藝術的教學方式與數學的教學方式相同。在孩子們花了十多年時間掌握樂譜和理論之前,不允許孩子聽或演奏音樂,通過課程將活頁樂譜轉換成不同的調。在藝術課上,學生學習顏色和涂抹器,但直到大學才允許實際繪畫。聽起來很荒謬?這就是數學的教學方式——我們要求學生花費數年時間死記硬背,學習枯燥的、不連貫的基礎知識?,我們聲稱這些基礎知識將在他們中的大多數人退出這門學科很久之后才會得到回報。

不幸的是,這是許多深度學習教學資源的起點——要求學習者遵循 Hessian 的定義和損失函數的泰勒近似定理,而沒有給出實際工作代碼的示例。我們不是在敲擊微積分。我們熱愛微積分,Sylvain 甚至在大學階段教授過微積分,但我們認為這不是學習深度學習的最佳起點!

在深度學習中,如果您有動力修復模型以使其做得更好,那真的很有幫助。那是你開始學習相關理論的時候。但是你首先需要有模型。我們通過真實的例子教授幾乎所有的東西。隨著我們構建這些示例,我們會越來越深入,我們將向您展示如何使您的項目越來越好。這意味著您將逐步學習所需的所有理論基礎,在上下文中,您將了解它為什么重要以及它是如何工作的。

因此,這是我們對您的承諾。在本書中,我們遵循以下原則:

教學整個游戲

我們將首先向您展示如何使用一個完整的、有效的、可用的、最先進的深度學習網絡,使用簡單、富有表現力的工具來解決現實世界的問題。然后我們將逐漸深入了解這些工具是如何制造的,以及制造這些工具的工具是如何制造的,等等……

總是通過例子教學

我們將確保您可以直觀地理解上下文和目的,而不是從代數符號操作開始。

盡可能簡化

我們花了數年時間構建工具和教學方法,使以前復雜的主題變得簡單。

消除障礙

到目前為止,深度學習一直是一種獨家游戲。我們正在打破它并確保每個人都可以玩。

深度學習最難的部分是手工:你怎么知道你是否有足夠的數據,它的格式是否正確,你的模型是否訓練正確,如果不是,你應該怎么做?這就是為什么我們相信邊做邊學。與基本的數據科學技能一樣,深度學習只有通過實踐經驗才能變得更好。試圖在理論上花費太多時間可能會適得其反。關鍵是編寫代碼并嘗試解決問題:理論可以稍后出現,當你有背景和動機時。

有時旅途會很艱難。感覺卡住的時候。不要放棄!倒回這本書,找到最后一點你肯定沒有被卡住的地方,然后從那里慢慢閱讀,找出第一個不清楚的地方。然后自己嘗試一些代碼實驗,并在谷歌上搜索更多關于你遇到的任何問題的教程——通常你會發現材料的不同角度可能有助于點擊。此外,在第一次閱讀時不理解所有內容(尤其是代碼)是正常的。在繼續之前嘗試連續理解材料有時會很困難。有時,在您從未來的部分中獲得更多背景信息后,事情就會到位,從更大的圖景來看。因此,如果您確實卡在某個部分,請嘗試繼續前進,并記下稍后再返回。

請記住,您不需要任何特定的學術背景即可在深度學習方面取得成功。沒有博士學位的人在研究和工業領域取得了許多重要突破,例如論文?“Unsupervised Representation Learning with Deep Convolutional Generative Adversarial Networks”?——過去十年中最有影響力的論文之一,被引用超過 5000 次?——亞歷克·拉德福 (Alec Radford) 讀本科時寫的。即使在特斯拉,他們正在努力解決制造自動駕駛汽車的極其艱巨的挑戰,首席執行官?埃隆馬斯克說:

絕對不需要博士學位。重要的是對人工智能的深刻理解和以實際有用的方式實施神經網絡的能力(后一點是真正困難的)。就算高中畢業也沒關系。

然而,要取得成功,你需要做的是將你在本書中學到的知識應用到個人項目中,并始終堅持下去。

你的項目和你的心態

無論您是興奮地從葉子的照片中識別植物是否患病,自動生成針織圖案,通過 X 射線診斷 TB,還是確定浣熊何時使用您的貓門,我們都會讓您使用深度學習解決您自己的問題(通過其他人的預訓練模型)盡快,然后將逐步深入研究更多細節。在下一章的前 30 分鐘內,您將學習如何使用深度學習以最先進的準確性解決您自己的問題!(如果你很想馬上開始編碼,現在可以直接跳過。)有一個有害的神話,你需要擁有與谷歌一樣大的計算資源和數據集才能進行深度學習,但事實并非如此。

那么,什么樣的任務才能構成好的測試用例呢?你可以訓練你的模型來區分畢加索和莫奈的畫作,或者挑選出你女兒的照片而不是你兒子的照片。它有助于專注于你的愛好和激情——給自己設置四五個小項目,而不是努力解決一個大問題,當你開始時往往會更好地工作。由于很容易陷入困境,因此過早地過于雄心勃勃往往會適得其反。然后,一旦你掌握了基礎知識,就努力完成你真正引以為豪的事情!

軟件:PyTorch、fastai 和 Jupyter?(以及為什么不重要)

我們已經使用幾十個包和許多編程語言完成了數百個機器學習項目。在 fast.ai,我們使用當今使用的大多數主要深度學習和機器學習包編寫了課程。PyTorch 于 2017 年問世后,我們花了一千多個小時對其進行測試,然后才決定將其用于未來的課程、軟件開發和研究。從那時起,PyTorch 已經成為世界上增長最快的深度學習庫,并且已經在頂級會議上用于大多數研究論文。這通常是工業使用的領先指標,因為這些紙張最終被用于商業產品和服務。我們發現 PyTorch 是深度學習最靈活、最具表現力的庫。它不會為了簡單而犧牲速度,但兩者兼而有之。

PyTorch 最適合作為低級基礎庫,為高級功能提供基本操作。fastai 庫是最受歡迎的庫,用于在 PyTorch 之上添加這種更高級別的功能。它也特別適合本書的目的,因為它在提供深度分層的軟件架構方面是獨一無二的(甚至還有 一篇關于這種分層 API的同行評審的學術論文)。在本書中,隨著我們對深度學習的基礎越來越深入,我們也將越來越深入到 fastai 的各個層面。這本書涵蓋fastai 庫的第 2 版,這是一個從頭開始的重寫,提供了許多獨特的功能。

但是,您學習什么軟件并不重要,因為只需幾天時間即可學會從一個庫切換到另一個庫。真正重要的是正確學習深度學習的基礎和技術。我們的重點將是使用盡可能清晰地表達您需要學習的概念的代碼。在我們教授高級概念的地方,我們將使用高級 fastai 代碼。在我們教授低級概念的地方,我們將使用低級 PyTorch 甚至是純 Python 代碼。

盡管現在看起來新的深度學習庫正在快速出現,但您需要為未來幾個月和幾年內更快的變化速度做好準備。隨著越來越多的人進入這個領域,他們會帶來更多的技能和想法,并嘗試更多的東西。您應該假設您今天學習的任何特定庫和軟件都將在一兩年內過時。想想在 Web 編程領域一直在發生的庫和技術堆棧的變化——這是一個比深度?學習更成熟且增長緩慢的領域。我們堅信,學習的重點需要理解底層技術以及如何在實踐中應用它們,以及如何在新工具和技術發布時快速建立專業知識。

在本書的最后,您將了解 fastai 中的幾乎所有代碼(以及 PyTorch 的大部分代碼),因為在每一章中,我們將深入挖掘一個層次,以準確地向您展示我們構建和訓練時發生了什么我們的模型。這意味著您將了解現代深度學習中使用的最重要的最佳實踐——不僅僅是如何使用它們,還有它們是如何真正工作和實施的。如果您想在另一個框架中使用這些方法,那么您將擁有必要的知識。

由于學習深度學習最重要的事情是編寫代碼和進行實驗,因此擁有一個很好的代碼實驗平臺很重要。最流行的編程實驗平臺稱為Jupyter。這就是我們將在本書中使用的內容。我們將向您展示如何使用 Jupyter 來訓練和試驗模型,并自省數據預處理和模型開發管道的每個階段。Jupyter 是最流行的 Python 數據科學工具,有充分的理由。它功能強大、靈活且易于使用。我們認為您會喜歡它!

讓我們在實踐中看到它并訓練我們的第一個模型。

您的第一個模型

正如我們之前所說,在解釋它們為什么起作用之前,我們將教你如何做事。按照這種自上而下的方法,我們將從實際訓練一個圖像分類器以幾乎 100% 的準確率識別狗和貓。要訓??練此模型并運行我們的實驗,您需要進行一些初始設置。不用擔心;?它并不像看起來那么難。

獲取 GPU 深度學習服務器

要完成本書中的幾乎所有內容,您需要使用配備?NVIDIA?GPU的計算機(很遺憾,其他品牌的 GPU 并沒有得到主要深度學習庫的完全支持)。但是,我們不建議您購買;事實上,即使您已經擁有,我們也不建議您立即使用它!設置一臺計算機需要時間和精力,你現在希望所有的精力都集中在深度學習上。因此,我們建議您租用一臺已經預裝了您需要的一切并準備就緒的計算機。使用它時,成本可能低至每小時 0.25 美元,有些選項甚至是免費的。

行話:圖形處??理單元 (GPU)

也稱為顯卡。計算機中的一種特殊處理器,可以同時處理數千個單一任務,特別設計用于在計算機上顯示 3D 環境以進行游戲。這些相同的基本任務與神經網絡的工作非常相似,因此 GPU 運行神經網絡的速度比普通 CPU 快數百倍。所有現代計算機都包含 GPU,但很少有包含深度學習所需的正確類型的 GPU。

隨著公司的來來去去和價格的變化,與本書一起使用的 GPU 服務器的最佳選擇會隨著時間的推移而改變。我們在本書的網站上維護了我們推薦的選項列表,所以現在就去那里并按照說明連接到 GPU 深度學習服務器。不用擔心;?在大多數平臺上設置只需大約兩分鐘,許多平臺甚至不需要任何付款甚至信用卡即可開始使用。

網站上顯示的每個選項都包含一個教程;完成本教程后,您將看到?如圖 1-2 所示的屏幕。

圖 1-2。Jupyter Notebook 的初始視圖

您現在已準備好運行您的第一個 Jupyter 筆記本!

行話:JUPYTER NOTEBOOK

一款允許您包含格式化文本、代碼、圖像、視頻等的軟件,所有這些都在一個交互式文檔中。Jupyter 獲得了軟件領域的最高榮譽——ACM 軟件系統獎,這要歸功于它在許多學術領域和工業領域的廣泛使用和巨大影響。Jupyter Notebook 是數據科學家最廣泛使用的軟件,用于開發深度學習模型并與之交互。

運行你的第一臺筆記本

筆記本按章節編號本書中介紹的順序。因此,您將看到的第一個筆記本是您現在需要使用的筆記本。您將使用此筆記本來訓練可以識別狗和貓照片的模型。為此,您將?下載狗和貓照片的數據集,并用它來訓練?一個模型。

數據集只是一堆數據——它可以是圖像、電子郵件、財務指標、聲音或其他任何東西。有許多免費提供的適用于訓練模型的數據集。其中許多數據集是由學者創建的,以幫助推進研究,許多數據集可用于競賽(數據科學家可以參加競賽,看看誰擁有最準確的模型!),還有一些是其他過程的副產品(例如金融備案)。

完整和剝離的筆記本

筆記本有兩個版本。回購的根源包含用于創建您現在正在閱讀的書的確切筆記本,以及所有散文和輸出。clean文件夾具有相同的標題和代碼單元,但已刪除所有輸出和散文。閱讀完本書的一部分后,我們建議您閱讀干凈的筆記本,合上??書本,看看您是否可以在執行之前弄清楚每個單元格將顯示什么。還要嘗試回憶代碼所演示的內容。

要打開一個筆記本,只需單擊它。筆記本會打開,它看起來類似于圖 1-3(請注意,不同平臺的細節可能存在細微差異;您可以忽略這些差異)。

圖 1-3。一個 Jupyter 筆記本

筆記本由單元格組成。主要有兩個細胞類型:

  • 包含格式化文本、圖像等的單元格。這些使用一種稱為Markdown的格式,您將很快了解。

  • 包含可以執行的代碼的單元格,將出現輸出?緊接在下面(可以是純文本、表格、圖像、動畫、聲音,甚至是交互式應用程序)。

Jupyter 筆記本可以處于以下兩種模式之一:編輯模式或命令模式。在編輯模式下,在鍵盤上鍵入以通常的方式將字母輸入單元格。但是,在命令模式下,您不會看到任何閃爍的光標,并且鍵盤上的每個鍵都有特殊功能。

在繼續之前,請按鍵盤上的 Escape 鍵切換到命令模式(如果您已經處于命令模式,這沒有任何作用,所以現在按下它以防萬一)。要查看所有可用功能的完整列表,請按 H;按 Escape 刪除此幫助屏幕。請注意,在命令模式下,與大多數程序不同,命令不需要您按住 Control、Alt 或類似鍵,您只需按下所需的字母鍵即可。

可以通過按C來復制一個單元格(需要先選中單元格,用輪廓表示周圍;?如果尚未選擇,請單擊一次)。然后按 V 粘貼它的副本。

單擊以“# CLICK ME”行開頭的單元格以將其選中。其中的第一個字符?line 表示后面是 Python 中的注釋,因此在執行單元格時將被忽略。信不信由你,細胞的其余部分是一個完整的系統,用于創建和訓練用于識別貓與狗的最先進模型。所以,讓我們現在訓練它!為此,只需按鍵盤上的 Shift-Enter,或單擊工具欄上的“播放”按鈕。然后等待幾分鐘,同時發生以下事情:

  • 一個數據集稱為?Oxford-IIIT Pet Dataset包含來自 37 個品種的 7,349 張貓狗圖像,將從 fast.ai 數據集集合下載到您正在使用的 GPU 服務器,然后將被提取。

  • 已經訓練好的預訓練模型使用競賽獲勝模型的 130 萬張圖像將從互聯網上下載。

  • 預訓練模型將使用最新的遷移學習的進步創建了一個專門為識別狗和貓而定制的模型。

  • 前兩個步驟只需要在您的 GPU 服務器上運行一次。如果再次運行該單元,它將使用已經下載的數據集和模型,而不是再次下載它們。我們來看看單元格的內容及結果(表1-2):

    # CLICK ME from fastai.vision.all import * path = untar_data(URLs.PETS)/'images'def is_cat(x): return x[0].isupper() dls = ImageDataLoaders.from_name_func(path, get_image_files(path), valid_pct=0.2, seed=42,label_func=is_cat, item_tfms=Resize(224))learn = cnn_learner(dls, resnet34, metrics=error_rate) learn.fine_tune(1)

    表 1-2。第一次培訓的結果時代train_loss有效損失錯誤率時間
    00.1693900.0213880.00541300:14
    時代train_loss有效損失錯誤率時間
    00.0587480.0092400.00270600:19

    您可能不會看到此處顯示的完全相同的結果。訓練模型中涉及許多小的隨機變化來源。然而,在這個例子中,我們通常看到的錯誤率遠低于 0.02。

    訓練時間

    根據您的網絡速度,下載預訓練模型和數據集可能需要幾分鐘時間。跑步fine_tune可能需要一分鐘左右。本書中的模型通常需要幾分鐘的時間來訓練,你自己的模型也是如此,所以最好想出好的技術來充分利用這段時間。例如,在您的模型訓練時繼續閱讀下一部分,或者打開另一個筆記本并將其用于一些編碼實驗。

    這本書是用 JUPYTER NOTEBOOKS 寫的

    我們使用 Jupyter 筆記本編寫了本書,因此對于本書中的幾乎所有圖表、表格和計算,我們將向您展示自己復制它所需的確切代碼。這就是為什么在本書中,你經常會看到一些代碼緊跟在表格、圖片或只是一些文本之后。如果您訪問?本書的網站,您會找到所有代碼,您可以嘗試自己運行和修改每個示例。

    您剛剛看到了輸出表格的單元格在書中的外觀。下面是一個輸出文本的單元格示例:

    1+1 2

    Jupyter 將始終打印或顯示最后一行的結果(如果有的話)。例如,這是一個輸出圖像的單元格示例:

    img = PILImage.create(image_cat()) img.to_thumb(192)

    那么,我們怎么知道這個模型好不好呢?在表格的最后一列,您可以看到錯誤率,即被錯誤識別的圖像的比例。錯誤率作為我們的指標——我們對模型質量的衡量,選擇直觀和易于理解。如您所見,該模型幾乎是完美的,盡管訓練時間只有幾秒鐘(不包括數據集的一次性下載和預訓練模型)。事實上,你已經達到的準確度比任何人在 10 年前達到的要好得多!

    最后,讓我們檢查一下這個模型是否真的有效。去拍一張狗或貓的照片;如果您手邊沒有,只需搜索 Google 圖片并下載您在那里找到的圖片?,F在執行已uploader定義的單元格。它將輸出一個您可以單擊的按鈕,因此您可以選擇要分類的圖像:

    uploader = widgets.FileUpload() uploader

    現在您可以將上傳的文件傳遞給模型。確保它是單只狗或貓的清晰照片,而不是線條畫、卡通或類似內容。筆記本會告訴你它認為自己是狗還是貓,以及它的自信程度。希望您會發現您的模型做得很好:

    img = PILImage.create(uploader.data[0]) is_cat,_,probs = learn.predict(img) print(f"Is this a cat?: {is_cat}.") print(f"Probability it's a cat: {probs[1].item():.6f}") Is this a cat?: True. Probability it's a cat: 0.999986

    祝賀你的第一個分類器!

    但是,這是什么意思?你實際上做了什么?為了解釋這一點,讓我們再次縮小以了解全局。

    什么是機器學習?

    您的分類器是一個深度學習模型。如前所述,深度學習模型使用神經網絡,它最初可以追溯到 1950 年代,并且由于最近的進步而在最近變得強大。

    另一個關鍵的背景是深度學習只是機器學習更一般學科中的一個現代領域。要了解您在訓練自己的分類模型時所做的事情的本質,您無需了解深度學習。了解您的模型和訓練過程如何成為一般適用于機器學習的概念示例就足夠了。

    所以在本節中,我們將描述機器學習。我們將探索關鍵概念,并了解如何將它們追溯到介紹它們的原始文章。

    與常規編程一樣,機器學習是一種讓計算機完成特定任務的方法。但是我們如何使用常規編程來完成我們在上一節中所做的事情:識別照片中的狗和貓?我們必須為計算機寫下完成任務所需的確切步驟。

    通常,我們在編寫程序時很容易寫下完成任務的步驟。我們只是考慮如果我們必須手動完成任務會采取的步驟,然后我們將它們轉換為代碼。例如,我們可以編寫一個對列表進行排序的函數。一般來說,我們會編寫一個類似于圖 1-4的函數(其中輸入可能是一個未排序的列表,結果是一個排序的列表)。

    圖 1-4。一個傳統的節目

    但是要識別照片中的物體,這有點棘手。當我們識別圖片中的物體時,我們會采取哪些?步驟?我們真的不知道,因為這一切都發生在我們的大腦中,而我們沒有意識到!

    早在 1949 年計算剛開始時,一位名叫?亞瑟·塞繆爾開始研究一種不同的方法來讓計算機?完成任務,他稱之為機器學習。在他 1962 年的經典文章《人工智能:自動化的前沿》中,他寫道:

    為此類計算編程計算機充其量是一項艱巨的任務,這主要不是因為計算機本身存在任何固有的復雜性,而是因為需要以最令人惱火的細節詳細說明該過程的每一分鐘步驟。正如任何程序員都會告訴你的那樣,計算機是巨大的白癡,而不是巨大的大腦。

    他的基本想法是:而不是告訴計算機確切的步驟?需要解決問題,向它展示要解決的問題的示例,并讓它自己弄清楚如何解決它。結果證明這是非常有效的:到 1961 年,他的跳棋程序已經學到了很多東西,以至于它擊敗了康涅狄格州冠軍!他是這樣描述他的想法的(來自前面提到的同一篇文章):

    假設我們安排了一些自動方法來測試任何當前權重分配在實際性能方面的有效性,并提供一種改變權重分配的機制以最大化性能。我們不需要深入了解這樣一個程序的細節,就可以看到它可以完全自動化,并看到這樣編程的機器會從它的經驗中“學習”。

    在這個簡短的聲明中嵌入了許多強大的概念:

    • “權重分配”的想法

    • 每個重量分配都有一些“實際性能”的事實

    • 要求有一種“自動方法”來測試該性能

    • 需要通過改變權重分配來提高性能的“機制”(即另一個自動過程)

    讓我們一一了解這些概念,以了解它們在實踐中是如何結合在一起的。首先,我們需要了解 Samuel 所說的權重分配是什么意思。

    權重只是變量,權重分配是這些變量的特定值選擇。程序的輸入是它為產生結果而處理的值——例如,將圖像像素作為輸入,并返回分類“狗”作為結果。程序的權重分配是定義程序如何運行的其他值。

    因為它們會影響程序,它們在某種意義上是另一種輸入。我們將更新圖 1-4中的基本圖片 并將其替換為圖 1-5以考慮到這一點。

    圖 1-5。使用權重分配的程序

    我們將盒子的名稱從program更改為model。這是為了遵循現代術語并反映該模型是一種特殊的程序:它可以做很多不同的事情,具體取決于重量。它可以以許多不同的方式實現。例如,在 Samuel 的跳棋程序中,不同的權重值會導致不同的跳棋策略。

    (順便說一下,Samuel 所謂的“權重”現在最常被稱為模型參數,以防你遇到?學期。權重一詞是為特定類型的模型參數保留的。)

    接下來,Samuel 說我們需要一種自動測試有效性的方法?任何當前的權重分配在實際表現方面。就他的跳棋程序而言,模型的“實際表現”將是它的表現如何。您可以通過設置兩個模型相互對戰并查看哪個模型通常獲勝來自動測試兩個模型的性能。

    最后,他說我們需要一種改變權重分配的機制,以最大限度地提高性能。例如,我們可以查看獲勝模型和失敗模型之間的權重差異,并在獲勝方向上進一步調整權重。

    我們現在可以明白為什么他說這樣的程序可以完全自動化,而且……這樣編程的機器會從它的經驗中“學習”。當權重的調整也是自動的時,學習將變得完全自動化——我們不是通過手動調整權重來改進模型,而是依靠一種基于性能進行調整的自動化機制。

    圖 1-6展示了 Samuel 訓練機器學習模型的想法的全貌。

    圖 1-6。訓練機器學習模型

    注意模型結果之間的區別(例如,跳棋游戲中的移動)以及它的表現(例如,它是否贏得了比賽,或者它獲勝的速度)。

    還要注意,一旦模型被訓練——也就是說,一旦我們選擇了我們最終的、最好的、最喜歡的權重分配——那么我們可以將權重視為模型的一部分,因為我們不再改變它們。

    因此,實際使用經過訓練的模型如圖 1-7 所示。

    圖 1-7。使用經過訓練的模型作為程序

    這看起來與?圖 1-4中的原始圖相同,只是將單詞program替換為?model。這是一個重要的見解:經過訓練的模型可以像普通計算機程序一樣對待。

    行話:機器學習

    通過允許計算機從其經驗中學習而開發的程序培訓,而不是通過手動編碼各個步驟。

    什么是神經網絡?

    不難想象該模型對于跳棋程序會是什么樣子。可能有一系列跳棋策略?編碼,以及某種搜索機制,然后權重可能會改變策略的選擇方式,搜索過程中關注的板的哪些部分等等。但是,對于圖像識別程序、理解文本或我們可能想象的許多其他有趣問題,模型看起來是什么樣子的,這一點并不明顯。

    我們想要的是某種非常靈活的函數,它可以用來解決任何給定的問題,只需改變它的權重。?令人驚訝的是,這個功能確實存在!這是我們已經討論過的神經網絡。也就是說,如果您將神經網絡視為一個數學函數,那么它會變成一個非常靈活的函數,具體取決于其權重。一種稱為通用逼近定理的數學證明表明這個函數理論上可以解決任何問題,達到任何精度水平。神經網絡如此靈活的事實意味著,在實踐中,它們通常是一種合適的模型,您可以將精力集中在訓練它們的過程上——即找到好的權重分配。

    但是那個過程呢?可以想象,您可能需要找到一種新的“機制”來自動更新每個問題的權重。這會很費力。我們在這里也想要一種完全通用的方法來更新神經網絡的權重,以使其在任何給定的任務中得到改進。方便的是,這也存在!

    這稱為隨機梯度下降(SGD)。我們將在下面詳細了解神經網絡和 SGD 的工作原理?第 4 章,以及解釋通用逼近定理。然而,現在,我們將改為使用塞繆爾自己的話:我們不需要深入了解這樣一個程序的細節,看看它是否可以完全自動化,并且看到這樣編程的機器會從它的經驗中“學習”。

    不用擔心;?SGD 和神經網絡在數學上都不是復雜的。兩者幾乎完全依賴加法和乘法來完成他們的工作(但他們做了很多加法和乘法!)。當學生看到細節時,我們聽到的主要反應是:“就是這樣嗎?”

    換句話說,回顧一下,神經網絡是一種特殊的機器學習模型,完全符合 Samuel 的原始概念。神經網絡很特別,因為它們非常靈活,這意味著它們可以通過找到正確的權重來解決異常廣泛的問題。這很強大,因為隨機梯度下降為我們提供了一種自動找到這些權重值的方法。

    縮小后,現在讓我們重新放大并使用 Samuel 的框架重新審視我們的圖像分類問題。

    我們的輸入是圖像。我們的權重是?神經網絡。我們的模型是一個神經網絡。我們的結果是由神經網絡計算的值,例如“狗”或“貓”。

    下一篇文章呢,一種自動測試任何當前權重分配在實際性能方面的有效性的方法?確定“實際性能”很容易:我們可以簡單地將模型的性能定義為其預測正確答案的準確性。

    綜上所述,假設 SGD 是我們更新權重分配的機制,我們可以看到我們的圖像分類器是一個機器學習模型,就像 Samuel 所設想的那樣。

    一點深度學習術語

    Samuel 在 1960 年代工作,從那時起術語發生了變化。以下是我們討論過的所有部分的現代深度學習術語:

    • 模型的功能形式稱為它的架構(但?小心——有時人們將模型用作架構的同義詞,所以這會讓人感到困惑)。

    • 權重稱為參數。

    • 預測是根據自變量計算的,自變量是不包括標簽的數據。

    • 模型的結果稱為預測。

    • 性能度量稱為損失。

    • 損失不僅取決于預測,還取決于正確的?標簽(也稱為目標或因變量);例如,“狗”或“貓”。

    進行這些更改后,我們在圖 1-6中的圖表 類似于圖 1-8。

    圖 1-8。詳細的訓練循環

    機器學習固有的局限性

    從這張圖片中,我們現在可以看到一些關于訓練深度學習模型的基本知識:

    • 沒有數據就無法創建模型。

    • 模型可以學習僅對用于訓練它的輸入數據中看到的模式進行操作。

    • 這種學習方法只創建預測,而不是推薦?操作。

    • 僅僅有輸入數據的例子是不夠的;我們也需要該數據的標簽(例如,狗和貓的圖片不足以訓練模型;我們需要為每個人一個標簽,說明哪些是狗,哪些是貓)。

    一般來說,我們已經看到大多數聲稱他們沒有足夠數據的組織實際上意味著他們沒有足夠的標簽數據。如果任何組織有興趣在實踐中使用模型做某事,那么大概他們有一些他們計劃運行模型的輸入。并且大概他們已經以其他方式這樣做了一段時間(例如,手動或使用一些啟發式程序),所以他們有來自這些過程的數據!例如,放射學實踐幾乎肯定會有醫學掃描檔案(因為他們需要能夠檢查患者隨著時間的推移如何進展),但這些掃描可能沒有包含診斷或干預列表的結構化標簽(因為放射科醫生通常會創建自由文本的自然語言報告,而不是結構化數據)。我們將在本書中大量討論標記方法,因為它在實踐中是一個非常重要的問題。

    由于這些機器學習模型只能做出預測?(即嘗試復制標簽),這可能導致組織目標和模型能力之間存在顯著差距。例如,在本書中,您將學習如何創建一個?可以預測用戶可能購買哪些產品的推薦系統。這是?常用于電子商務,例如通過顯示排名最高的項目來自定義主頁上顯示的產品。但是這樣的模型通常是通過查看用戶及其購買歷史(輸入)以及他們繼續購買或查看的內容(標簽)來創建的,這意味著該模型可能會告訴您用戶已經擁有的產品,或已經知道,而不是他們最有可能感興趣的新產品。這與當地書商的專家可能會做的事情非常不同,他們會提出問題以了解您的品味,然后告訴您您以前從未聽說過的作者或系列。

    另一個重要的見解來自考慮模型如何與其環境交互。這可以創建反饋循環,如下所述:

  • 根據過去的逮捕地點創建預測性警務模型。在實踐中,這實際上并不是預測犯罪,而是預測逮捕,因此部分只是反映了現有警務?過程中的偏見。

  • 然后,執法人員可能會使用該模型來決定將他們的警務活動集中在哪里,從而增加在這些地區的逮捕人數。

  • 然后將反饋這些額外逮捕的數據,以重新訓練模型的未來版本。

  • 這是一個正反饋循環:模型使用得越多,?數據的偏差越大,模型的偏差就越大,等等。

    反饋回路也會在商業環境中產生問題。例如,視頻推薦系統可能會偏向于推薦最大的視頻觀看者消費的內容(例如,陰謀論者和極端分子傾向于觀看比平均水平更多的在線視頻內容),導致這些用戶增加他們的視頻消費,從而導致更多此類視頻被推薦。我們將在第 3 章中更詳細地討論這個主題。

    現在您已經了解了理論的基礎,讓我們回到我們的代碼示例,詳細了解代碼與我們剛剛描述的過程的對應關系。

    我們的圖像識別器如何工作

    讓我們看看我們的圖像識別器代碼如何映射到這些想法。我們將每一行放入一個單獨的單元格中,然后查看?每個人在做什么(我們不會解釋每個參數的每一個細節,但會給出重要位的描述;完整的細節將在本書后面提供)。第一行導入所有 fastai.vision 庫:

    from fastai.vision.all import *

    這為我們提供了創建各種計算機視覺模型所需的所有函數和類。

    許多 Python 編碼人員建議避免像這樣(使用import *語法)導入整個庫,因為在大型軟件項目中它可能會導致問題。但是,對于像 Jupyter notebook 這樣的交互式工作,它的效果很好。fastai 庫是專門為支持這種交互使用而設計的,它只會將必要的部分導入您的環境。

    第二行從?fast.ai 數據集集合(如果之前未下載)到您的服務器,提取它(如果之前未提取),并返回Path具有提取位置的對象:

    path = untar_data(URLs.PETS)/'images'

    在我在 fast.ai 學習的整個過程中,直到今天,我都學到了很多關于高效編碼實踐的知識。fastai 庫和 fast.ai 筆記本充滿了很棒的小技巧,這些小技巧幫助我成為了一個更好的程序員。例如,請注意 fastai 庫不僅返回包含數據集路徑的字符串,還返回一個Path對象。這是 Python 3 標準庫中一個非常有用的類,它使訪問文件和目錄變得更加容易。如果您以前沒有遇到過它,請務必查看它的文檔或教程并嘗試一下。請注意,本書的網站包含指向每章推薦教程的鏈接。我會不斷地讓你知道一些我發現有用的小編碼技巧,因為我們遇到了它們。

    在第三行中,我們定義了一個函數 ,is_cat它根據數據集的創建者提供的文件名規則來標記貓:

    def is_cat(x): return x[0].isupper()

    我們在第四行使用該函數,它告訴 fastai 我們擁有什么樣的數據集以及它是如何構建的:

    dls = ImageDataLoaders.from_name_func(path, get_image_files(path), valid_pct=0.2, seed=42,label_func=is_cat, item_tfms=Resize(224))

    對于不同類型的深度學習數據集和問題,有各種類——我們在這里使用?ImageDataLoaders.?類名的第一部分通常是您擁有的數據類型,例如圖像或文本。

    我們必須告訴 fastai 的另一條重要信息是如何從數據集中獲取標簽。計算機視覺數據集通常以這樣一種方式構建,即圖像的標簽是文件名或路徑的一部分——最常見的是父文件夾名稱。fastai 帶有許多標準化的標簽方法,以及編寫自己的方法。在這里,我們告訴 fastai 使用is_cat我們剛剛定義的函數。

    最后,我們定義Transform我們需要的 s。一個Transform包含?在訓練期間自動應用的代碼;fastai 包含許多預定義Transform的,添加新的就像創建 Python 函數一樣簡單。有兩種:item_tfms應用于每個項目(在這種情況下,每個項目都調整為 224 像素的正方形),同時?使用 GPU 一次batch_tfms應用于一批項目,?所以它們特別快(我們將在本書中看到很多這樣的例子)。

    為什么是 224 像素?由于歷史原因,這是標準尺寸(舊的預訓練模型完全需要這個尺寸),但你幾乎可以通過任何東西。如果你增加尺寸,你通常會得到一個效果更好的模型(因為它可以專注于更多細節),但代價是速度和內存消耗;如果減小尺寸,則相反。

    行話:分類和回歸

    分類和回歸在機器學習中有非常具體的含義。這是我們將在本書中研究的兩種主要模型類型。分類模型是試圖預測一個類別或類別的模型。也就是說,它從許多離散的可能性中進行預測,例如“狗”或“貓”?;貧w模型是一種嘗試預測一個或多個數字量的模型,例如溫度或位置。有時人們使用回歸一詞來指代一種稱為線性回歸模型的特定模型;這是一種不好的做法,我們不會在本書中使用該術語!

    Pet 數據集包含 7,390 張狗和貓的圖片,包括?37個品種。每個圖像都使用其文件名進行標記:例如,文件great_pyrenees_173.jpg是數據集中大比利牛斯犬品種圖像的第 173 個示例。如果圖像是貓,則文件名以大寫字母開頭,否則以小寫字母開頭。我們必須告訴 fastai 如何從文件名中獲取標簽,我們通過調用from_name_func(這意味著可以使用應用于文件名的函數來提取標簽)并傳遞?is_cat,它返回x[0].isupper(),它評估True第一個字母是否為大寫 (即,它是一只貓)。

    這里要提到的最重要的參數是valid_pct=0.2.?這告訴 fastai 保留 20% 的數據,根本不使用它來訓練模型。這 20% 的數據稱為驗證集;?剩下的 80% 稱為訓練集。驗證集用于衡量模型的準確性。?默認情況下,保留的 20% 是隨機選擇的。每次運行此代碼時,該參數都會seed=42將隨機種子設置為相同的值,這意味著每次運行它都會獲得相同的驗證集——這樣,如果我們更改模型并重新訓練它,我們就會知道任何差異都是由于對模型的更改,而不是由于具有不同的隨機驗證集。

    fastai 將始終僅使用驗證集而不是訓練集向您展示模型的準確性 。這一點非常關鍵,因為如果你訓練一個足夠大的模型足夠長的時間,它最終會記住數據集中每個項目的標簽!結果將不是一個有用的模型,因為我們關心的是我們的模型在以前看不見的圖像上的工作情況。在創建模型時,這始終是我們的目標:在模型經過訓練之后,它對模型僅在未來才能看到的數據有用。

    即使您的模型沒有完全記住您的所有數據,在訓練的早期它也可能已經記住了其中的某些部分。因此,你訓練的時間越長,你在訓練集上的準確率就越高;這驗證集的準確性也會在一段時間內提高,但隨著模型開始記憶訓練集而不是在數據中找到可概括的潛在模式,最終它會開始變得更糟。發生這種情況時,我們說模型過度擬合。

    圖 1-9顯示了當你過擬合時會發生什么,使用一個簡化的例子,我們只有一個參數和一些基于函數隨機生成的數據x**2。如您所見,盡管過擬??合模型中的預測對于觀察到的數據點附近的數據是準確的,但當超出該范圍時,它們就相差甚遠。

    圖 1-9。過擬合的例子

    過度擬合是最重要和最具挑戰性的問題?為所有機器學習從業者和所有算法提供培訓。正如您將看到的那樣,創建一個模型很容易,該模型在對其已訓練的確切數據進行預測方面做得很好,但對模型從未見過的數據進行準確預測要困難得多。當然,這是在實踐中很重要的數據。例如,如果您創建了一個手寫數字分類器(我們很快就會這樣做!)并使用它來識別支票上的數字,那么您將永遠不會看到模型訓練時使用的任何數字——每張支票都會有輕微的不同的寫作變體要處理。

    在本書中,您將學習許多避免過度擬合的方法。但是,只有在確認發生過擬合后(即,如果您觀察到在訓練期間驗證準確度變差),您才應該使用這些方法。我們經??吹綇臉I者使用過擬合避免技術,即使他們有足夠的數據,他們不需要這樣做,最終得到的模型可能不如他們可以實現的準確。

    驗證集

    訓練模型時,必須始終同時擁有訓練集和驗證集,并且您必須僅在驗證集上測量模型的準確性。如果你訓練的時間太長,沒有足夠的數據,你會看到你的模型的準確性開始變差;這稱為過擬合。fastai 默認valid_pct為0.2,所以即使你忘記了,fastai 也會為你創建一個驗證集!

    訓練我們的圖像識別器的代碼的第五行告訴 fastai 創建一個卷積神經網絡?(CNN)并指定要使用的架構(即要創建什么樣的模型)、我們想要訓練它的數據以及要使用的指標:

    learn = cnn_learner(dls, resnet34, metrics=error_rate)

    為什么是CNN?這是當前最先進的創建方法?計算機視覺模型。我們將在本書中全面了解 CNN 的工作原理。它們的結構受到人類視覺系統工作方式的啟發。

    fastai 中有很多架構,我們將在本書中介紹(以及討論如何創建自己的架構)。然而,大多數時候,選擇架構并不是深度學習過程中非常重要的部分。這是學者們喜歡談論的話題,但在實踐中,這不太可能是您需要花費大量時間的話題。有一些標準架構在大多數情況下都可以工作,在這種情況下,我們使用的是一種稱為ResNet的架構?我們將在書中談論很多;對于許多數據集和問題,它既快速又準確。34in 指的resnet34是該架構變體中的層數(其他選項是18、50、101和152)。使用具有更多層的架構的模型需要更長的時間來訓練并且更容易過度擬合(即,在驗證集的準確性開始變差之前,您不能訓練它們盡可能多的時期)。另一方面,當使用更多數據時,它們可能會更加準確。

    什么是指標?度量是衡量質量的函數?模型使用驗證集的預測,并將在每個 epoch 結束時打印。在這種情況下,我們使用error_rate,這是 fastai 提供的一個函數,它按照它所說的做:告訴你驗證集中有多少百分比的圖像被錯誤地分類。另一個常見的分類指標是accuracy(只是1.0 - error_rate)。fastai 提供了更多,這將在本書中進行討論。

    度量的概念可能會讓你想起損失,但有一個?重要區別。損失的全部目的是定義訓練系統可以用來自動更新權重的“性能度量”。換句話說,一個好的損失選擇是一個易于隨機梯度下降使用的選擇。但是一個指標是為人類消費定義的,所以一個好的指標是一個易于理解的指標,并且盡可能接近您希望模型執行的操作。有時,您可能會認為損失函數是一個合適的指標,但不一定如此。

    cnn_learner還有一個參數pretrained,默認為?True(因此在這種情況下使用它,即使我們沒有指定它),它將模型中的權重設置為已經由專家訓練的值,以識別 130 萬張照片中的一千個不同類別(使用著名的ImageNet數據集)。具有已經在另一個數據集上訓練過的權重的模型稱為預訓練模型。您幾乎應該始終使用預訓練模型,因為這意味著您的模型在您向其展示任何數據之前就已經非常有能力了。正如您將看到的,在深度學習模型中,其中許多功能都是您需要的,幾乎不管您的項目細節如何。例如,部分預訓練模型將處理邊緣、梯度和顏色檢測,這些都是許多任務所必需的。

    使用預訓練模型時,cnn_learner將刪除最后一層,?因為它總是專門針對原始訓練任務(即 ImageNet 數據集分類)進行定制,并將其替換為一個或多個具有隨機權重的新層,其大小適合您正在使用的數據集。模型的最后一部分稱為頭部。

    使用預訓練模型是我們必須訓練更準確模型的最重要方法,更快,更少的數據,更少的時間和金錢。你可能認為這意味著使用預訓練模型將是學術深度學習中研究最多的領域……但你錯了!預訓練模型的重要性在大多數課程、書籍或軟件庫功能中通常沒有得到認可或討論,也很少在學術論文中考慮。當我們在 2020 年初撰寫本文時,情況才剛剛開始發生變化,但可能需要一段時間。所以要小心:與你交談的大多數人可能會大大低估你在使用少量資源的情況下可以做的深度學習,因為他們可能不會深入了解如何使用預訓練模型。

    將預訓練模型用于不同于最初訓練的任務的任務稱為遷移學習。不幸的是,由于遷移學習的研究如此之少,因此很少有領域有可用的預訓練模型。例如,很少預訓練模型目前可用于醫學,這使得遷移學習在該領域的使用具有挑戰性。此外,如何將遷移學習用于時間序列分析等任務還不是很清楚。

    行話:遷移學習

    將預訓練模型用于不同于最初訓練的任務。

    我們代碼的第六行告訴 fastai 如何擬合模型:

    learn.fine_tune(1)

    正如我們所討論的,該架構只描述了一個模板?數學函數;在我們為其包含的數百萬個參數提供值之前,它實際上并沒有做任何事情。

    這是深度學習的關鍵——確定如何擬合模型的參數?得到它來解決你的問題。為了擬合模型,我們必須提供至少一條信息:查看每張圖像的次數(稱為epochs數)。您選擇的 epoch 數量在很大程度上取決于您有多少可用時間,以及您發現在實踐中需要多長時間才能適合您的模型。如果你選擇的數字太小,你總是可以在以后訓練更多的 epoch。

    但是為什么方法被調用fine_tune,而不是fit?fastai?確實有一個方法叫做fit,這確實適合模型(即,多次查看訓練集中的圖像,每次更新參數以使預測越來越接近目標標簽)。但在這種情況下,我們從一個預訓練模型開始,我們不想丟棄它已經擁有的所有功能。正如您將在本書中學到的那樣,有一些重要的技巧可以讓預訓練模型適應新數據集——這個過程稱為微調。

    行話:微調

    一種遷移學習技術,用于更新預訓練模型的參數通過使用與預訓練不同的任務來訓練額外的時期。

    當您使用該fine_tune方法時,fastai 將使用這些技巧?你。您可以設置一些參數(我們稍后會討論),但在此處顯示的默認形式中,它執行兩個步驟:

  • 使用一個 epoch 來擬合模型的那些必要部分,以使新的隨機頭與您的數據集正確工作。

  • 使用調用該方法時請求的 epoch 數來擬合整個模型,更新后面層(尤其是頭部)的權重比前面的層更快(正如我們將看到的,通常不需要從預訓練的權重)。

  • 模型的頭部是新添加的特定于?新的數據集。一個紀元是對數據集的一次完整遍歷。?在調用fit之后,每個 epoch 之后的結果都會被打印出來,顯示 epoch 編號、訓練和驗證集損失(用于訓練模型的“性能度量”)以及?您請求的任何指標(錯誤率,在這種情況下)。

    因此,通過所有這些代碼,我們的模型學會了識別貓和狗?從標記的例子。但是它是怎么做到的呢?

    我們的圖像識別器學到了什么

    在這個階段,我們有一個運行良好的圖像識別器,但是?我們不知道它在做什么!盡管許多人抱怨深度學習會導致難以理解的“黑匣子”模型(即給出預測但沒人能理解的東西),但事實并非如此。有大量研究表明如何深入檢查深度學習模型并從中獲得豐富的見解。話雖如此,要完全理解各種機器學習模型(包括深度學習和傳統統計模型)可能具有挑戰性,尤其是在考慮遇到與用于訓練它們的數據截然不同的數據時它們的行為方式時。我們將在整本書中討論這個問題。

    2013 年,博士生 Matt Zeiler 和他的導師 Rob Fergus 發表了“Visualizing and Understanding Convolutional Networks”,它展示了如何可視化在模型的每一層中學習到的神經網絡權重。他們仔細分析了贏得 2012 年 ImageNet 比賽的模型,并利用這種分析極大地改進了模型,使他們能夠繼續贏得 2013 年的比賽!圖 1-10是他們發布的第一層權重的圖片。

    圖 1-10。CNN 第一層的激活(由 Matthew D. Zeiler 和 Rob Fergus 提供)

    這張照片需要一些解釋。對于每一層,淺灰色背景的圖像部分顯示了重建的權重,底部較大的部分顯示了訓練圖像中與每組權重最匹配的部分。對于第 1 層,我們可以看到模型發現了代表對角線、水平和垂直邊緣以及各種梯度的權重。(請注意,對于每一層,只顯示了特征的一個子集;實際上,所有層都有數千個。)

    這些是模型為計算機視覺學習的基本構建塊。神經科學家和計算機視覺研究人員對它們進行了廣泛分析,事實證明,這些學習到的構建塊與人眼中的基本視覺機制以及在深度學習。下一層?如圖 1-11 所示。

    ?????????????????????????圖 1-11。CNN 第二層的激活(由 Matthew D. Zeiler 和 Rob Fergus 提供)

    對于第 2 層,模型找到的每個特征都有 9 個權重重建示例。我們可以看到該模型已經學會創建特征檢測器來尋找角落、重復線、圓圈和其他簡單模式。這些是從第一層開發的基本構建塊構建的。對于其中的每一個,圖片的右側顯示了這些特征最匹配的實際圖像中的小塊。例如,第 2 行第 1 列中的特定圖案與日落相關的漸變和紋理相匹配。

    圖 1-12顯示了論文中的圖像,顯??示了重建第 3 層特征的結果。

    ?????????????????????????圖 1-12。CNN 第三層的激活(由 Matthew D. Zeiler 和 Rob Fergus 提供)

    從這張圖片的右側可以看出,這些特征現在能夠識別和匹配更高級別的語義組件,例如車輪、文本和花瓣。使用這些組件,第 4 層和第 5 層可以識別更高級別的概念,如圖 1-13所示。

    ??????????????圖 1-13。CNN 第四層和第五層的激活(由 Matthew D. Zeiler 和 Rob Fergus 提供)????????

    這篇文章正在研究一個名為AlexNet的舊模型,它只包含五層。從那時起開發的網絡可以有數百層——因此您可以想象這些模型開發的功能有多么豐富!

    當我們早些時候微調我們的預訓練模型時,我們調整了最后一層關注的內容(花、人類、動物),以專注于貓與狗的問題。更一般地說,我們可以將這種預訓練模型專門用于許多不同的任務。讓我們看一些例子。

    圖像識別器可以處理非圖像任務

    顧名思義,圖像識別器只能識別圖像。?但是很多東西都可以表示為圖像,這意味著圖像識別器可以學習完成很多任務。

    例如,聲音可以轉換為頻譜圖,這是一個?顯示音頻文件中每個時間的每個頻率的數量的圖表。Fast.ai 的學生 Ethan Sutin 使用這種方法,使用 8,732?個城市聲音的數據集輕松擊敗了已發布的最先進環境聲音檢測模型的準確性。fastaishow_batch清楚地顯示了每個聲音如何具有非常獨特的頻譜圖,?如圖 1-14 所示。

    ????????????????????????????????????????????????圖 1-14。帶有聲音頻譜圖的 show_batch

    通過簡單地繪制時間序列可以很容易地轉換為圖像?圖上的時間序列。但是,嘗試以一種盡可能容易地提取最重要組件的方式來表示數據通常是一個好主意。在時間序列中,像季節性和異常這樣的東西最有可能引起人們的興趣。

    各種轉換可用于時間序列數據。例如,fast.ai 的學生 Ignacio Oguiza 使用稱為 Gramian Angular Difference Field (GADF) 的技術從時間序列數據集中創建用于橄欖油分類的圖像;您可以在圖 1-15中看到結果。然后,他將這些圖像輸入到圖像分類模型中,就像您在本章中看到的那樣。他的結果盡管只有 30 張訓練集圖像,但準確率遠遠超過 90%,接近最先進的水平。

    圖 1-15。將時間序列轉換為圖像

    另一個有趣的 fast.ai 學生項目示例來自 Gleb Esman。他在 Splunk 從事欺詐檢測工作,使用用戶鼠標移動和鼠標點擊的數據集。他把這些變成圖片,用彩色線條畫出鼠標指針的位置、速度和加速度,并用彩色?小圓圈顯示點擊,如圖1-16所示。他將其輸入到圖像識別模型中,就像我們在本章中使用的模型一樣,并且效果非常好,以至于為這種欺詐分析方法獲得了專利!

    圖 1-16。將計算機鼠標行為轉換為圖像

    另一個例子來自?Mahmoud Kalash 等人的論文“Malware Classification with Deep Convolutional Neural Networks” ,該論文解釋了?“惡意軟件二進制文件被分成 8 位序列,然后轉換為等效的十進制值。這個十進制向量被重新整形,并生成了代表惡意軟件樣本的 [a] 灰度圖像,”在圖 1-17中。

    圖 1-17。惡意軟件分類過程

    然后作者展示了不同類別的惡意軟件通過這個過程生成的“圖片”,如圖 1-18所示。

    ?????????????????????????????????????????????????圖 1-18。惡意軟件示例

    如您所見,不同類型的惡意軟件在人眼中看起來非常獨特。研究人員基于此圖像表示訓練的模型在惡意軟件分類方面比學術文獻中顯示的任何先前方法更準確。這表明了將數據集轉換為圖像表示的一個很好的經驗法則:如果人眼可以從圖像中識別類別,那么深度學習模型也應該能夠做到這一點。

    一般來說,如果您在表示數據的方式上有點創意,您會發現深度學習中的少數通用方法可以走很長一段路!您不應將此處描述的方法視為“hacky workarounds”,因為它們經常(如此處)擊敗以前最先進的結果。這些確實是思考這些問題領域的正確方法。

    行話回顧

    我們剛剛介紹了很多信息,所以讓我們簡要回顧一下。?表 1-3提供了一個方便的詞匯表。

    表 1-3。深度學習詞匯學期意義
    Label

    我們試圖預測的數據,例如“狗”或“貓”

    Architecture

    我們試圖擬合的模型模板;即,我們將輸入數據和參數傳遞給的實際數學函數

    Model

    架構與一組特定參數的組合

    Parameters

    模型中的值會改變它可以執行的任務,并通過模型訓練更新

    Fit

    更新模型的參數,使使用輸入數據的模型預測與目標標簽匹配

    Train

    適合的代名詞

    Pretrained model

    已經訓練過的模型,通常使用大型數據集,并且會進行微調

    Fine-tune

    為不同的任務更新預訓練模型

    Epoch

    一次完整地遍歷輸入數據

    Loss

    衡量模型好壞的指標,選擇通過 SGD 驅動訓練

    Metric

    衡量模型使用驗證集的效果,為人類消費選擇

    Training set

    從訓練中提取的一組數據,僅用于衡量模型的好壞

    Training set

    用于擬合模型的數據;不包括驗證集中的任何數據

    Overfitting

    以記住輸入數據的特定特征的方式訓練模型,而不是很好地泛化到訓練期間沒有看到的數據

    CNN

    卷積神經網絡;一種特別適用于計算機視覺任務的神經網絡

    有了這個詞匯表,我們現在可以將迄今為止介紹的所有關鍵概念匯總在一起?;c時間查看這些定義并閱讀以下摘要。如果您可以按照解釋進行操作,那么您就可以很好地理解即將進行的討論。

    機器學習是一門學科,我們在其中定義程序而不是通過?完全由我們自己編寫,但通過從數據中學習。深度學習是機器學習中的一門專業,它使用多層神經網絡。圖像分類是一個有代表性的例子(也稱為圖像識別)。我們從標記數據開始——一組圖像,我們為每個圖像分配了一個?標簽,表明它代表什么。我們的目標是生成一個程序,稱為模型,給定一張新圖像,該程序將準確預測該新圖像所代表的內容。

    每個模型都從架構的選擇開始,這是該模型在內部如何工作的通用模板。訓練?(或擬合)模型的過程是找到一組參數值(或權重)的過程,這些參數值(或權重)將通用架構專門化為適用于我們特定類型數據的模型。為了定義一個模型在單個預測上的表現如何,我們需要定義一個?損失函數,它決定了我們如何對預測進行評分。

    為了讓訓練過程更快,我們可能會從一個?預訓練模型開始——一個已經在其他人的數據上訓練過的模型。然后,我們可以通過對我們的數據進行更多的訓練來使其適應我們的數據,這個過程稱為微調。

    當我們訓練一個模型時,一個關鍵的問題是確保我們的模型?泛化:它從我們的數據中學習一般的經驗教訓?這也適用于它將遇到的新項目,因此它可以對這些項目做出良好的預測。風險在于,如果我們訓練我們的模型不好,而不是學習一般課程,它會有效地記住它已經看到的內容,然后它會對新圖像做出糟糕的預測。這種失敗稱為過擬合。

    為了避免這種情況,我們總是將數據分成兩部分,訓練集和?驗證集。我們通過僅顯示訓練集來訓練模型,然后通過查看模型在驗證集中的項目上的表現來評估模型的表現。通過這種方式,我們檢查模型從訓練集中學到的課程是否是推廣到驗證集的課程。為了讓人們評估模型在整個驗證集上的表現如何,我們定義了一個?metric。在訓練過程中,當模型看到訓練集中的每個項目時,我們稱之為epoch。

    所有這些概念通常都適用于機器學習。它們適用于通過數據訓練來定義模型的各種方案。使深度學習與眾不同的是一類特殊的架構:基于神經網絡的架構。特別是,像圖像分類這樣的任務在很大程度上依賴于?卷積神經網絡,我們將在稍后討論。

    深度學習不僅僅用于圖像分類

    近年來,深度學習對圖像分類的有效性得到了廣泛的討論,甚至在復雜的任務中表現出超人的?結果,比如在 CT 掃描中識別惡性腫瘤。但它可以做的遠不止這些,我們將在這里展示。

    例如,讓我們談談對自動駕駛汽車至關重要的事情:定位圖片中的對象。如果一個?自動駕駛汽車不知道行人在哪里,那就不知道如何避開!創建一個可以識別圖像中每個單獨像素內容的模型稱為?分割。以下是我們如何使用Gabriel J. Brostow 等人的論文?“視頻中的語義對象類:高清地面實況數據庫”中的CamVid數據集的子集,使用 fastai 訓練分割模型的方法:

    path = untar_data(URLs.CAMVID_TINY) dls = SegmentationDataLoaders.from_label_func(path, bs=8, fnames = get_image_files(path/"images"),label_func = lambda o: path/'labels'/f'{o.stem}_P{o.suffix}',codes = np.loadtxt(path/'codes.txt', dtype=str) )learn = unet_learner(dls, resnet34) learn.fine_tune(8)

    epochtrain_lossvalid_losstime
    02.9066012.34749100:02
    epochtrain_lossvalid_losstime
    01.9887761.76596900:02
    11.7033561.26524700:02
    21.5915501.30986000:02
    31.4597451.10266000:02
    41.3242290.94847200:02
    51.2058590.89463100:02
    61.1025280.80956300:02
    71.0208530.80513500:02

    我們甚至不打算逐行瀏覽此代碼,因為它與我們之前的示例幾乎相同!(我們將在第 15 章中深入探討分割模型?,以及我們在本章中簡要介紹的所有其他模型以及許多其他模型。)

    我們可以通過要求模型對圖像的每個像素進行顏色編碼來可視化它完成任務的效果。如您所見,它幾乎完美地分類了每個對象中的每個像素。例如,注意所有的汽車都覆蓋了相同的顏色,所有的樹都覆蓋了相同的顏色(在每對圖像中,左邊的圖像是地面實況標簽,右邊是來自該模型):

    learn.show_results(max_n=6, figsize=(7,8))

    另一個深度學習在過去得到顯著改善的領域?幾年是自然語言處理(NLP)。計算機現在可以生成文本、自動從一種語言翻譯成另一種語言、分析評論、在句子中標記單詞等等。以下是訓練模型所需的所有代碼,該模型可以比五年前世界上存在的任何東西更好地對電影評論的情緒進行分類:

    from fastai.text.all import *dls = TextDataLoaders.from_folder(untar_data(URLs.IMDB), valid='test') learn = text_classifier_learner(dls, AWD_LSTM, drop_mult=0.5, metrics=accuracy) learn.fine_tune(4, 1e-2)

    epochtrain_lossvalid_lossaccuracytime
    00.5949120.4074160.82364001:35
    epochtrain_lossvalid_lossaccuracytime
    00.2682590.3162420.87600003:03
    10.1848610.2462420.89808003:10
    20.1363920.2200860.91820003:16
    30.1064230.1910920.93136003:15

    該模型使用Andrew Maas 等人的“Learning Word Vectors for Sentiment Analysis”中的IMDb Large Movie Review 數據集。它適用于成千上萬字的電影評論,但讓我們用一個簡短的評論來測試它,看看它是如何工作的:

    learn.predict("I really liked that movie!") ('pos', tensor(1), tensor([0.0041, 0.9959]))

    在這里我們可以看到模型認為評論是積極的。結果的第二部分是“pos”在我們的數據詞匯表中的索引,最后一部分是歸因于每個類的概率(“pos”為 99.6%,“neg”為 0.4%)。

    現在輪到你了!寫你自己的迷你影評,或者從網上復制一個,你可以看看這個模型是怎么想的。

    訂單很重要

    在 Jupyter 筆記本中,執行每個單元的順序很重要。它不像 Excel,只要您在任何地方鍵入內容,所有內容都會立即更新 - 它具有每次執行單元格時都會更新的內部狀態。例如,當您運行筆記本的第一個單元格時(帶有“CLICK ME”注釋),您?創建一個名為的對象learn,其中包含圖像分類問題的模型和數據。

    如果我們要立即運行文本中剛剛顯示的單元格(預測評論是否良好的單元格),我們會得到一個錯誤,因為該learn對象不包含文本分類模型。此單元格需要在包含以下內容的單元格之后運行:

    from fastai.text.all import *dls = TextDataLoaders.from_folder(untar_data(URLs.IMDB), valid='test') learn = text_classifier_learner(dls, AWD_LSTM, drop_mult=0.5,metrics=accuracy) learn.fine_tune(4, 1e-2)

    輸出本身可能具有欺騙性,因為它們包括上次執行單元格的結果;如果您更改單元格內的代碼而不執行它,舊的(誤導性)結果將保留。

    除非我們明確提及,否則本書網站上提供的筆記本是按順序運行的,從上到下。通常,在進行實驗時,您會發現自己以任意順序執行單元以快速運行(這是 Jupyter Notebook 的一個超級簡潔的功能),但是一旦您探索并到達了代碼的最終版本,請確保您可以運行按順序排列筆記本中的單元格(你未來的自己不一定會記得你走的錯綜復雜的道路!)。

    在命令模式下,鍵入0兩次將重新啟動內核(即為筆記本電腦提供動力的引擎)。這將清除您的狀態并使其就像您剛剛開始使用筆記本一樣。從“單元格”菜單中選擇“運行所有以上”以運行您所在位置上方的所有單元格。我們發現這在開發 fastai 庫時很有用。

    如果您對 fastai 方法有任何疑問,您應該使用?function?doc,將方法名稱傳遞給它:

    doc(learn.predict)

    彈出一個窗口,其中包含簡短的單行說明?!霸谖臋n中顯示”鏈接將帶您進入完整文檔,您可以在其中找到所有詳細信息和大量示例。還,?fastai 的大多數方法都只是幾行代碼,因此您可以單擊“源”鏈接以查看幕后發生的確切情況。

    讓我們繼續做一些不那么性感,但可能在商業上更有用的東西:從簡單的表格數據構建模型。

    行話:表格

    表格形式的數據,例如來自電子表格、數據庫或逗號分隔值 (CSV) 文件的數據。表格模型是一種嘗試根據表中其他列中的信息來預測表中的一列的模型。

    事實證明,這看起來也非常相似。以下是訓練一個模型所必需的代碼,該模型將根據一個人的社會經濟背景預測一個人是否是高收入者:

    from fastai.tabular.all import * path = untar_data(URLs.ADULT_SAMPLE)dls = TabularDataLoaders.from_csv(path/'adult.csv', path=path, y_names="salary",cat_names = ['workclass', 'education', 'marital-status', 'occupation','relationship', 'race'],cont_names = ['age', 'fnlwgt', 'education-num'],procs = [Categorify, FillMissing, Normalize])learn = tabular_learner(dls, metrics=accuracy)

    如您所見,我們必須告訴 fastai 哪些列是分類的(包含作為離散選擇集之一的值,例如occupation)與連續的(包含表示數量的數字,例如age)。

    沒有可用于此任務的預訓練模型(通常,預訓練模型不適用于任何表格建模任務,盡管一些組織已經創建它們供內部使用),fine_tune所以我們在這種情況下?不使用。相反,我們使用?fit_one_cycle最常用的從頭開始訓練 fastai 模型的方法(即,沒有遷移學習):

    learn.fit_one_cycle(3)

    epoch

    train_lossvalid_lossaccuracytime
    00.3599600.3579170.83138800:11
    10.3534580.3496570.83799100:10
    20.3383680.3469970.84321300:10

    該模型使用Ron Kohavi的論文?“Scaling Up the Accuracy of Naive-Bayes Classifiers: a Decision-Tree Hybrid”中的成人數據集,其中包含一些?有關個人的人口統計數據(例如他們的教育、婚姻狀況、種族、性別以及他們的年收入是否超過 5 萬美元)。該模型的準確率超過 80%,訓練時間約為 30 秒。

    讓我們再看一個。推薦系統很重要,尤其是在電子商務中。亞馬遜和 Netflix 等公司努力推薦用戶可能喜歡的產品或電影。這是訓練預測電影人的模型的方法?可能會根據他們之前的觀看習慣,使用MovieLens數據集:

    from fastai.collab import * path = untar_data(URLs.ML_SAMPLE) dls = CollabDataLoaders.from_csv(path/'ratings.csv') learn = collab_learner(dls, y_range=(0.5,5.5)) learn.fine_tune(10) epochtrain_lossvalid_losstime
    01.5540561.42807100:01
    epochtrain_lossvalid_losstime
    01.3931031.36134200:01
    11.2979301.15916900:00
    21.0527050.82793400:01
    30.8101240.66873500:01
    40.7115520.62783600:01
    50.6574020.61171500:01
    60.6330790.60573300:01
    70.6223990.60267400:01
    80.6290750.60167100:00
    90.6199550.60155000:01

    該模型在 0.5 到 5.0 的范圍內預測電影收視率,平均誤差在 0.6 左右。由于我們預測的是一個連續的數字,而不是一個類別,我們必須使用y_range參數告訴 fastai 我們的目標有什么范圍。

    盡管我們實際上并沒有使用預訓練模型(與我們沒有使用表格模型的原因相同),這個例子表明 fastai 讓我們在這種情況下無論如何都可以使用(你將在第 5 章fine_tune了解它的工作原理和原因?)。有時最好試驗一下vs看看哪個最適合您的數據集。fine_tunefit_one_cycle

    我們可以使用之前看到的相同show_results調用來查看一些用戶和電影 ID、實際評分和預測的示例:

    learn.show_results() userIdmovieIDratimgrating_pred0123456789
    15712004.03.558502
    233442.02.700709
    1912215.04.390801
    4305923.53.944848
    5478584.04.076881
    292394.53.753513
    52912654.03.349463
    192313.02.881087
    47549634.04.023387
    1302604.53.979703

    數據集:模型的食物

    您已經在本節中看到了很多模型,每個模型都使用不同的數據集進行訓練以執行不同的任務。在機器學習和深度學習中,沒有數據我們什么都做不了。因此,為我們創建數據集以訓練我們的模型的人是(通常被低估的)英雄。一些最有用和最重要的數據集是那些成為重要學術基線的數據集——?研究人員廣泛研究并用于比較算法變化的數據集。其中一些成為家喻戶曉的名字(至少在訓練模型的家庭中!),例如 MNIST、CIFAR-10 和 ImageNet。

    之所以選擇本書中使用的數據集,是因為它們提供了您可能遇到的數據類型的很好示例,并且學術文獻中有許多使用這些數據集的模型結果示例,您可以將其與您的工作進行比較。

    本書中使用的大多數數據集都花費了創建者大量的工作來構建。例如,在本書的后面,我們將向您展示如何創建一個可以在法語和英語之間進行翻譯的模型。鑰匙?對此的輸入是賓夕法尼亞大學的 Chris Callison-Burch 教授于 2009 年編寫的法語/英語平行文本語料庫。該數據集包含超過 2000 萬個句子對?法語和英語。他以一種非常聰明的方式構建了數據集:通過爬取數百萬加拿大網頁(通常是多語言的),然后使用一組簡單的啟發式方法將法語內容的 URL 轉換為指向相同英語內容的 URL。

    當你在本書中查看數據集時,想想它們可能來自哪里以及它們可能是如何被整理的。然后想想你可以為自己的項目創建什么樣的有趣數據集。(我們甚至會很快帶您逐步完成創建自己的圖像數據集的過程。)

    fast.ai 花了很多時間創建流行數據集的縮減版本,這些數據集專門用于支持快速原型設計和?實驗,更容易學習。在本書中,我們通常會從使用其中一個縮小版開始,然后放大到完整版(就像我們在本章中所做的那樣!)。這就是世界頂級從業者在實踐中的建模方式;他們使用數據子集進行大部分實驗和原型設計,并且只有在充分了解自己必須做什么時才使用完整的數據集。

    我們訓練的每個模型都顯示了訓練和驗證損失。一個好的驗證集是訓練過程中最重要的部分之一。讓我們看看為什么并學習如何創建一個。

    驗證集和測試集

    正如我們所討論的,模型的目標是對數據進行預測。但是模型訓練過程從根本上說是愚蠢的。如果我們使用所有數據訓練模型,然后使用相同的數據評估模型,我們將無法判斷我們的模型在它未見過的數據上的表現如何。如果沒有這條非常有價值的信息來指導我們訓練我們的模型,它很有可能會很好地預測該數據,但在新數據上表現不佳。

    為了避免這種情況,我們的第一步是將我們的數據集分成兩組:訓練集(我們的模型在訓練中看到)和驗證集,也稱為開發集?(僅用于評估)。這讓我們可以測試模型是否從訓練數據中吸取教訓,這些數據可以推廣到新數據,即驗證數據。

    理解這種情況的一種方法是,從某種意義上說,我們不希望我們的模型通過“作弊”來獲得好的結果。如果它對一個數據項做出了準確的預測,那應該是因為它已經學習了該類項的特征,而不是因為模型是通過實際看到該特定項而形成的。

    分離我們的驗證數據意味著我們的模型在訓練中永遠不會看到它,因此完全不受它的污染,也沒有以任何方式作弊。正確的?

    事實上,不一定。情況更加微妙。這是因為在現實場景中,我們很少只通過訓練一次參數來構建模型。相反,我們可能會通過關于網絡架構、學習率、數據增強策略以及我們將在接下來的章節中討論的其他因素的各種建模選擇來探索模型的許多版本。許多這些選擇可以描述為超參數的選擇。這個詞反映了?它們是關于參數的參數,因為它們是控制權重參數含義的更高級別的選擇。

    問題在于,即使普通的訓練過程在學習權重參數值時只查看對訓練數據的預測,但我們的情況并非如此。當我們決定探索新的超參數值時,作為建模者,我們正在通過查看對驗證數據的預測來評估模型!因此,模型的后續版本間接地由我們看到驗證數據形成。正如自動訓練過程存在過度擬合訓練數據的危險一樣,我們也存在通過人工試錯和探索過度擬合驗證數據的危險。

    這個難題的解決方案是引入另一個級別更高的保留數據:測試集。正如我們在訓練過程中保留驗證數據一樣,我們必須保留測試?甚至來自我們自己的數據。不能用于改進模型;它只能用于在我們努力的最后階段評估模型。實際上,我們定義了數據切割的層次結構,基于我們希望將其從訓練和建模過程中隱藏的程度:訓練數據完全公開,驗證數據公開較少,測試數據完全隱藏。這種層次結構與不同類型的建模和評估過程本身平行——帶有反向傳播的自動訓練過程,在訓練會話之間嘗試不同超參數的更多手動過程,以及對我們最終結果的評估。

    測試和驗證集應該有足夠的數據來確保你?對您的準確性有一個很好的估計。例如,如果您正在創建一個貓檢測器,您通常希望驗證集中至少有 30 只貓。這意味著,如果您有一個包含數千個項目的數據集,則使用默認的 20% 驗證集大小可能超出您的需要。另一方面,如果您有大量數據,使用其中的一些進行驗證可能沒有任何缺點。

    擁有兩個級別的“保留數據”——一個驗證集和一個測試集,其中一個級別代表你實際上對自己隱藏的數據——可能看起來有點極端。但這通常是必要的,因為模型傾向于使用最簡單的方法來進行良好的預測(記憶),作為易犯錯誤的人類,我們往往傾向于自欺欺人,因為我們的模型表現如何。測試集的紀律幫助我們在智力上保持誠實。這并不意味著我們總是需要一個單獨的測試集——如果你的數據很少,你可能只需要一個驗證集——但通常最好盡可能使用一個。

    如果您打算聘請第三方代表您執行建模工作,那么同樣的紀律也很重要。第三方可能無法準確理解您的要求,或者他們的激勵措施甚至可能鼓勵他們誤解它們。一個好的測試集可以大大降低這些風險,并讓您評估他們的工作是否解決了您的實際問題。

    坦率地說,如果您是組織中的高級決策者(或者您正在為高級決策者提供建議),那么最重要的一點是:如果您確保您真正了解測試和驗證集是什么以及為什么它們'很重要,當組織決定使用 AI 時,您將避免我們看到的最大的單一失敗源。例如,如果您正在考慮引入外部供應商或服務,請確保您提供一些供應商永遠無法看到的測試數據。然后,您根據您的測試數據檢查他們的模型,使用您根據實踐中對您真正重要的因素選擇的指標,然后您決定什么水平的性能是足夠的。(您自己嘗試簡單的基線也是一個好主意,這樣您就知道一個真正簡單的模型可以實現什么。通常會證明您的簡單模型的性能與外部“專家”產生的模型一樣好! )

    在定義測試集時使用判斷

    要做好定義驗證集(也可能是測試集)的工作,?您有時會想做的不僅僅是隨機抓取原始數據集的一小部分。請記住:驗證集和測試集的一個關鍵屬性是它們必須代表您將來會看到的新數據。這聽起來像是一個不可能的命令!根據定義,您還沒有看到這些數據。但你通常仍然知道一些事情。

    看幾個例子很有啟發意義。其中許多示例來自預測建模競賽在?Kaggle平臺上,它很好地代表了你在實踐中可能會看到的問題和方法。

    一種情況可能是您正在查看時間序列數據。對于時間序列,選擇數據的隨機子集都太容易了(您?可以查看您嘗試預測的日期之前和之后的數據)并且不代表大多數業務用例(您使用歷史數據構建模型以供將來使用)。如果您的數據包含日期并且您正在構建一個模型以供將來使用,您將需要選擇具有最新日期的連續部分作為您的驗證集(例如,最近兩周或上個月的可用數據)。

    假設您要將圖 1-19中的時間序列數據拆分 為訓練集和驗證集。

    ?????????????????????????????????????????????????圖 1-19。一個時間序列

    正如我們在圖 1-20中看到的那樣,隨機子集是一個糟糕的選擇(太容易填補空白,并且不能說明您在生產中需要什么)。

    ?????????????????????????????????????????????????圖 1-20。一個糟糕的訓練子集

    相反,使用較早的數據作為您的訓練集(以及較晚的數據作為驗證集),如圖 1-21所示。

    ?????????????????????????????????????????????????????????????????????圖 1-21。一個好的訓練子集

    例如,Kaggle 舉辦了一場?預測厄瓜多爾連鎖雜貨店銷售額的比賽??ǜ駹柕?訓練數據從 2013 年 1 月 1 日到 2017 年 8 月 15 日,測試數據從 2017 年 8 月 16 日到 2017 年 8 月 31 日。這樣,比賽組織者確保參賽者?在未來,從他們的模型的角度來看。這類似于量化對沖基金交易員根據過去的數據進行回測以檢查他們的模型是否可以預測未來時期的方式。

    第二種常見情況是,您可以輕松預測在生產中預測的數據可能與您必須用來訓練模型的數據在質量上不同的方式。

    在 Kaggle?分心駕駛員比賽中,自變量是駕駛汽車的駕駛員的照片,因變量是諸如?發短信、吃飯或安全地向前看。很多圖片都是相同的司機在不同的位置,?如圖 1-22 所示。如果您是一家保險公司,根據這些數據構建模型,請注意,您最感興趣的是模型在以前從未見過的駕駛員身上的表現(因為您可能只有一小部分人的訓練數據)。認識到這一點,比賽的測試數據由未出現在訓練集中的人的圖像組成。

    ?????????????????????????????????????????????????????????????????????圖 1-22。來自訓練數據的兩張圖片

    如果將圖 1-22中的一張圖像放入訓練集中,另一張放入驗證集中,您的模型將很容易對驗證集中的一張進行預測,因此它的性能似乎比它會在新人身上。另一種觀點是,如果你使用所有人來訓練你的模型,你的模型可能會過度擬合這些特定人的特殊性,而不僅僅是學習狀態(發短信、吃飯等)。

    Kaggle 漁業競賽中也有類似的動態,?以確定漁船捕獲的魚類種類,以減少對瀕危種群的非法捕撈。這?測試集由未出現在訓練數據中的船只圖像組成,因此在這種情況下,您希望驗證集也包括不在訓練集中的船只。

    有時可能不清楚您的驗證數據將有何不同。例如,對于使用衛星圖像的問題,您需要收集有關訓練集是僅包含某些地理位置還是來自地理上分散的數據的更多信息。

    現在您已經了解了如何構建模型,您可以決定接下來要深入研究什么。

    進一步的研究

    每章還有一個“進一步研究”部分,提出了一些文本中沒有完全回答的問題,或者給出了更高級的作業。這些問題的答案不在本書的網站上。你需要自己做研究!

  • 為什么 GPU 對深度學習有用?CPU 有何不同,為什么它對深度學習的效果較差?

  • 嘗試考慮反饋循環可能影響機器學習使用的三個領域??纯茨欠窨梢哉业皆趯嵺`中發生的記錄示例。

  • 總結

    以上是生活随笔為你收集整理的【Pytorch with fastai】第 1 章:你的深度学习之旅的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    国产99久久久久久免费看 | 久久99精品国产麻豆宅宅 | 在线观看一级片 | 天天摸天天舔 | 国产一及片 | 国产精品欧美一区二区 | 天天干天天搞天天射 | 在线黄色毛片 | 成人在线黄色电影 | a午夜电影 | 国产福利一区二区三区在线观看 | 国产色一区 | 免费观看成人 | 国产精品中文字幕在线播放 | 蜜桃视频日本 | 亚洲欧美乱综合图片区小说区 | 免费下载高清毛片 | 欧美一区二区三区在线看 | 成人在线播放网站 | 日韩偷拍精品 | 中国老女人日b | 福利视频 | 在线视频免费观看 | 久久综合免费 | av片子在线观看 | 精品在线视频一区二区三区 | 美女视频黄免费 | 丁香六月婷婷激情 | 丁五月婷婷 | 成人午夜电影久久影院 | 亚洲精品动漫久久久久 | 亚洲高清在线精品 | 99精品福利 | 天天色天天操天天爽 | 欧美黑人性猛交 | 超碰97国产在线 | 天天色天天射天天综合网 | av.com在线 | 91毛片在线观看 | 狠狠躁夜夜躁人人爽视频 | 韩国精品在线观看 | 久久精品高清 | 在线免费观看视频一区 | 国产免费视频一区二区裸体 | 国内99视频| 香蕉视频4aa | 国产资源在线免费观看 | 99精品久久久久 | 成年人电影免费在线观看 | 美女视频a美女大全免费下载蜜臀 | 欧美性生活免费 | 国产大陆亚洲精品国产 | 国产精品二区在线观看 | 中文字幕在线网 | 五月天激情综合网 | 成人在线播放视频 | av高清一区二区三区 | 成人在线观看你懂的 | 日韩欧美综合在线视频 | 国产精品久久久久av福利动漫 | 欧美精品久久久久久 | 四虎影视久久久 | 亚洲a网 | 人人澡人人爽欧一区 | 久久综合久久伊人 | 日韩精品影视 | 96久久精品 | 三级毛片视频 | 国产精品一区二区av日韩在线 | 久久久久久久久久久影视 | 99riav1国产精品视频 | 九九九视频在线 | 日韩一区精品 | 中文字幕在线日亚洲9 | 91精品久久久久久粉嫩 | 日本公妇在线观看 | 久久黄色精品视频 | 天天射狠狠干 | 蜜臀av性久久久久av蜜臀三区 | 国产99色| 在线观看 亚洲 | 欧美成年人在线观看 | 免费av在线网站 | 欧美日韩视频精品 | 亚洲欧洲xxxx | 日韩精品久久久久久中文字幕8 | 国产精品免费在线观看视频 | av中文字幕亚洲 | 欧美精品三级在线观看 | 国产精品第一 | 亚州精品天堂中文字幕 | 国产乱对白刺激视频在线观看女王 | 91自拍视频在线观看 | 中文字幕色站 | 99视频国产在线 | 久久精品91视频 | 麻豆免费视频网站 | 天天射天天干天天爽 | 香蕉免费在线 | 久久久综合电影 | 国产精品麻豆99久久久久久 | 日韩大片在线看 | 婷婷网五月天 | 欧美日本日韩aⅴ在线视频 插插插色综合 | 特级黄色视频毛片 | 国产资源网站 | 久久久久视 | 99久久毛片 | www.久热| 国产日韩高清在线 | 日韩在线视频一区二区三区 | av中文字幕在线电影 | 国产精品久久久久久久久久久久午夜片 | 国产亚洲精品久久久久久大师 | 视频在线精品 | 日本精品午夜 | 亚洲午夜久久久综合37日本 | 亚洲国产美女久久久久 | 欧美va日韩va | 色.com| 国产91欧美 | 国产一级黄色av | 国产成人三级在线播放 | 中文字幕一区二区三区乱码不卡 | 香蕉97视频观看在线观看 | 久久精品系列 | 在线91网| 国产精品免费观看国产网曝瓜 | 精品免费久久 | 69国产精品视频免费观看 | 日本亚洲国产 | 精品国产亚洲在线 | 日操干| 96久久 | av电影免费在线播放 | 国产麻豆精品传媒av国产下载 | 亚洲国产黄色片 | 色吊丝在线永久观看最新版本 | 精品国产伦一区二区三区观看方式 | 夜夜夜 | 激情视频在线高清看 | 婷婷久久综合九色综合 | 久久艹中文字幕 | 欧美一级日韩免费不卡 | 免费观看国产精品 | 天天操夜夜曰 | 国产在线观看免费 | 成年人免费看的视频 | 51久久成人国产精品麻豆 | 色网址99 | 欧美一级久久久久 | 人人插人人澡 | 欧美久久久久久久久久 | 日本黄色免费在线观看 | 亚州精品视频 | 国产日产精品久久久久快鸭 | 欧美 日韩 性 | 久久精品三级 | 青青草国产精品 | 91在线视频免费播放 | 丁香六月综合网 | 麻豆传媒视频在线 | 最近中文字幕大全中文字幕免费 | 九九热久久免费视频 | 丁香一区二区 | 福利视频入口 | 久久国产精品久久精品国产演员表 | 国产精品久久影院 | 欧美精品黑人性xxxx | www.午夜| 免费久久视频 | 在线观看国产福利片 | 成人免费在线看片 | 色婷婷综合在线 | 国内精品在线一区 | 五月天六月色 | 九九国产视频 | 九九视频精品在线 | 色综合久久久久网 | 中文一区二区三区在线观看 | 精品视频免费 | 日韩一区二区三区免费视频 | 国产一区二区在线视频观看 | 国产做aⅴ在线视频播放 | 国产精品久久久久久久久久尿 | 欧美激情在线看 | 亚洲高清视频在线观看 | 亚洲影视九九影院在线观看 | 99精品视频在线观看播放 | 麻豆一二三精选视频 | 久久久av电影 | 麻豆国产在线播放 | 九九久久精品 | 中文字幕日韩免费视频 | 手机看片国产 | 日本中文字幕在线免费观看 | 黄色中文字幕 | 成人免费视频在线观看 | 国产精品美女久久久久久2018 | 久久久久蜜桃 | 毛片基地黄久久久久久天堂 | 久久黄色免费视频 | 亚洲精品日韩一区二区电影 | 久久久精品在线观看 | 欧美日韩不卡在线观看 | 久久精品国产精品亚洲精品 | 国产精品普通话 | 久久久久国产一区二区 | 欧美性生交大片免网 | 国产在线不卡精品 | 亚洲国产播放 | 国产视频一二区 | 91av电影在线 | 婷婷五天天在线视频 | 在线看小早川怜子av | 亚洲综合少妇 | 91在线播 | 日韩mv欧美mv国产精品 | 色狠狠狠 | 欧美 日韩 视频 | 中文字幕在线观看完整 | 男女靠逼app | 久久精品美女视频 | 国产精品四虎 | 国产精品资源在线 | 黄色视屏免费在线观看 | 久久免费一级片 | 97超碰国产精品 | 六月色丁香 | 久久黄色成人 | av电影在线免费 | 天天射天天操天天干 | 成年人视频免费在线播放 | 992tv成人免费看片 | 在线免费观看欧美日韩 | 日本中文字幕在线看 | 久久久麻豆 | 天天射网站 | 免费av看片 | 免费精品人在线二线三线 | 狠狠操天天射 | www亚洲一区 | 亚洲欧美色婷婷 | 丝袜+亚洲+另类+欧美+变态 | 亚洲最新视频在线播放 | 日韩高清激情 | 免费黄a | 国产日韩欧美在线免费观看 | 精品亚洲视频在线 | 免费观看的黄色 | 五月天丁香视频 | 成人h视频在线播放 | 亚洲欧美国产精品18p | 国产成人一区二区三区在线观看 | 成人资源在线观看 | 99色网站| 国产精品久久亚洲 | 五月激情丁香婷婷 | 又黄又爽的视频在线观看网站 | 日韩xxxx视频 | 久久不卡电影 | 97精品国产97久久久久久免费 | 亚洲精品国产精品国自产观看 | 人人精久 | 国产精品成人自产拍在线观看 | 99久久婷婷国产综合精品 | 国产成人精品不卡 | 免费日韩一区二区 | 成人av一区二区兰花在线播放 | 亚洲免费在线观看视频 | 亚洲视频综合在线 | 中文字幕视频网站 | 最近最新mv字幕免费观看 | 国际精品久久 | 色婷婷88av视频一二三区 | 五月天丁香| 伊人成人激情 | 久操视频在线播放 | 亚洲精品日韩在线观看 | 亚洲高清在线视频 | 久久精品99国产精品 | 一区二区三区免费播放 | 国产精品久久影院 | 日韩女同一区二区三区在线观看 | 精品免费视频. | 在线观看久 | 欧美二区在线播放 | 一区二区在线影院 | 久久久久久97三级 | 国内精品在线观看视频 | 伊人伊成久久人综合网站 | 国产xvideos免费视频播放 | 精品国产一二区 | 亚洲激情综合 | 国产高清在线观看av | 国产成人精品免费在线观看 | 国产日韩在线播放 | 免费av片在线 | 天天干天天操天天干 | 2021av在线 | 九九热只有这里有精品 | 亚洲成aⅴ人在线观看 | 日韩精品一区二区三区三炮视频 | 国产黄色免费电影 | 黄色毛片视频免费 | 午夜久久久久久久久久影院 | 免费日韩视 | 成人黄色av网站 | 麻豆91精品| 成人手机在线视频 | 欧美性久久久久久 | 国产在线久久久 | 黄色电影小说 | 国内免费久久久久久久久久久 | 天天插视频 | 精品国产精品一区二区夜夜嗨 | 精品1区2区 | 国产一区久久久 | 啪啪凸凸 | 日韩午夜在线播放 | 一区二区三区免费在线观看视频 | 在线看av的网址 | 日韩精品最新在线观看 | 激情综合色图 | 丁香久久婷婷 | 草久视频在线观看 | 久久免费试看 | 一区二区不卡高清 | 久久99久久99精品免费看小说 | 久久国产精品精品国产色婷婷 | 一级欧美一级日韩 | 欧美性生活免费 | 国产69精品久久久久久 | 日韩在线视 | 又色又爽的网站 | 激情丁香在线 | 在线v片免费观看视频 | 国产成人免费在线 | 网站免费黄 | 狠狠操狠狠干2017 | 婷婷播播网 | 亚洲精品永久免费视频 | av色综合网 | 日韩性xxxx | 欧美日韩在线第一页 | 久久精品一区二区三区中文字幕 | av在线中文 | 成人在线免费观看网站 | 国外调教视频网站 | 中文字幕av免费在线观看 | 国产99久久久国产精品 | www.天天干 | 四虎成人精品永久免费av | 又黄又爽又湿又无遮挡的在线视频 | 国产婷婷在线观看 | 婷婷丁香在线视频 | 中文字幕二区在线观看 | 欧美日韩国产综合一区二区 | 91黄视频在线观看 | 国产 日韩 欧美 中文 在线播放 | 色婷婷狠狠18 | 亚洲精品tv久久久久久久久久 | 中文av网站 | 久久国产精品久久久久 | 国产资源在线观看 | 婷婷去俺也去六月色 | 射综合网 | 日本狠狠色 | 99免费在线视频 | 国产91精品一区二区麻豆网站 | 国产精品嫩草影院99网站 | 91丝袜美腿 | 国产精品久久久久久久久久免费 | 国产麻豆精品久久 | 欧美日韩亚洲第一页 | 丁香六月在线 | 18性欧美xxxⅹ性满足 | 99久久99久久 | 免费在线黄色av | 麻豆94tv免费版 | 国产精品无 | 在线国产精品视频 | 91在线入口 | 亚洲日日日 | av综合在线观看 | 在线观看国产区 | 黄色三级视频片 | 超碰在线最新地址 | 91成人看片 | 美女视频黄免费网站 | 正在播放国产一区 | 国产一区二区三区黄 | 在线观看不卡视频 | 在线а√天堂中文官网 | 国产精品白虎 | 午夜精品婷婷 | 五月天激情开心 | 久草香蕉在线视频 | 中文字幕一区二区三区久久蜜桃 | 九九视频这里只有精品 | 手机看片久久 | 日韩欧美精品一区二区三区经典 | 日韩免费精品 | 欧美性色综合网 | av在线收看| 日本一区二区高清不卡 | 91免费高清观看 | 午夜视频一区二区 | 精品国产伦一区二区三区观看体验 | 99热这里精品 | 91网站在线视频 | 人人草在线观看 | 日韩激情av在线 | 色综合中文综合网 | 日韩亚洲在线观看 | 国产黄视频在线观看 | 久久久久免费电影 | 人人爽久久久噜噜噜电影 | 最新国产精品视频 | 最新日韩视频在线观看 | 国产区精品在线观看 | 天天激情综合 | 丁香六月天 | 色婷婷久久久综合中文字幕 | 国产自偷自拍 | 亚洲欧美日韩一区二区三区在线观看 | 色天天中文 | japanese黑人亚洲人4k | 波多野结衣在线中文字幕 | 色www精品视频在线观看 | 在线观看网站av | 国产黄色电影 | 韩日电影在线 | 三级在线视频观看 | 色资源二区在线视频 | 婷婷在线网站 | 中日韩男男gay无套 日韩精品一区二区三区高清免费 | 人人爽人人射 | 亚洲国产婷婷 | 免费观看国产成人 | 国产精品成人av久久 | 日本在线观看黄色 | 中文资源在线播放 | 色婷婷播放 | 三级av片| 人人爽久久涩噜噜噜网站 | 亚洲午夜不卡 | 五月激情天| 久久久精品欧美一区二区免费 | 日韩电影一区二区三区在线观看 | 天天干天天干天天射 | 人人澡人人添人人爽一区二区 | 色妞色视频一区二区三区四区 | 国产视频2区 | av在线播放免费 | 国产精品久久久久久久久久久久午 | 手机在线观看国产精品 | 国产伦理精品一区二区 | 免费在线观看av网址 | 97看片| 丁香花五月 | 久久精品屋 | 国产精品嫩草69影院 | 深夜免费福利在线 | 操高跟美女 | 日批在线看 | 波多野结衣在线观看一区 | 97超级碰碰碰碰久久久久 | 午夜久久福利 | 日韩二区三区 | 在线观看国产一区二区 | 欧美日韩一区二区三区视频 | 久草在线视频网 | 玖玖视频 | 久草97| 亚洲播放一区 | av成人在线观看 | 黄色三级免费观看 | 亚洲综合激情网 | 狠狠干2018 | 狠狠色丁香婷婷综合基地 | 在线91精品 | www日韩在线观看 | 人人爽人人射 | 日本爱爱免费 | 久久精品人人做人人综合老师 | 午夜私人影院久久久久 | 亚洲日本一区二区在线 | 国产成人精品av久久 | 亚洲一区欧美激情 | www.夜夜操 | 精品国模一区二区三区 | 成人一区影院 | 亚洲伊人第一页 | 久久久久久久久久免费 | 人人舔人人舔 | 国产一级片免费播放 | 国内一区二区视频 | 天天干天天做天天爱 | 午夜av不卡| 丁香久久久| 亚洲精品动漫在线 | 国产日韩欧美精品在线观看 | 日韩综合色| 国产成人精品av在线观 | 四虎小视频| 国产一区私人高清影院 | 日日干 天天干 | 成人免费视频视频在线观看 免费 | 久久精品成人欧美大片古装 | 国产精品一区二区三区免费看 | 狠狠躁夜夜躁人人爽超碰97香蕉 | 99热精品国产一区二区在线观看 | 久久久久久久久精 | 久久精品99国产精品酒店日本 | 国产精品免费久久 | 色婷婷av国产精品 | 欧美资源 | 色姑娘综合网 | 国产精品手机在线播放 | 日韩免费在线观看视频 | 黄色软件在线观看免费 | 成年人免费观看国产 | 99精品国产兔费观看久久99 | 不卡的av电影在线观看 | 黄色软件在线观看 | 97成人在线视频 | 免费日韩在线 | 在线观看的a站 | 狠狠精品| 精品国产三级 | 激情婷婷亚洲 | 日本公妇色中文字幕 | 亚洲精品国偷拍自产在线观看蜜桃 | 一区二区三区免费看 | 日本爱爱片 | 色综合天天狠狠 | 欧美一区二区免费在线观看 | 鲁一鲁影院| 亚洲一区免费在线 | 国产一区二区电影在线观看 | 色综合久久88 | 在线看国产日韩 | 欧美激情精品久久久久久免费印度 | 亚洲另类视频在线观看 | 中文字幕亚洲精品日韩 | 国产精品福利视频 | 91精品久久久久久久91蜜桃 | 天天操月月操 | 91欧美日韩国产 | 97涩涩视频 | 三级av黄色| 精品不卡视频 | 久久精品国产久精国产 | 天天综合网在线 | 精品一区二区综合 | 99高清视频有精品视频 | 五月天亚洲综合 | 精品视频在线免费观看 | 狠狠干夜夜 | 一区 二区 精品 | 精品久久久久久亚洲综合网站 | 久久在线免费观看 | 玖草影院 | 99久久激情视频 | 久久免费中文视频 | 98超碰在线观看 | 久久久首页 | 国产精品门事件 | 国产精品精品久久久久久 | 亚洲综合色视频在线观看 | 欧美最猛性xxxxx免费 | 日韩免费视频在线观看 | 97视频入口免费观看 | 在线看污网站 | 国产字幕在线观看 | 欧美日韩不卡在线观看 | 国产高清专区 | 久久精品亚洲精品国产欧美 | 黄色三级免费片 | 国产精品99久久99久久久二8 | 99在线热播 | 天天操综合网站 | 国产精品手机看片 | 成人性生交大片免费观看网站 | 婷婷日日 | 国产亚洲精品久久久久久移动网络 | 国产黄色理论片 | 国产aaa免费视频 | 国产中文字幕一区二区三区 | 在线观看av网 | 久久免费一| 69人人 | 天天爽天天射 | 久久96国产精品久久99漫画 | 亚洲国产欧洲综合997久久, | 婷婷日日| 久久伦理| 久久超级碰视频 | 综合网中文字幕 | 九九久 | 九色自拍视频 | 国产精品久久久久aaaa九色 | 国产91粉嫩白浆在线观看 | 国产婷婷精品 | av免费在线观 | 国内久久久久 | 日韩午夜在线播放 | 日韩网站免费观看 | 日本久久久久久 | 国产成人免费在线观看 | 亚洲午夜精品一区二区三区电影院 | 国产精品自产拍在线观看网站 | 五月综合色 | 欧美国产高清 | 99草在线视频| 日韩手机在线 | 韩国av免费观看 | 免费看精品久久片 | 999成人精品 | 黄色a级片在线观看 | 在线观看视频91 | 91高清免费 | 欧洲精品久久久久毛片完整版 | 黄色avwww| 不卡中文字幕在线 | 国产99视频在线观看 | 精品亚洲网 | 97在线免费观看视频 | 天天干天天操人体 | 九九久久国产精品 | 999久久久 | 亚洲成aⅴ人在线观看 | 午夜久久福利视频 | 日韩免费福利 | 精品国产一区二区三区久久久蜜臀 | 96亚洲精品久久久蜜桃 | 国产麻豆精品一区二区 | 91精品久久久久久综合乱菊 | 成人精品一区二区三区中文字幕 | 天天曰天天 | 天天玩天天干 | 在线观看中文字幕亚洲 | 国产精品va在线观看入 | 麻豆精品传媒视频 | 国产黄色资源 | 亚洲日本精品 | 激情视频免费观看 | 丁香婷婷网 | av大片网址 | 黄色网免费 | 中文字幕a∨在线乱码免费看 | 成人免费视频网站在线观看 | 国产毛片aaa | 又黄又色又爽 | 亚洲涩涩网 | 国产午夜亚洲精品 | 久草免费手机视频 | 国产在线免费观看 | 色综合久久久久综合体 | 日产乱码一二三区别在线 | 亚洲精品视频网站在线观看 | 最新国产精品久久精品 | 久久亚洲热 | 夜夜夜草 | 久久久wwww| 国内少妇自拍视频一区 | 国产成人久久av977小说 | 狠狠狠干 | www.久久com | 欧美激情精品久久久久久 | 久久久国产视频 | 亚洲影视资源 | 欧美a性| 在线观看岛国av | 久久精品99国产精品亚洲最刺激 | 精品一区二区精品 | 96香蕉视频 | 色婷婷狠狠五月综合天色拍 | 91亚洲影院| 中文字幕在线观看一区 | 91精品国产综合久久久久久久 | 免费观看一级 | 美女视频免费一区二区 | 亚洲欧美va| 91麻豆高清视频 | 久久久久久久99精品免费观看 | 91视频啪 | 成人免费视频网站在线观看 | 欧美日韩国产亚洲乱码字幕 | 国产亚洲精品久久久久久无几年桃 | 免费在线观看一级片 | 成人久久久久 | 亚洲精品视频免费看 | 国产精品11| 国产一级黄色电影 | 99久久精品日本一区二区免费 | 亚洲成人精品av | 国产露脸91国语对白 | 色老板在线 | 中文字幕有码在线播放 | 久久久国产影院 | 九九精品在线观看 | 精品日韩在线 | 亚洲精品在线观看网站 | 成人av中文字幕 | 精品日韩在线 | 国产精品嫩草影院99网站 | 久久久久女人精品毛片 | 丁香婷婷在线观看 | 黄影院| 又黄又爽又刺激 | 精品国产伦一区二区三区免费 | av大全在线免费观看 | 日日夜夜精品免费 | 欧美亚洲成人免费 | 免费在线一区二区三区 | 又紧又大又爽精品一区二区 | 国产91免费在线 | 911av视频| 伊人五月天av | 色综合久久综合 | av在线免费播放 | 免费色网| 中文字幕在线影院 | 色综合天天狠狠 | 国产午夜三级一区二区三 | 国产99一区| 亚洲aⅴ在线观看 | 国产h在线播放 | 久久精品亚洲 | 91香蕉视频在线 | 亚洲国产精品成人精品 | 2019中文最近的2019中文在线 | 中文字幕在线一二 | 玖玖爱在线观看 | 亚洲黄色免费在线看 | 久久久网址 | 中文字幕av免费 | 免费在线观看日韩视频 | 欧美一区免费在线观看 | 色婷婷综合久久久中文字幕 | 香蕉视频在线播放 | 日韩精品免费一区二区三区 | 日本久久91 | 色综合色综合色综合 | 国产在线观看你懂得 | 伊人小视频 | 最近免费在线观看 | 青青看片 | 国产黑丝一区二区 | av超碰在线 | 国产精品9区 | 天无日天天操天天干 | 国产女教师精品久久av | 91综合久久一区二区 | 国产精品一区二区三区免费视频 | 麻豆一区二区三区视频 | 国产一区二区在线免费观看 | 欧美日韩裸体免费视频 | 免费网站在线观看人 | 国产系列在线观看 | 91日韩在线播放 | 91av中文字幕 | 17videosex性欧美| 在线播放av网址 | 国产热re99久久6国产精品 | 午夜视频在线观看一区二区三区 | 操操日 | 久艹在线免费观看 | 日韩在线播放视频 | aa级黄色大片 | 97超级碰 | 亚洲免费专区 | 中文区中文字幕免费看 | 国产精品人成电影在线观看 | 亚洲国产精品成人女人久久 | av在线成人 | 国产一区免费 | 久久久久久福利 | 丁香婷婷基地 | 欧美一级裸体视频 | 亚洲网站在线看 | 亚洲资源一区 | www五月天com | 米奇四色影视 | 国产日产欧美在线观看 | 成人久久毛片 | 福利一区在线视频 | 欧美日韩精品电影 | 在线观看蜜桃视频 | 91麻豆精品国产自产 | 日韩中文字幕在线观看 | 成人免费在线视频 | 日韩精品电影在线播放 | 天天综合网国产 | 欧美一级日韩三级 | 国产系列 在线观看 | 久久精品久久精品久久39 | 午夜体验区 | 免费在线观看一级片 | 99c视频高清免费观看 | 亚洲精品乱码白浆高清久久久久久 | 日韩激情网| 在线观看免费国产小视频 | 国内精品久久久久影院一蜜桃 | 蜜桃视频在线视频 | 一区二区视频电影在线观看 | 爱射综合 | 欧美经典久久 | 免费黄色网址大全 | 国产一区二区三区视频在线 | 国产丝袜一区二区三区 | 国产一级a毛片视频爆浆 | 日本黄色免费观看 | 97高清视频 | 黄色在线观看污 | av短片在线观看 | 国产亚洲精品久久久久秋 | 在线观看中文字幕一区二区 | 久久xxxx| 日韩国产在线观看 | 九九久久影视 | 91porny九色91啦中文 | 午夜影院日本 | 成人av片在线观看 | 涩涩网站免费 | 亚洲视频网站在线观看 | 欧美色图88 | 久久激情日本aⅴ | 国产精品久久久久久久久久久久久 | 日韩黄色免费电影 | 天天射夜夜爽 | 久久久久久久影视 | 丁香高清视频在线看看 | 特级毛片在线免费观看 | 国产在线最新 | 国产一区二区三区视频在线 | 97成人精品视频在线播放 | 好看的国产精品视频 | 久久99国产精品久久99 | 91麻豆看国产在线紧急地址 | 成人av在线一区二区 | 97超碰人人澡人人爱 | 狠狠的干狠狠的操 | av福利在线 | 国产一区在线视频观看 | 国产精品无av码在线观看 | 超碰com| 麻豆免费观看视频 | 91精品国产麻豆国产自产影视 | 国产在线欧美 | av无限看| 久久久久免费精品 | 国外成人在线视频网站 | 日本中文在线 | 96av在线视频 | 亚洲综合在线观看视频 | 91传媒激情理伦片 | 久久久精品成人 | 一区二区三区在线观看免费 | av高清在线 | 久久成人在线 | 在线综合色 | 日韩精品一区二区三区中文字幕 | 天天婷婷 | 免费日韩一区二区三区 | 成人亚洲综合 | 国产视频资源在线观看 | www视频在线播放 | 在线91播放 | zzijzzij亚洲日本少妇熟睡 | 菠萝菠萝蜜在线播放 | 成年人免费在线观看 | 一区二区精品视频 | 色老板在线视频 | 国产黄色精品视频 | 精品九九九| 成人一级影视 | 激情婷婷 | 夜夜操狠狠操 | 一区二区三区四区精品视频 | 国产精品网站一区二区三区 | www.色婷婷.com | 在线成人国产 | 98福利在线 | 久久久91精品国产一区二区精品 | av在线免费观看不卡 | 日韩欧美在线综合网 | 日本一区二区三区视频在线播放 | 久久精品一区二区三区中文字幕 | 国产成人高清在线 | 黄色一级在线观看 | 欧美日韩激情视频8区 | a视频在线观看 | 精品国内| 美女网站视频久久 | 国产精品一区二区免费在线观看 | 精品久久久精品 | 免费av免费观看 | 在线观看中文字幕一区二区 | 国产亚洲精品综合一区91 | 五月综合在线观看 | 亚洲国产精品视频 | 国产精品成久久久久 | 亚洲国产午夜视频 | 日韩在线观看视频在线 | 国产一级黄色免费看 | 一区二区 不卡 | 国产精品中文 | 97视频资源 | 久久伊人五月天 | 久久伦理影院 | 亚洲国内精品在线 | 久久99精品国产99久久6尤 | 婷婷四房综合激情五月 | 国产一区二区不卡视频 | 日韩电影精品一区 | 97视频免费观看2区 亚洲视屏 | 欧美另类xxxxx | 日韩乱理 | 国产一区二区久久久 | www色网站| 91日韩在线专区 | 狠狠色丁香婷婷综合久小说久 | 五月婷网 | 欧美一区二区三区免费观看 | 九九免费观看全部免费视频 | 国产精品久久久久久模特 | 色婷婷av国产精品 | 免费看搞黄视频网站 | 中文av影院 | 麻豆精品在线视频 | 91在线观看高清 | 激情伊人五月天 | 亚洲一区二区精品3399 | 日韩久久久久久久 | 久久精品欧美 | 成人久久18免费网站图片 | 999久久a精品合区久久久 | 婷婷爱五月天 | 国产精品免费久久久久久 | 亚洲色图色 | 麻豆手机在线 | 日本三级全黄少妇三2023 | 国产精品激情在线观看 | 日韩一区二区三免费高清在线观看 | 国产精品 日韩 欧美 | 四虎国产精品永久在线国在线 | 91视频在线播放视频 | 手机在线中文字幕 | 狠狠干我| 国产日韩中文字幕在线 | 日韩一区在线免费观看 | 欧美日韩精品免费观看 | 欧美精品少妇xxxxx喷水 | 婷婷在线精品视频 | 91视频网址入口 | 99视频在线观看免费 | 中文字幕黄色av | 午夜影院先 | 蜜臀av网址| 久久久2o19精品 | 国产精品久久久久久五月尺 | 国产在线一线 | 久产久精国产品 | 伊人婷婷色| 国产精品久久久久久999 | 在线观看免费黄视频 | 欧美a√在线 | 91精品啪啪 | 成人在线免费视频观看 | 久久精品伊人 | aaa日本高清在线播放免费观看 | 在线黄色免费av | 国内视频 | 色婷婷www | 精品美女在线观看 | 欧美日韩xxx| 亚洲国产一区二区精品专区 | 久久这里只有精品1 | 99久久婷婷国产综合精品 | 国产视频一二区 | 国产精品原创在线 | 久久国产免费视频 | 在线看毛片网站 | 欧美精品久久久久久久久老牛影院 | 亚洲视频axxx | 五月天久久狠狠 | 成人aaa毛片 | 久久精品视频18 | 玖玖视频免费在线 | 99久久国产免费免费 | 九草在线观看 | 视频三区在线 | 久久综合狠狠综合久久激情 | 亚洲精品ww | 日批网站免费观看 |