目錄
1 概念
2 代碼實作
2.1 導入庫
2.2 加載資料
2.3 歸一化
2.4 建立模型
2.5 編譯模型
2.6 訓練模型
2.7 評估模型
2.8 預測模型
3 使用獨熱編碼完成fashion_mnist訓練
3.1 導入庫
3.2 讀資料
3.3 轉換獨熱編碼
3.4 歸一化
3.5 構模組化型并編譯
3.6 訓練模型
3.7 評估模型
3.8 預測模型
1 概念
7.softmax多分類1 概念2 代碼實作3 使用獨熱編碼完成fashion_mnist訓練 上一章我們做的是softmax二分類,這次我們做softmax多分類
7.softmax多分類1 概念2 代碼實作3 使用獨熱編碼完成fashion_mnist訓練
7.softmax多分類1 概念2 代碼實作3 使用獨熱編碼完成fashion_mnist訓練
7.softmax多分類1 概念2 代碼實作3 使用獨熱編碼完成fashion_mnist訓練 上面這是兩個損失函數,當我們使用0,1,2,3這種數字做标簽時,我們使用sparse_categorical_crossentropy,如果label使用獨熱編碼我們使用categorical_crossentropy
下面這種編碼方式就是獨熱編碼
7.softmax多分類1 概念2 代碼實作3 使用獨熱編碼完成fashion_mnist訓練 我們下面代碼中用的是Fashion_MNIST,這個是包含衣服,鞋子,包這種圖像的資料集
7.softmax多分類1 概念2 代碼實作3 使用獨熱編碼完成fashion_mnist訓練 這個資料集包含了7w張圖檔,共有10個類别,大概是下面這個樣子的
7.softmax多分類1 概念2 代碼實作3 使用獨熱編碼完成fashion_mnist訓練
7.softmax多分類1 概念2 代碼實作3 使用獨熱編碼完成fashion_mnist訓練 2 代碼實作
2.1 導入庫
7.softmax多分類1 概念2 代碼實作3 使用獨熱編碼完成fashion_mnist訓練 2.2 加載資料
fashion_mnist是tensorflow中自帶的資料集,它分為四個部分,分别為train_image(訓練圖像),train_label(訓練标簽),test_image(測試圖像),test_label(測試标簽)
7.softmax多分類1 概念2 代碼實作3 使用獨熱編碼完成fashion_mnist訓練 第一次運作代碼時會自動下載下傳資料集,再一次使用則會直接使用
它自動下載下傳會下載下傳到這裡,我目前的路徑是這個,根據使用者名不同會有所改變
C:\Users\MSI.keras\datasets
7.softmax多分類1 概念2 代碼實作3 使用獨熱編碼完成fashion_mnist訓練 裡面有四個壓縮包,前兩個是測試的圖檔與标簽,後兩個是訓練的圖檔與标簽
7.softmax多分類1 概念2 代碼實作3 使用獨熱編碼完成fashion_mnist訓練 我們看一下train_image,train_label,test_image,test_label的shape
7.softmax多分類1 概念2 代碼實作3 使用獨熱編碼完成fashion_mnist訓練
7.softmax多分類1 概念2 代碼實作3 使用獨熱編碼完成fashion_mnist訓練 我們現在看一下train_image的第0張圖檔
7.softmax多分類1 概念2 代碼實作3 使用獨熱編碼完成fashion_mnist訓練
7.softmax多分類1 概念2 代碼實作3 使用獨熱編碼完成fashion_mnist訓練 我們在看一下第0張圖檔的數值情況
7.softmax多分類1 概念2 代碼實作3 使用獨熱編碼完成fashion_mnist訓練
7.softmax多分類1 概念2 代碼實作3 使用獨熱編碼完成fashion_mnist訓練 這個我就截取其中的一部分,發現它的取值範圍為[0,255]
我們再看一下第0張圖像對應的标簽
7.softmax多分類1 概念2 代碼實作3 使用獨熱編碼完成fashion_mnist訓練
7.softmax多分類1 概念2 代碼實作3 使用獨熱編碼完成fashion_mnist訓練 發現顯示出一個9,fashion_mnist中使用整形資料表示标簽,我們這裡的9代表鞋子,我們的label的取值範圍為[0,9]一共十分類
2.3 歸一化
我們講train_image與test_image除255,這樣我們的取值範圍就為[0,1]
7.softmax多分類1 概念2 代碼實作3 使用獨熱編碼完成fashion_mnist訓練 2.4 建立模型
我們依然使用順序模型
7.softmax多分類1 概念2 代碼實作3 使用獨熱編碼完成fashion_mnist訓練 我們之前使用的層隻有dense層,那個是處理一維資料的,現在我們的輸入是(28,28),這個是個二維資料,是以我們第一層要使用Flatten(扁平層),這一層的目的是将其變成28*28的向量,這樣我們這一層的結果就變為了1維資料,後面就能使用dense了
7.softmax多分類1 概念2 代碼實作3 使用獨熱編碼完成fashion_mnist訓練 128是我們自定的神經元個數,這個沒有一個最佳值,太小會欠拟合,太大會過拟合
7.softmax多分類1 概念2 代碼實作3 使用獨熱編碼完成fashion_mnist訓練 這一層是輸出層,由于我們是10分類是以我們在這裡寫10,如果是6分類就寫6,後面的激活函數是softmax,隻要是分類問題(不管是10分類還是6分類)就一定要用softmax,上一章我們提到了二分類,二分類用sigmod(當然2分類用softmax也不會報錯,就是效果不好)
7.softmax多分類1 概念2 代碼實作3 使用獨熱編碼完成fashion_mnist訓練 我們看一下整體的模型
7.softmax多分類1 概念2 代碼實作3 使用獨熱編碼完成fashion_mnist訓練
7.softmax多分類1 概念2 代碼實作3 使用獨熱編碼完成fashion_mnist訓練 我們可以看到Flatten這層是沒有參數的,在這裡隻對資料進行轉換 784 = 28 * 28 ,下一層dense層 100480 = 784 * 128 + 128
2.5 編譯模型
優化器使用adam,loss值使用sparse_categorical_crossentropy(标簽是數字),我們在訓練過程中檢測其正确率
7.softmax多分類1 概念2 代碼實作3 使用獨熱編碼完成fashion_mnist訓練 2.6 訓練模型
7.softmax多分類1 概念2 代碼實作3 使用獨熱編碼完成fashion_mnist訓練
7.softmax多分類1 概念2 代碼實作3 使用獨熱編碼完成fashion_mnist訓練 2.7 評估模型
我們使用測試集對訓練好的模型進行評估
7.softmax多分類1 概念2 代碼實作3 使用獨熱編碼完成fashion_mnist訓練
7.softmax多分類1 概念2 代碼實作3 使用獨熱編碼完成fashion_mnist訓練 2.8 預測模型
我們最後進行預測一下,然後與原本的标簽進行比對
7.softmax多分類1 概念2 代碼實作3 使用獨熱編碼完成fashion_mnist訓練 這個是未經過處理的預測結果,結果中會包含10個值,這個值可以了解為每個分類的可能性,一般來講,我們會選取10個值中的最大值然後擷取其索引進而得到最終的結果
7.softmax多分類1 概念2 代碼實作3 使用獨熱編碼完成fashion_mnist訓練 可以使用np.argmax()取出最大值的索引,我在這裡就人工取最大值了[9,2,1,1,6,1,4,6,5]
我們可以用上面的結果和下面的實際值進行比對,發現正确率還是可以的(前9個都是正确的)
7.softmax多分類1 概念2 代碼實作3 使用獨熱編碼完成fashion_mnist訓練
7.softmax多分類1 概念2 代碼實作3 使用獨熱編碼完成fashion_mnist訓練 3 使用獨熱編碼完成fashion_mnist訓練
上面我們使用的是數字編碼作為label,使用的loss為sparse_categorical_crossentropy,現在我們使用獨熱編碼作為label,使用loss為categorical_crossentropy再做一遍
3.1 導入庫
7.softmax多分類1 概念2 代碼實作3 使用獨熱編碼完成fashion_mnist訓練 3.2 讀資料
7.softmax多分類1 概念2 代碼實作3 使用獨熱編碼完成fashion_mnist訓練 3.3 轉換獨熱編碼
我們使用utils.to_categorical()将數字編碼轉換為獨熱編碼
7.softmax多分類1 概念2 代碼實作3 使用獨熱編碼完成fashion_mnist訓練 我們顯示出來看一下
7.softmax多分類1 概念2 代碼實作3 使用獨熱編碼完成fashion_mnist訓練
7.softmax多分類1 概念2 代碼實作3 使用獨熱編碼完成fashion_mnist訓練 測試資料也應改為獨熱編碼,後面進行評估時要用到
7.softmax多分類1 概念2 代碼實作3 使用獨熱編碼完成fashion_mnist訓練 我們看剛剛那個鞋的标簽
7.softmax多分類1 概念2 代碼實作3 使用獨熱編碼完成fashion_mnist訓練 我們發現在第9位(從0數)的值置為1,我們沒轉變獨熱編碼之前的label是9
7.softmax多分類1 概念2 代碼實作3 使用獨熱編碼完成fashion_mnist訓練 3.4 歸一化
7.softmax多分類1 概念2 代碼實作3 使用獨熱編碼完成fashion_mnist訓練 3.5 構模組化型并編譯
與上面相同,隻是更換了loss
7.softmax多分類1 概念2 代碼實作3 使用獨熱編碼完成fashion_mnist訓練 - 我剛剛發現pycharm中model.summary()不用print就可以顯示,我們以後就不加print了
7.softmax多分類1 概念2 代碼實作3 使用獨熱編碼完成fashion_mnist訓練 3.6 訓練模型
這裡我們要換掉label
7.softmax多分類1 概念2 代碼實作3 使用獨熱編碼完成fashion_mnist訓練
7.softmax多分類1 概念2 代碼實作3 使用獨熱編碼完成fashion_mnist訓練 3.7 評估模型
7.softmax多分類1 概念2 代碼實作3 使用獨熱編碼完成fashion_mnist訓練
7.softmax多分類1 概念2 代碼實作3 使用獨熱編碼完成fashion_mnist訓練 3.8 預測模型
7.softmax多分類1 概念2 代碼實作3 使用獨熱編碼完成fashion_mnist訓練
7.softmax多分類1 概念2 代碼實作3 使用獨熱編碼完成fashion_mnist訓練 我們在這使用np.argmax直接取出最大值索引
7.softmax多分類1 概念2 代碼實作3 使用獨熱編碼完成fashion_mnist訓練
7.softmax多分類1 概念2 代碼實作3 使用獨熱編碼完成fashion_mnist訓練 之後再對比一下,發現預測結果與實際結果相似
7.softmax多分類1 概念2 代碼實作3 使用獨熱編碼完成fashion_mnist訓練
7.softmax多分類1 概念2 代碼實作3 使用獨熱編碼完成fashion_mnist訓練