TensorFlow(keras)入門課程--02 計算機視覺的介紹

目錄

  • 1 簡介
  • 2 開始編碼
  • 3 設計模型
  • 4 編譯和訓練模型
  • 5 模型測試

1 簡介

在本章,我們將超越實驗1中TensorFlow的基本Hello World,並將應用所學到的知識來創建可識別服裝項目的計算機視覺模型。

2 開始編碼

# 查看一下TensorFlow的版本信息
import tensorflow as tf
print(tf.__version__)
1.13.1

下面我們將訓練神經網絡來識別名爲Fashion MNIST數據集中的衣物,它包含10種不同 類別的70000件服裝,每件衣服都是28×28灰度圖像。如下圖所示

Fashion MNIST數據集可直接在tf.keras.datasetsAPI中獲得

fashion_mnist = tf.keras.datasets.fashion_mnist

在此對象中調用load_data會爲你提供兩組兩個列表:訓練值和測試紙,這些值表示服裝項目以及標籤

(training_images,training_labels),(test_images,test_labels) = fashion_mnist.load_data()

讓我們打印一個訓練圖像和標籤來查看

import matplotlib.pyplot as plt
plt.imshow(training_images[0])
print(training_labels[0])
print(training_images[0])
9
[[  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
    0   0   0   0   0   0   0   0   0   0]
 [  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
    0   0   0   0   0   0   0   0   0   0]
 [  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
    0   0   0   0   0   0   0   0   0   0]
 [  0   0   0   0   0   0   0   0   0   0   0   0   1   0   0  13  73   0
    0   1   4   0   0   0   0   1   1   0]
 [  0   0   0   0   0   0   0   0   0   0   0   0   3   0  36 136 127  62
   54   0   0   0   1   3   4   0   0   3]
 [  0   0   0   0   0   0   0   0   0   0   0   0   6   0 102 204 176 134
  144 123  23   0   0   0   0  12  10   0]
 [  0   0   0   0   0   0   0   0   0   0   0   0   0   0 155 236 207 178
  107 156 161 109  64  23  77 130  72  15]
 [  0   0   0   0   0   0   0   0   0   0   0   1   0  69 207 223 218 216
  216 163 127 121 122 146 141  88 172  66]
 [  0   0   0   0   0   0   0   0   0   1   1   1   0 200 232 232 233 229
  223 223 215 213 164 127 123 196 229   0]
 [  0   0   0   0   0   0   0   0   0   0   0   0   0 183 225 216 223 228
  235 227 224 222 224 221 223 245 173   0]
 [  0   0   0   0   0   0   0   0   0   0   0   0   0 193 228 218 213 198
  180 212 210 211 213 223 220 243 202   0]
 [  0   0   0   0   0   0   0   0   0   1   3   0  12 219 220 212 218 192
  169 227 208 218 224 212 226 197 209  52]
 [  0   0   0   0   0   0   0   0   0   0   6   0  99 244 222 220 218 203
  198 221 215 213 222 220 245 119 167  56]
 [  0   0   0   0   0   0   0   0   0   4   0   0  55 236 228 230 228 240
  232 213 218 223 234 217 217 209  92   0]
 [  0   0   1   4   6   7   2   0   0   0   0   0 237 226 217 223 222 219
  222 221 216 223 229 215 218 255  77   0]
 [  0   3   0   0   0   0   0   0   0  62 145 204 228 207 213 221 218 208
  211 218 224 223 219 215 224 244 159   0]
 [  0   0   0   0  18  44  82 107 189 228 220 222 217 226 200 205 211 230
  224 234 176 188 250 248 233 238 215   0]
 [  0  57 187 208 224 221 224 208 204 214 208 209 200 159 245 193 206 223
  255 255 221 234 221 211 220 232 246   0]
 [  3 202 228 224 221 211 211 214 205 205 205 220 240  80 150 255 229 221
  188 154 191 210 204 209 222 228 225   0]
 [ 98 233 198 210 222 229 229 234 249 220 194 215 217 241  65  73 106 117
  168 219 221 215 217 223 223 224 229  29]
 [ 75 204 212 204 193 205 211 225 216 185 197 206 198 213 240 195 227 245
  239 223 218 212 209 222 220 221 230  67]
 [ 48 203 183 194 213 197 185 190 194 192 202 214 219 221 220 236 225 216
  199 206 186 181 177 172 181 205 206 115]
 [  0 122 219 193 179 171 183 196 204 210 213 207 211 210 200 196 194 191
  195 191 198 192 176 156 167 177 210  92]
 [  0   0  74 189 212 191 175 172 175 181 185 188 189 188 193 198 204 209
  210 210 211 188 188 194 192 216 170   0]
 [  2   0   0   0  66 200 222 237 239 242 246 243 244 221 220 193 191 179
  182 182 181 176 166 168  99  58   0   0]
 [  0   0   0   0   0   0   0  40  61  44  72  41  35   0   0   0   0   0
    0   0   0   0   0   0   0   0   0   0]
 [  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
    0   0   0   0   0   0   0   0   0   0]
 [  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
    0   0   0   0   0   0   0   0   0   0]]

我們可以注意到所有的值都是0到255之間的整數。當訓練神經網絡時,將所有值都 處理爲0到1之間更容易處理,這個 過程稱爲規範化。

training_images = training_images / 255.0
test_images = test_images / 255.0

3 設計模型

我們可以參考01來設計模型,但是這裏不是隻有一個神經元,而是有三層。

model = tf.keras.models.Sequential([
    tf.keras.layers.Flatten(),
    tf.keras.layers.Dense(128,activation=tf.nn.relu),
    tf.keras.layers.Dense(10,activation=tf.nn.softmax)
])

Sequential():定義了神經網絡中層的序列

Flatten():展平層,將圖形轉爲一維向量

Dense():全連接層,添加了一層神經元

Relu:if X>0 return X, else return 0.它只將值0或更大值傳遞給網絡中的下一層。

Softmax:採用一組值,並有效的選擇最大值。例如,如果最後一層輸出爲[0.1, 0.1, 0.05, 0.1, 9.5, 0.1, 0.05, 0.05, 0.05],保存從哪個最大值的排序,返回[0,0,0,0,1,0,0,0,0]

4 編譯和訓練模型

現在已經定義了模型,接下來要做的是構建它,

model.compile(optimizer=tf.train.AdamOptimizer(),
              loss="sparse_categorical_crossentropy",
              metrics=["accuracy"])
model.fit(training_images,training_labels,epochs=5)
Epoch 1/5
60000/60000 [==============================] - 3s 54us/sample - loss: 0.4973 - acc: 0.8259
Epoch 2/5
60000/60000 [==============================] - 3s 54us/sample - loss: 0.3738 - acc: 0.8654
Epoch 3/5
60000/60000 [==============================] - 3s 53us/sample - loss: 0.3341 - acc: 0.8783
Epoch 4/5
60000/60000 [==============================] - 3s 54us/sample - loss: 0.3109 - acc: 0.8859
Epoch 5/5
60000/60000 [==============================] - 3s 52us/sample - loss: 0.2929 - acc: 0.8918





<tensorflow.python.keras.callbacks.History at 0x1bc5efb7780>

模型訓練完成後,可以在最高一個時期看到準確率。大約爲89%。

5 測試模型

但是模型是如何對未見過的數據執行呢?這就是我們測試集的原因.

model.evaluate(test_images,test_labels)
10000/10000 [==============================] - 0s 35us/sample - loss: 0.3429 - acc: 0.8783





[0.34285926821231844, 0.8783]

在這裏,它返回了87.83%.正如預期的那樣,模型對未知數據的準確性不如它訓練的數據那麼準確,


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章