亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

全部開發者教程

TensorFlow 入門教程

TensorFlow 快速入門示例

因為本課程是以案例為驅動進行框架的應用與講解,因此我們這一節以一個簡單的示例來幫助大家了解 TensorFlow 框架的使用方法以及基本的程序框架與流程。

既然要進行模型的構建與訓練,那么數據集便是必不可少的一部分。因為所有的模型都是建立在一定的數據集合之上的。這節課我們便采用一個叫做 fashion_mnist 數據集合進行模型的構建與訓練。

1. 什么是 fashion_mnist 數據集合

作為機器學習中最基本的數據集合之一, fashion_mnist 數據集一直是入門者做程序測試的首選的數據集,相比較傳統的 mnist 數據集而言,fashion_mnist 數據集更加豐富,能夠更好的反映網絡模型的構建的效果。

fashion_mnist 數據集合是一個包含 70000 個數據的數據集合,其中60000 條數據為訓練集合,10000 條數據為測試集合;每個數據都是 28*28 的灰度圖片數據,而每個數據的標簽分為 10 個類別。其中的幾條數據具體如下圖所示(圖片來自于 TensorFlow 官方 API 文檔)。

圖片描述

我們要做的就是如何根據輸入的圖片訓練模型,從而使得模型可以根據輸入的圖片來預測其屬于哪一個類別。

fashion_mnist 數據集合的 10 個類別為:

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

2. TensorFlow一般程序結構

TensorFlow 一般的程序的結構都是以下的順序:

  • 引入所需要的包
  • 加載并預處理數據
  • 編寫模型結構
  • 編譯模型或 Build 模型
  • 訓練模型與保存模型
  • 評估模型

在這個簡單的示例之中我們不會涉及到模型的保存與加載,我們只是帶領大家熟習一下程序的整體結構即可。

具體的程序代碼為:

import tensorflow as tf

# 使用內置的數據集合來加載數據
(x_train, y_train), (x_test, y_test) = tf.keras.datasets.fashion_mnist.load_data()

# 預處理圖片數據,使其歸一化
x_train, x_test = x_train / 255.0, x_test / 255.0

# 定義網絡結構
model = tf.keras.models.Sequential([
  tf.keras.layers.Flatten(input_shape=(28, 28)),
  tf.keras.layers.Dense(256, activation='relu'),
  tf.keras.layers.Dense(10, activation='softmax')
])

# 編譯模型
model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])

# 訓練模型
model.fit(x_train, y_train, epochs=5)

# 評估模型
model.evaluate(x_test,  y_test)

接下來讓我們仔細地看一下這些代碼到底干了什么。

在該程序之中,我們首先使用 tf.keras 中的 datasets 載入了fashion_mnist 數據集合,該函數返回的是兩個元組:

  • 第一個元組為(訓練數據的圖片,訓練數據的標簽)
  • 第二個元組為(測試數據的圖片,測試數據的標簽)

因此我們能夠使用兩個元組來接收我們要訓練的數據集合。

然后我們對圖片進行了預處理:

x_train, x_test = x_train / 255.0, x_test / 255.0

在機器學習之中,我們一般將我們的輸入數據規范到 [0 ,1] 之間,因為這樣會讓模型的訓練效果更好。又因為圖片數據的每個像素都是 [0, 255] 的整數,因此我們可以將所有的圖片數據除以 255 ,從而進行歸一化。

接下來我們便構建了我們的模型,我們的模型由三層組成:

  • Flatten 層,這一層負責將二維的圖片數據變成一維的數組數據,比如我們輸入的圖片數據為 28*28 的二維數組,那么 Flatten 層將會把其變為長度為 784 的一維數組。
  • Dense 層,全連接層,這一層的單元數為 10 個,分別對應著我們的 10 個類別標簽,激活函數為 “softmax” ,表示它會計算每個類別的可能性,從而取可能性最大的類別作為輸出的結果。

然后我們便進行了模型的編譯工作,在編譯的過程中我們有以下幾點需要注意:

  • 優化器的選擇,優化器代表著如何對網絡中的參數進行優化,這里采用的是 “adam” 優化器,也是一種最普遍的優化器。
  • 損失函數,損失函數意味著我們如何對“模型判斷錯誤的懲罰”的衡量方式;換句話說,我們可以暫且理解成損失函數表示“模型判斷出錯的程度”。對于這種分類的問題,我們一般采用的是 “sparse_categorical_crossentropy” 交叉熵來衡量。
  • Metrics,表示我們在訓練的過程中要記錄的數據,在這里我們記錄了 “accuracy” ,也就是準確率。

再者我們進行模型的訓練,我們使用我們預先加載好的數據進行模型的訓練,在這里我們設置訓練的循環數( epoch )為 5,表示我們會在數據集上循環 5 次。

最后我們進行模型的評估,我們使用 x_test, y_test 對我們的模型進行相應的評估。

3. 程序的輸出

通過運行上面的程序,我們可以得到下面的輸出:

Epoch 1/5
1875/1875 [==============================] - 5s 3ms/step - loss: 0.4865 - accuracy: 0.8283
Epoch 2/5
1875/1875 [==============================] - 5s 3ms/step - loss: 0.3644 - accuracy: 0.8693
Epoch 3/5
1875/1875 [==============================] - 5s 3ms/step - loss: 0.3287 - accuracy: 0.8795
Epoch 4/5
1875/1875 [==============================] - 5s 3ms/step - loss: 0.3048 - accuracy: 0.8874
Epoch 5/5
1875/1875 [==============================] - 5s 3ms/step - loss: 0.2864 - accuracy: 0.8938
313/313 - 0s - loss: 0.3474 - accuracy: 0.8752
[0.3474471867084503, 0.8751999735832214]

由此可以看出,在訓練集合上我們可以得到的最高的準確率為 87.52%,在測試集合上面的準確率為 87.519997%。

4. 小結

TesnorFlow 程序的構建主要分為三大部分:數據預處理、模型構建、模型訓練。

而在以后的實踐過程中我們也總是離不開這個程序順序,更加深入的定制化無非就是在這三個大的過程中增添一些細節,因此我們大家要謹記這個總體步驟。