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

Tensorflow2.1實(shí)現(xiàn)Fashion圖像分類示例詳解

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

實(shí)現(xiàn)思路和詳細(xì)解讀

1. 獲取 Fashion 數(shù)據(jù)、處理數(shù)據(jù)

(1)本次實(shí)踐項(xiàng)目用到的是 Fashion 數(shù)據(jù)集,包含 10 個(gè)類別的服飾灰度圖片,共 70000 張,每張圖片展示一件衣物,每張圖片都是低分辨率的 28x28 像素(其實(shí)就是28*28的整數(shù)矩陣)。部分效果如下:

本次實(shí)踐中我們對(duì)數(shù)據(jù)集進(jìn)行訓(xùn)練集和測(cè)試集的劃分,使用 60000 張圖片來訓(xùn)練模型,使用 10000 張圖片來評(píng)估模型對(duì)服飾圖片的分類的準(zhǔn)確程度。

直接通過 tensorflow 內(nèi)置的接口函數(shù)從網(wǎng)絡(luò)上下載數(shù)據(jù)集,其中 (train_images, train_labels) 分別是訓(xùn)練集中的圖片和標(biāo)簽,(test_images, test_labels) 分別是測(cè)試集中的圖片和標(biāo)簽。

fashion = tf.keras.datasets.fashion_mnist
(train_images, train_labels), (test_images, test_labels) = fashion.load_data()

(2)這里主要是使用列表來保存數(shù)據(jù)集中出現(xiàn)過的所有衣服種類的名字。

class_names = ['T-shirt/top', 'Trouser', 'Pullover', 'Dress', 'Coat', 'Sandal', 'Shirt', 'Sneaker', 'Bag', 'Ankle boot']

(3)定義一個(gè)函數(shù),主要用來顯示某張照片。

def showImage(image):
    plt.figure()
    plt.imshow(image, cmap=plt.cm.binary)
    plt.colorbar()
    plt.grid(False)
    plt.show()

(4)這里主要展示訓(xùn)練集中第一張?jiān)紙D片的樣子,我們可以看到每張圖片都是低分辨率的 28x28 像素(其實(shí)就是28*28的矩陣數(shù)字),而且每個(gè)像素是在 0-255 之間的數(shù)字

showImage(train_images[0])  

效果如下:

因?yàn)槊繌垐D片的每個(gè)像素都是 0-255 之間的整數(shù),所以我們?yōu)榱四P陀?xùn)練的加快收斂,將所有的圖片都進(jìn)行歸一化操作。

train_images = train_images / 255.0
test_images = test_images / 255.0

這里主要展示訓(xùn)練集中第一張?jiān)紙D片的樣子經(jīng)過歸一化操作的結(jié)果,可以看到每個(gè)像素點(diǎn)都是 0-1 之間的小數(shù)。

showImage(train_images[0])

效果如下:

2. 使用 tensorflow 2.1 搭建模型

(1)因?yàn)槊繌垐D片的輸入是 28*28 的像素點(diǎn),所以第一層的是輸入設(shè)置為 input_shape=(28, 28) ,輸出的是一個(gè) 784 維的向量,該操作可以看作是將 input_shape 多維數(shù)組中的值,重新拼接到一起整合成了一個(gè)一維數(shù)組。

(2)第二層、第三層都是通過激活函數(shù) relu 的非線性變化,輸出一個(gè) 64 維向量的全連接層操作,當(dāng)然這個(gè)網(wǎng)絡(luò)結(jié)構(gòu)的層數(shù)、激活函數(shù)、每層的輸出維度可以自行隨意調(diào)整,其大小會(huì)影響最后的模型評(píng)估的指標(biāo),理論上結(jié)構(gòu)越復(fù)雜效果越好,但是訓(xùn)練速度越慢,而且這也會(huì)引起過擬合的現(xiàn)象,這個(gè)度的把握需要不斷通過輸出的指標(biāo)來進(jìn)行調(diào)整。

(3)第三層是輸出一個(gè) 10 維度的全連接層操作,其實(shí)就是該輸入圖片分別屬于這十個(gè)類別的對(duì)應(yīng)的概率分布。

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

3. 配置并編譯模型

(1)這里我們選擇了 Adam 優(yōu)化器,這是一個(gè)比較成熟且廣泛使用的優(yōu)化器。

(2)這里的損失函數(shù)我們選擇了比較常見的交叉熵 SparseCategoricalCrossentropy 。

(3)這里我們選用了最為常用的模型評(píng)估指標(biāo)準(zhǔn)確率 accuracy。

model.compile(optimizer='adam',
              loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),
              metrics=['accuracy'])

4. 訓(xùn)練模型

(1)我們使用訓(xùn)練數(shù)據(jù)的圖片和標(biāo)簽來對(duì)模型進(jìn)行訓(xùn)練,并且設(shè)置 epochs 為 5 ,也就是將所有的訓(xùn)練集從頭到尾反復(fù)訓(xùn)練 5 次,如果模型還沒有收斂那你也可以把 epochs 的值設(shè)置的大一些,配合較為復(fù)雜的網(wǎng)絡(luò)結(jié)構(gòu),最后模型在訓(xùn)練階段的準(zhǔn)確率應(yīng)該能達(dá)到 98% 以上。

(2)在模型的訓(xùn)練期間,命令行會(huì)顯示模型整體損失值和準(zhǔn)確率評(píng)估指標(biāo)的情況,這些都是 tensorflow 內(nèi)部函數(shù)寫好的輸出格式,你也可以自己寫代碼改變。

model.fit(train_images, train_labels, epochs=5)

訓(xùn)練過程輸出如下所示:

Train on 60000 samples
Epoch 1/5
60000/60000 [==============================] - 5s 78us/sample - loss: 0.5140 - accuracy: 0.8180
Epoch 2/5
60000/60000 [==============================] - 4s 73us/sample - loss: 0.3724 - accuracy: 0.8654
Epoch 3/5
60000/60000 [==============================] - 4s 74us/sample - loss: 0.3388 - accuracy: 0.8763
Epoch 4/5
60000/60000 [==============================] - 4s 70us/sample - loss: 0.3165 - accuracy: 0.8831
Epoch 5/5
60000/60000 [==============================] - 4s 74us/sample - loss: 0.2985 - accuracy: 0.8902 

5. 評(píng)估模型

(1)這里我們使用測(cè)試數(shù)據(jù)來對(duì)模型進(jìn)行評(píng)估,評(píng)估的指標(biāo)也就是之前規(guī)定的準(zhǔn)確率。

(2)verbose=2 只是為了規(guī)定結(jié)果輸出形式,可以選擇 0、1、2 中的任意一個(gè) 。

loss, acc = model.evaluate(test_images,  test_labels, verbose=2)
print('Test accuracy:%f, Test loss:%f'%(acc, loss))

結(jié)果輸出如下所示,表明所訓(xùn)練的模型在測(cè)試集的評(píng)估下準(zhǔn)確率能達(dá)到 0.8725 :

10000/1 - 1s - loss: 0.2279 - accuracy: 0.8725
Test accuracy:0.872500, Test loss:0.352148

6. 使用模型進(jìn)行預(yù)測(cè)

(1)上面模型在預(yù)測(cè)每張圖片時(shí)最后輸出的都是一個(gè) 10 維的雜亂無章的浮點(diǎn)數(shù)數(shù)組,為了保證輸出的結(jié)果是被人容易理解的,我們?cè)谏厦婺P偷牡淖詈蠹由狭艘粚?Softmax 。

(2)Softmax 的功能很簡(jiǎn)單,就是將這 10 個(gè)雜亂無章的浮點(diǎn)數(shù),轉(zhuǎn)化成 10 個(gè)概率,每個(gè)概率值在 0-1 之間,這 10 個(gè)概率的和為 1 ,這樣我們?nèi)∑渲凶畲蟾怕实闹祵?duì)應(yīng)的衣服類別作為我們預(yù)測(cè)的結(jié)果。

model_by_softmax = tf.keras.Sequential([model,  tf.keras.layers.Softmax()])
predictions = model_by_softmax.predict(test_images)
predict_for_one_image = predictions[3]
predict_for_one_image

輸出概率分布如下所示:

array([4.1939876e-07, 9.9996161e-01, 8.4085507e-08, 3.7719459e-05,
       3.1557637e-08, 1.0500006e-13, 1.5945717e-07, 1.3569163e-13,
       1.8028586e-09, 4.5183642e-11], dtype=float32)

(3)查看一張測(cè)試圖片在這 10 個(gè)衣服類別中的概率分布,我們發(fā)現(xiàn) 9.9996161e-01 最大,表明該圖片成為第二類衣服款式的概率最大。

(4)我們可以輸出預(yù)測(cè)的衣服種類,通過查找最大概率對(duì)應(yīng)的衣服種類,發(fā)現(xiàn)該圖片被預(yù)測(cè)的衣服類別是 Trouser 。

class_names[np.argmax(predict_for_one_image)]

輸出結(jié)果如下:

'Trouser'

(5)我們將原始圖片繪制出來發(fā)現(xiàn)確實(shí)是一條褲子,說明模型預(yù)測(cè)正確。

showImage(test_images[3])

展示效果如下:

以上就是Tensorflow2.1實(shí)現(xiàn)Fashion圖像分類示例詳解的詳細(xì)內(nèi)容,更多關(guān)于Tensorflow Fashion圖像分類的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

最新評(píng)論