欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Tensorflow2.1 MNIST圖像分類實現(xiàn)思路分析

 更新時間:2022年11月18日 17:15:54   作者:我是王大你是誰  
這篇文章主要為大家介紹了Tensorflow2.1 MNIST圖像分類實現(xiàn)思路分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

前言

之前工作中主要使用的是 Tensorflow 1.15 版本,但是漸漸跟不上工作中的項目需求了,而且因為 2.x 版本和 1.x 版本差異較大,所以要專門花時間學(xué)習(xí)一下 2.x 版本,本文作為學(xué)習(xí) Tensorflow 2.x 版本的開篇,主要介紹了使用 cpu 版本的 Tensorflow 2.1 搭建深度學(xué)習(xí)模型,完成對于 MNIST 數(shù)據(jù)的圖片分類的任務(wù)。

主要思路和實現(xiàn)

(1) 加載數(shù)據(jù),處理數(shù)據(jù)

這里是要導(dǎo)入 tensorflow 的包,前提是你要提前安裝 tensorflow ,我這里為了方便直接使用的是 cpu 版本的 tensorflow==2.1.0 ,如果是為了學(xué)習(xí)的話,cpu 版本的也夠用了,畢竟數(shù)據(jù)量和模型都不大。

import tensorflow as tf

這里是為了加載 mnist 數(shù)據(jù)集,mnist 數(shù)據(jù)集里面就是 0-9 這 10 個數(shù)字的圖片集,我們要使用深度學(xué)習(xí)實現(xiàn)一個模型完成對 mnist 數(shù)據(jù)集進(jìn)行分類的任務(wù),這個項目相當(dāng)于 java 中 hello world 。

mnist = tf.keras.datasets.mnist

這里的 (x_train, y_train) 表示的是訓(xùn)練集的圖片和標(biāo)簽,(x_test, y_test) 表示的是測試集的圖片和標(biāo)簽。

(x_train, y_train), (x_test, y_test) = mnist.load_data()

每張圖片是 28*28 個像素點(數(shù)字)組成的,而每個像素點(數(shù)字)都是 0-255 中的某個數(shù)字,我們對其都除 255 ,這樣就是相當(dāng)于對這些圖片的像素點值做歸一化,這樣有利于模型加速收斂,在本項目中執(zhí)行本操作比不執(zhí)行本操作最后的準(zhǔn)確率高很多,在文末會展示注釋本行情況下,模型評估的指標(biāo)結(jié)果,大家可以自行對比差異。

x_train, x_test = x_train / 255.0, x_test / 255.0

(2) 使用 keras 搭建深度學(xué)習(xí)模型

這里主要是要構(gòu)建機(jī)器學(xué)習(xí)模型,模型分為以下幾層:

  • 第一層要接收圖片的輸入,每張圖片是 28*28 個像素點組成的,所以 input_shape=(28, 28)
  • 第二層是一個輸出 128 維度的全連接操作
  • 第三層是要對第二層的輸出隨機(jī)丟棄 20% 的 Dropout 操作,這樣有利于模型的泛化

第四層是一個輸出 10 維度的全連接操作,也就是預(yù)測該圖片分別屬于這十種類型的概率

 model = tf.keras.models.Sequential([
   tf.keras.layers.Flatten(input_shape=(28, 28)),
   tf.keras.layers.Dense(128, activation='relu'),
   tf.keras.layers.Dropout(0.2),
   tf.keras.layers.Dense(10)
 ])

(3) 定義損失函數(shù)

這里主要是定義損失函數(shù),這里的損失函數(shù)使用到了 SparseCategoricalCrossentropy ,主要是為了計算標(biāo)簽和預(yù)測結(jié)果之間的交叉熵?fù)p失。

loss_fn = tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True)

(4) 配置編譯模型

這里主要是配置和編譯模型,優(yōu)化器使用了 adam ,要優(yōu)化的評價指標(biāo)選用了準(zhǔn)確率 accuracy ,當(dāng)然了還可以選擇其他的優(yōu)化器和評價指標(biāo)。

model.compile(optimizer='adam', loss=loss_fn, metrics=['accuracy'])

(5) 使用訓(xùn)練數(shù)據(jù)訓(xùn)練模型

這里主要使用訓(xùn)練數(shù)據(jù)的圖片和標(biāo)簽來訓(xùn)練模型,將整個訓(xùn)練樣本集訓(xùn)練 5 次。

model.fit(x_train, y_train, epochs=5) 

訓(xùn)練過程結(jié)果輸出如下:

Train on 60000 samples
Epoch 1/5
60000/60000 [==============================] - 3s 43us/sample - loss: 0.2949 - accuracy: 0.9144
Epoch 2/5
60000/60000 [==============================] - 2s 40us/sample - loss: 0.1434 - accuracy: 0.9574
Epoch 3/5
60000/60000 [==============================] - 2s 36us/sample - loss: 0.1060 - accuracy: 0.9676
Epoch 4/5
60000/60000 [==============================] - 2s 31us/sample - loss: 0.0891 - accuracy: 0.9721
Epoch 5/5
60000/60000 [==============================] - 2s 29us/sample - loss: 0.0740 - accuracy: 0.9771
10000/10000 - 0s - loss: 0.0744 - accuracy: 0.9777

(6) 使用測試數(shù)據(jù)評估模型

這里主要是使用測試數(shù)據(jù)中的圖片和標(biāo)簽來評估模型,verbose 可以選為 0、1、2 ,區(qū)別主要是結(jié)果輸出的形式不一樣,嫌麻煩可以不設(shè)置

model.evaluate(x_test,  y_test, verbose=2)

評估的損失值和準(zhǔn)確率如下:

[0.07444974237508141, 0.9777]

(7) 展示不使用歸一化的操作的訓(xùn)練和評估結(jié)果

在不使用歸一化操作的情況下,訓(xùn)練過程輸出如下:

Train on 60000 samples
Epoch 1/5
60000/60000 [==============================] - 3s 42us/sample - loss: 2.4383 - accuracy: 0.7449
Epoch 2/5
60000/60000 [==============================] - 2s 40us/sample - loss: 0.5852 - accuracy: 0.8432
Epoch 3/5
60000/60000 [==============================] - 2s 36us/sample - loss: 0.4770 - accuracy: 0.8724
Epoch 4/5
60000/60000 [==============================] - 2s 34us/sample - loss: 0.4069 - accuracy: 0.8950
Epoch 5/5
60000/60000 [==============================] - 2s 32us/sample - loss: 0.3897 - accuracy: 0.8996
10000/10000 - 0s - loss: 0.2898 - accuracy: 0.9285

評估結(jié)果輸入如下:

[0.2897613683119416, 0.9285]

所以我們通過和上面的進(jìn)行對比發(fā)現(xiàn),不進(jìn)行歸一化操作,在訓(xùn)練過程中收斂較慢,在相同 epoch 的訓(xùn)練之后,評估的準(zhǔn)確率和損失值都不理想,損失值比第(6)步操作的損失值大,準(zhǔn)確率比第(6)步操作低 5% 左右。

以上就是Tensorflow2.1 MNIST圖像分類實現(xiàn)思路分析的詳細(xì)內(nèi)容,更多關(guān)于Tensorflow2.1 MNIST圖像分類的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • python中的常用運(yùn)算符和優(yōu)先級

    python中的常用運(yùn)算符和優(yōu)先級

    這篇文章主要介紹了python中的常用運(yùn)算符和優(yōu)先級,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-06-06
  • Python THREADING模塊中的JOIN()方法深入理解

    Python THREADING模塊中的JOIN()方法深入理解

    這篇文章主要介紹了Python THREADING模塊中的JOIN()方法深入理解,本文用簡潔易懂的語言總結(jié)了對JOIN()方法的理解,不同于其它文章,需要的朋友可以參考下
    2015-02-02
  • Python隨機(jī)生成手機(jī)號、數(shù)字的方法詳解

    Python隨機(jī)生成手機(jī)號、數(shù)字的方法詳解

    這篇文章主要介紹了Python隨機(jī)生成手機(jī)號、數(shù)字的方法,結(jié)合完整實例形式分析了Python編程生成隨機(jī)手機(jī)號與數(shù)字的實現(xiàn)方法及相關(guān)函數(shù)用法,需要的朋友可以參考下
    2017-07-07
  • Python數(shù)學(xué)建模PuLP庫線性規(guī)劃進(jìn)階基于字典詳解

    Python數(shù)學(xué)建模PuLP庫線性規(guī)劃進(jìn)階基于字典詳解

    在大規(guī)模的規(guī)劃問題中,這樣逐個定義變量和設(shè)置模型參數(shù)非常繁瑣,效率很低。Pulp 庫提供了一種快捷方式,可以結(jié)合 Python語言的循環(huán)和容器,使用字典來創(chuàng)建問題
    2021-10-10
  • python實現(xiàn)錄屏功能(親測好用)

    python實現(xiàn)錄屏功能(親測好用)

    這篇文章主要介紹了使python實現(xiàn)錄屏功能(親測好用),本文通過實例代碼給大家介紹的非常詳細(xì),對大家的工作或?qū)W習(xí)具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-03-03
  • Python利用遺傳算法探索迷宮出路實例深究

    Python利用遺傳算法探索迷宮出路實例深究

    當(dāng)處理迷宮問題時,遺傳算法提供了創(chuàng)新的解決方案,本文將深入探討如何運(yùn)用Python和遺傳算法來解決迷宮問題,這是一個經(jīng)典的尋路問題,尋找從起點到終點的最佳路徑,遺傳算法是一種啟發(fā)式優(yōu)化方法,適用于解決復(fù)雜問題,其中個體進(jìn)化和自然選擇的概念被用于尋找最優(yōu)解
    2023-12-12
  • 基于KL散度、JS散度以及交叉熵的對比

    基于KL散度、JS散度以及交叉熵的對比

    這篇文章主要介紹了基于KL散度、JS散度以及交叉熵的對比,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-05-05
  • Python根據(jù)歐拉角求旋轉(zhuǎn)矩陣的實例

    Python根據(jù)歐拉角求旋轉(zhuǎn)矩陣的實例

    今天小編就為大家分享一篇Python根據(jù)歐拉角求旋轉(zhuǎn)矩陣的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-01-01
  • Python基于property實現(xiàn)類的特性操作示例

    Python基于property實現(xiàn)類的特性操作示例

    這篇文章主要介紹了Python基于property實現(xiàn)類的特性,結(jié)合實例形式分析了使用property實現(xiàn)類的特性相關(guān)操作技巧與注意事項,需要的朋友可以參考下
    2018-06-06
  • Python異常學(xué)習(xí)筆記

    Python異常學(xué)習(xí)筆記

    這篇文章主要介紹了Python異常學(xué)習(xí)筆記,本文著重講解了如何自定義一個異常,需要的朋友可以參考下
    2015-02-02

最新評論