天天看點

7.softmax多分類1  概念2  代碼實作3  使用獨熱編碼完成fashion_mnist訓練

目錄

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多分類

  • 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訓練

繼續閱讀