三千字輕鬆入門TensorFlow 2

{"type":"doc","content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"italic"}],"text":"​通過使用深度學習實現分類問題的動手演練,如何繪製問題以及如何改善其結果,來了解TensorFlow的最新版本。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"但是等等...什麼是Tensorflow?"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"Tensorflow是Google的深度學習框架,於2019年發佈了第二個版本。它是世界上最著名的深度學習框架之一,被行業專家和研究人員廣泛使用。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https://static001.geekbang.org/infoq/c0/c04aa9f12a3463cac53c22a62dbfb051.png","alt":null,"title":null,"style":null,"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"Tensorflow v1難以使用和理解,因爲它不像Pythonic,但隨着Keras發佈的v2現在與Tensorflow.keras完全同步,它易於使用,易學且易於理解。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"請記住,這不是有關深度學習的文章,所以我希望您瞭解深度學習的術語及其背後的基本思想。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"我們將使用非常著名的數據集IRIS數據集探索深度學習的世界。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"讓我們直接進入代碼以瞭解發生了什麼。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"heading","attrs":{"align":null,"level":3},"content":[{"type":"text","text":"導入和理解數據集"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https://static001.geekbang.org/infoq/04/040199f3f1858c2d7d8ab804df7fa99d.png","alt":null,"title":null,"style":null,"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"現在,這個"},{"type":"text","marks":[{"type":"italic"}],"text":"iris"},{"type":"text","text":"是一本字典。我們可以使用keys()"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https://static001.geekbang.org/infoq/db/db8c231b8b156f981a3a1126c5b6ec8b.png","alt":null,"title":null,"style":null,"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"因此,我們的數據在 "},{"type":"text","marks":[{"type":"italic"}],"text":"數據 "},{"type":"text","text":"鍵中, "},{"type":"text","marks":[{"type":"italic"}],"text":"標籤"},{"type":"text","text":"在 "},{"type":"text","marks":[{"type":"italic"}],"text":"標籤"},{"type":"text","text":"鍵中,依此類推。如果要查看此數據集的詳細信息,可以使用 "},{"type":"text","marks":[{"type":"italic"}],"text":"iris ['DESCR']"},{"type":"text","text":"。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"現在,我們必須導入其他重要的庫,這將有助於我們創建神經網絡。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https://static001.geekbang.org/infoq/54/54478a837794cd6eff60c90f97e620d0.png","alt":null,"title":null,"style":null,"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"在這裏,我們從"},{"type":"text","marks":[{"type":"italic"}],"text":"tensorflow中"},{"type":"text","text":"導入了2個主要內容 ,即 "},{"type":"text","marks":[{"type":"italic"}],"text":"Dense "},{"type":"text","text":"和 "},{"type":"text","marks":[{"type":"italic"}],"text":"Sequential"},{"type":"text","text":"。我們從"},{"type":"text","marks":[{"type":"italic"}],"text":"tensorflow.keras.layers"},{"type":"text","text":"導入的  密集層是緊密連接的一種層。密集連接的層意味着先前層的所有節點都連接到當前層的所有節點。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"italic"}],"text":"Sequential "},{"type":"text","text":"是Keras的API,通常稱爲Sequential API,我們將使用它來構建神經網絡。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"爲了更好地理解數據,我們可以將其轉換爲數據幀。我們開始做吧。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https://static001.geekbang.org/infoq/c1/c1a7a5e21ef833e8cb1c3f636e771582.png","alt":null,"title":null,"style":null,"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https://static001.geekbang.org/infoq/f1/f101db5de159d74619ac83d6a224436e.png","alt":null,"title":null,"style":null,"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"請注意,這裏我們設置了 "},{"type":"text","marks":[{"type":"italic"}],"text":"column = iris.feature_names"},{"type":"text","text":"  ,其中 "},{"type":"text","marks":[{"type":"italic"}],"text":"feature_names"},{"type":"text","text":" 是具有所有4個特徵名稱的鍵。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"對於標籤,"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https://static001.geekbang.org/infoq/37/37be26b211b2fc6b939fc7fb6ba649ad.png","alt":null,"title":null,"style":null,"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https://static001.geekbang.org/infoq/e2/e2f96e2c7eb0efa31ae2c1afaae0450c.png","alt":null,"title":null,"style":null,"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https://static001.geekbang.org/infoq/4c/4c4f30d6c4ab783b77aa6a39cca46df1.png","alt":null,"title":null,"style":null,"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https://static001.geekbang.org/infoq/31/31742373c1bcd792cfdd90157020d5a4.png","alt":null,"title":null,"style":null,"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"在這裏,我們可以看到我們有3個類,每個類的標籤分別爲0、1和2。要查看標籤名稱,我們可以使用"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https://static001.geekbang.org/infoq/e1/e142b502c18b44624a9956699a4f179a.png","alt":null,"title":null,"style":null,"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https://static001.geekbang.org/infoq/26/26e44c94ed39390e6447e58890f66711.png","alt":null,"title":null,"style":null,"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"這些是我們必須預測的類的名稱。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":" "}]},{"type":"heading","attrs":{"align":null,"level":3},"content":[{"type":"text","text":"機器學習的數據預處理"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"現在,機器學習的第一步是數據預處理。數據預處理的主要步驟是"}]},{"type":"bulletedlist","content":[{"type":"listitem","content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"填充缺失值"}]}]},{"type":"listitem","content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"將數據分爲訓練和驗證集"}]}]},{"type":"listitem","content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"數據標準化"}]}]},{"type":"listitem","content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"將分類數據轉換爲一鍵向量"}]}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":" "}]},{"type":"heading","attrs":{"align":null,"level":3},"content":[{"type":"text","text":"缺失值"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"要檢查是否缺少任何值,可以使用 "},{"type":"text","marks":[{"type":"italic"}],"text":"pandas.DataFrame.info()"},{"type":"text","text":" 方法進行檢查。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https://static001.geekbang.org/infoq/c2/c22d8d1d7af5fe3bbaa19358add75c2c.png","alt":null,"title":null,"style":null,"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https://static001.geekbang.org/infoq/d2/d2d7b59588d670b8c5c71cedaeb53cbd.png","alt":null,"title":null,"style":null,"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"這裏我們可以看到我們沒有丟失值(幸運的是),所有特徵都在 "},{"type":"text","marks":[{"type":"italic"}],"text":"float64中"},{"type":"text","text":"。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":" "}]},{"type":"heading","attrs":{"align":null,"level":3},"content":[{"type":"text","text":"分爲訓練集和測試集"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"要將數據分爲訓練集和測試集,我們可以使用  先前導入的"},{"type":"text","marks":[{"type":"italic"}],"text":"sklearn.model_selection中"},{"type":"text","text":" 的 "},{"type":"text","marks":[{"type":"italic"}],"text":"train_test_split"},{"type":"text","text":"。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https://static001.geekbang.org/infoq/bc/bccf63cb4ebffa7792b6c8d2bec2b1b5.png","alt":null,"title":null,"style":null,"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"其中"},{"type":"text","marks":[{"type":"italic"}],"text":"test_size"},{"type":"text","text":" 是告訴我們我們希望測試數據佔整個數據的10%的參數。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":" "}]},{"type":"heading","attrs":{"align":null,"level":3},"content":[{"type":"text","text":"數據標準化"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"通常,當數據中存在大量方差時,我們將其標準化。要檢查方差,我們可以使用 "},{"type":"text","marks":[{"type":"italic"}],"text":"panadas.DataFrame中的var()"},{"type":"text","text":" 函數  檢查所有列的var。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https://static001.geekbang.org/infoq/f0/f03c7cd5dd71a97677b508761c2b2bae.png","alt":null,"title":null,"style":null,"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https://static001.geekbang.org/infoq/83/838e137bdcf2c0331f82c09b38d8138b.png","alt":null,"title":null,"style":null,"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"在這裏,我們可以看到 "},{"type":"text","marks":[{"type":"italic"}],"text":"X_train"},{"type":"text","text":" 和 "},{"type":"text","marks":[{"type":"italic"}],"text":"X_test的 "},{"type":"text","text":"方差都非常低,因此無需對數據進行標準化。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":" "}]},{"type":"heading","attrs":{"align":null,"level":3},"content":[{"type":"text","text":"分類數據轉換爲OneHot向量"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"我們知道我們的輸出數據是已經使用"},{"type":"text","marks":[{"type":"italic"}],"text":"iris.target_names"},{"type":"text","text":"檢查的3個類 "},{"type":"text","marks":[{"type":"italic"}],"text":"之一"},{"type":"text","text":",好處是當我們加載目標時,它們已經是0、1、2格式,其中0 = "},{"type":"text","marks":[{"type":"italic"}],"text":"1stclass"},{"type":"text","text":",1 = 2nd class , 等等。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"這種表示形式的問題在於我們的模型可能會給較高的數字更高的優先級,這可能導致結果出現偏差。因此,爲了解決這個問題,我們將使用一站式表示法。您可以"},{"type":"link","attrs":{"href":"https://towardsdatascience.com/tagged/one-hot-encoder","title":null},"content":[{"type":"text","text":"在此處"}]},{"type":"text","text":"瞭解更多關於一鍵矢量的 "},{"type":"link","attrs":{"href":"https://towardsdatascience.com/tagged/one-hot-encoder","title":null},"content":[{"type":"text","text":"信息"}]},{"type":"text","text":"。我們可以使用"},{"type":"text","marks":[{"type":"italic"}],"text":"Keras"},{"type":"text","text":"內置的 "},{"type":"text","marks":[{"type":"italic"}],"text":"to_categorical"},{"type":"text","text":" 或使用 "},{"type":"text","marks":[{"type":"italic"}],"text":"sklearn中 "},{"type":"text","text":"的 "},{"type":"text","marks":[{"type":"italic"}],"text":"OneHotEncoder"},{"type":"text","text":"。我們將使用 "},{"type":"text","marks":[{"type":"italic"}],"text":"to_categorical"},{"type":"text","text":"。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https://static001.geekbang.org/infoq/fb/fb13eb9a52eb31ed9c024bde500b2fa0.png","alt":null,"title":null,"style":null,"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"我們將僅檢查前5行,以檢查其是否正確轉換。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https://static001.geekbang.org/infoq/c8/c845731cb4d80a3f6af4f6ce99750d99.png","alt":null,"title":null,"style":null,"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https://static001.geekbang.org/infoq/6c/6c7e4fb9c0ab6190ad3c42fbfd908cb8.png","alt":null,"title":null,"style":null,"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"是的,我們已經將其轉換爲OheHot表示形式。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":" "}]},{"type":"heading","attrs":{"align":null,"level":3},"content":[{"type":"text","text":"最後一件事"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"我們可以做的最後一件事是將數據轉換回 "},{"type":"text","marks":[{"type":"italic"}],"text":"numpy"},{"type":"text","text":"數組,以便我們可以使用一些額外的特徵功能,這些特徵將在稍後的模型中爲我們提供幫助。爲此,我們可以使用"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https://static001.geekbang.org/infoq/cb/cbd6f904e83ed9194343e456c9742561.png","alt":null,"title":null,"style":null,"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"讓我們看看第一個訓練示例的結果。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https://static001.geekbang.org/infoq/64/6443c5557dfb8bf11bfe51b98ef1d3b8.png","alt":null,"title":null,"style":null,"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https://static001.geekbang.org/infoq/9f/9f7bc0bb81dc665903d24754a76588fa.png","alt":null,"title":null,"style":null,"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"在第一個訓練示例中,我們可以看到4個要素的值,其形狀爲(4,)"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"當我們對它們使用"},{"type":"text","marks":[{"type":"italic"}],"text":"to_categorical時 "},{"type":"text","text":",它們的目標標籤已經是數組格式 。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":" "}]},{"type":"heading","attrs":{"align":null,"level":3},"content":[{"type":"text","text":"深度學習模型"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"現在終於可以開始創建模型並對其進行訓練了。我們將從簡單的模型開始,然後進入複雜的模型結構,其中將介紹Keras中的不同技巧和技術。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"讓我們編寫基本模型"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https://static001.geekbang.org/infoq/b8/b806faf78f17965bcabfee758011c7f8.png","alt":null,"title":null,"style":null,"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"首先,我們必須創建一個順序對象。現在,要創建模型,我們要做的就是根據我們的選擇添加不同類型的圖層。我們將製作一個10個密集層模型,以便我們可以觀察過度擬合,並在以後通過不同的正則化技術將其減少。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https://static001.geekbang.org/infoq/ab/ab7558c4aa0c4b5abd5f1a2971a33b1d.png","alt":null,"title":null,"style":null,"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"注意,在第一層中,我們使用了一個額外的"},{"type":"text","marks":[{"type":"italic"}],"text":"input_shape"},{"type":"text","text":"參數"},{"type":"text","marks":[{"type":"italic"}],"text":"。"},{"type":"text","text":"此參數指定第一層的尺寸。在這種情況下,我們不關心訓練示例的數量。相反,我們只關心功能的數量。因此,我們傳遞了任何訓練示例的形狀,在我們的例子中,它是 "},{"type":"text","marks":[{"type":"italic"}],"text":"(4,)"},{"type":"text","text":" 在"},{"type":"text","marks":[{"type":"italic"}],"text":"input_shape"},{"type":"text","text":"內部 。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"注意,我們在輸出層中使用了 "},{"type":"text","marks":[{"type":"italic"}],"text":"softmax "},{"type":"text","text":"激活函數,因爲它是一個多類分類問題。如果是二進制分類問題,我們將使用 "},{"type":"text","marks":[{"type":"italic"}],"text":"Sigmoid "},{"type":"text","text":"激活函數。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"我們可以傳入我們想要的任何激活函數,例如 "},{"type":"text","marks":[{"type":"italic"}],"text":"S型 "},{"type":"text","text":", "},{"type":"text","marks":[{"type":"italic"}],"text":"線性 "},{"type":"text","text":"或 "},{"type":"text","marks":[{"type":"italic"}],"text":"tanh"},{"type":"text","text":",但是通過實驗證明 "},{"type":"text","marks":[{"type":"italic"}],"text":"relu "},{"type":"text","text":"在這類模型中表現最佳。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"現在,當我們定義了模型的形狀時,下一步就是指定它的 "},{"type":"text","marks":[{"type":"italic"}],"text":"損失"},{"type":"text","text":", "},{"type":"text","marks":[{"type":"italic"}],"text":"優化器"},{"type":"text","text":"和 "},{"type":"text","marks":[{"type":"italic"}],"text":"指標"},{"type":"text","text":"。我們在Keras中使用"},{"type":"text","marks":[{"type":"italic"}],"text":"compile "},{"type":"text","text":"方法指定這些 。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https://static001.geekbang.org/infoq/2f/2f3c82d72f481e4482fb1fddcba91ea0.png","alt":null,"title":null,"style":null,"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"在這裏,我們可以使用任何 "},{"type":"text","marks":[{"type":"italic"}],"text":"優化程序, "},{"type":"text","text":"例如隨機梯度下降,RMSProp等,但是我們將使用Adam。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"我們在 這裏使用"},{"type":"text","marks":[{"type":"italic"}],"text":" categorical_crossentropy"},{"type":"text","text":"是因爲我們有一個多類分類問題,如果我們有一個二元類分類問題,我們會改用 "},{"type":"text","marks":[{"type":"italic"}],"text":"binary_crossentropy"},{"type":"text","text":"  。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"指標對於評估一個人的模型很重要。我們可以基於不同的指標來評估模型。對於分類問題,最重要的指標是準確性,它表明我們的預測有多準確。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"我們模型的最後一步是將其擬合訓練數據和訓練標籤。讓我們編寫代碼。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https://static001.geekbang.org/infoq/9e/9ee23d134c09c7fba2233682661bbcc8.png","alt":null,"title":null,"style":null,"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"italic"}],"text":"fit "},{"type":"text","text":"返回一個回調,該回調具有我們訓練的所有歷史記錄,我們可以用來執行不同的有用任務,例如繪圖等。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"History回調具有一個名爲"},{"type":"text","marks":[{"type":"italic"}],"text":"history "},{"type":"text","text":"的屬性 ,我們可以將其作爲"},{"type":"text","marks":[{"type":"italic"}],"text":"history.histor"},{"type":"text","text":" y進行訪問 ,它是具有所有損失和指標歷史記錄的字典,即,在我們的示例中,它具有"},{"type":"text","marks":[{"type":"italic"}],"text":"loss"},{"type":"text","text":",  "},{"type":"text","marks":[{"type":"italic"}],"text":"acc"},{"type":"text","text":",  "},{"type":"text","marks":[{"type":"italic"}],"text":"val_loss"},{"type":"text","text":"和 "},{"type":"text","marks":[{"type":"italic"}],"text":"val_acc "},{"type":"text","text":"的歷史記錄 並且我們可以訪問"},{"type":"text","marks":[{"type":"italic"}],"text":"history.history.loss"},{"type":"text","text":" 或 "},{"type":"text","marks":[{"type":"italic"}],"text":"history.history ['val_acc']"},{"type":"text","text":" 等中的每一個 。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"我們指定的epoch數爲800,批量大小爲40,驗證分爲0.1,這意味着我們現在有10%的驗證數據可用於分析訓練。使用800個epoch將過度擬合數據,這意味着它將在訓練數據上表現出色,但在測試數據上表現不佳。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"在訓練模型的同時,我們可以在訓練和驗證集上看到我們的損失和準確性。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https://static001.geekbang.org/infoq/06/060ca80d5c02a4f9618d38863dc1ee34.png","alt":null,"title":null,"style":null,"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"在這裏,我們可以看到我們的訓練精度爲100%,驗證精度爲67%,對於這樣的模型而言,這是相當不錯的。讓我們來繪製它。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https://static001.geekbang.org/infoq/d3/d3f8d31318d4f2e8766bffb6cc3616ed.png","alt":null,"title":null,"style":null,"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https://static001.geekbang.org/infoq/85/85f871967cc2c2ba4b0009d302c0695d.png","alt":null,"title":null,"style":null,"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"我們可以清楚地看到,訓練集的準確性比驗證集的準確性高得多。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"同樣,我們可以將損失繪製爲"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https://static001.geekbang.org/infoq/71/7199dd61ffcb2f629e6fc603bee0acae.png","alt":null,"title":null,"style":null,"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https://static001.geekbang.org/infoq/e4/e46c54e215cbf51d35d7630caad5d735.png","alt":null,"title":null,"style":null,"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"在這裏,我們可以清楚地看到我們的驗證損失比我們的訓練損失高得多,這是因爲我們過度擬合了數據。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"要檢查模型性能,可以使用 "},{"type":"text","marks":[{"type":"italic"}],"text":"model.evaluate"},{"type":"text","text":" 檢查模型性能。我們需要在評估方法中傳遞數據和標籤。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https://static001.geekbang.org/infoq/91/91f6f33943a391ca88ef6c0a440ceabb.png","alt":null,"title":null,"style":null,"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https://static001.geekbang.org/infoq/6b/6b794c6a435a4c96f1f29396bffefa35.png","alt":null,"title":null,"style":null,"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"在這裏,我們可以看到我們的模型給出了88%的準確度,這對於過度擬合的模型來說相當不錯。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"heading","attrs":{"align":null,"level":3},"content":[{"type":"text","text":"正則化"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"讓我們通過在模型中添加正則化使其更好。正則化將減少我們模型的過度擬合併改善我們的模型。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"我們將在模型中添加L2正則化。"},{"type":"link","attrs":{"href":"https://towardsdatascience.com/concept-of-regularization-28f593cf9f8c#:~:text=The%20idea%20behind%20L1%20regularization,absolute%20value%20of%20the%20coefficients.","title":null},"content":[{"type":"text","text":"在此處"}]},{"type":"text","text":"瞭解有關L2正則化的更多信息 。要在我們的模型中添加L2正則化,我們必須指定要在其中添加正則化的層,並提供另一個參數 "},{"type":"text","marks":[{"type":"italic"}],"text":"kernel_regularizer"},{"type":"text","text":",並傳遞 "},{"type":"text","marks":[{"type":"italic"}],"text":"tf.keras.regularizers.l2()"},{"type":"text","text":"。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"我們還將在模型中實現一些改進,這將有助於我們更好地減少過度擬合,從而獲得更好的性能模型。要了解更多有關理論和動機背後輟學,請參閱 "},{"type":"link","attrs":{"href":"https://medium.com/towards-artificial-intelligence/an-introduction-to-dropout-for-regularizing-deep-neural-networks-4e0826c10395","title":null},"content":[{"type":"text","text":"此"}]},{"type":"text","text":" 文章。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"讓我們重新制作模型。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https://static001.geekbang.org/infoq/10/104b80bb91a3a1a98fc072a7f7647384.png","alt":null,"title":null,"style":null,"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"如果您密切注意,我們的所有層和參數都相同,除了我們在每個密集層中添加了2個Dropout和正則化。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"我們將使所有其他內容(loss,優化器,epoch等)保持不變。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https://static001.geekbang.org/infoq/4e/4eb2eca33824d9cd3a401615510e9162.png","alt":null,"title":null,"style":null,"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"現在讓我們評估模型。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https://static001.geekbang.org/infoq/53/539e19911bfe897c52b1260fe31299c1.png","alt":null,"title":null,"style":null,"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https://static001.geekbang.org/infoq/db/dba4605443a83a787a9b2cf8729bae2c.png","alt":null,"title":null,"style":null,"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"你猜怎麼着?通過添加正則化和Dropout,我們將準確性從88%提高到94%。如果我們向其添加批處理規範化,它將進一步改善。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"讓我們來繪製它。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https://static001.geekbang.org/infoq/af/afe2274f507b854ec954bce5b24b52b1.png","alt":null,"title":null,"style":null,"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https://static001.geekbang.org/infoq/50/50dd440bb313f8102dd64ddb04ed188c.png","alt":null,"title":null,"style":null,"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https://static001.geekbang.org/infoq/81/81b19aa0358aebaf873c9e42b833a735.png","alt":null,"title":null,"style":null,"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"heading","attrs":{"align":null,"level":3},"content":[{"type":"text","text":"見解"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"在這裏,我們可以看到我們已經成功地從過度模型中去除了過度擬合,並將模型提高了近6%,對於如此小的數據集而言,這是一個很好的改進。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"heading","attrs":{"align":null,"level":4},"content":[{"type":"text","text":"如果你喜歡本文的話,歡迎點贊轉發!謝謝。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"看完別走還有驚喜!"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"我精心整理了計算機/Python/機器學習/深度學習相關的2TB視頻課與書籍,價值1W元。關注微信公衆號“計算機與AI”,點擊下方菜單即可獲取網盤鏈接。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":""}]},{"type":"image","attrs":{"src":"https://static001.geekbang.org/infoq/90/903237ffd0a3b3ae06272386f26ecb9e.png","alt":null,"title":null,"style":null,"href":null,"fromPaste":true,"pastePass":false}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}}]}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章