說明
- 這是一個關(guān)于TensorFlow的基礎(chǔ)教程
- 本任務(wù)主要是基于TensorFlow實(shí)現(xiàn)對于MNIST數(shù)據(jù)集的處理
- 通過本任務(wù)狰贯,希望大家能夠了解TensorFlow構(gòu)建神經(jīng)網(wǎng)絡(luò)的大致過程
-
MNIST數(shù)據(jù)集展示
訓(xùn)練過程
-
導(dǎo)入相關(guān)包以及載入數(shù)據(jù)
-
查看樣本數(shù)據(jù)
-
查看多個數(shù)據(jù)
-
數(shù)據(jù)歸一化(深度學(xué)習(xí)模型處理 0 至 1 之間的數(shù)字時更加得心應(yīng)手(后面會有詳細(xì)介紹)贾费,所以我們會取全部像素值爽篷,并用每個值除以 255动猬。我們將此過程稱為歸一化。)
-
標(biāo)簽序列化(將標(biāo)量轉(zhuǎn)換成向量):
-
搭建模型
-
模型編譯
-
模型訓(xùn)練
完整代碼
# ===========導(dǎo)入數(shù)據(jù)集==========
from tensorflow.keras.datasets import mnist
(x_train, y_train), (x_test, y_test) = mnist.load_data()
# ==========查看數(shù)據(jù)=========
import matplotlib.pyplot as plt
image = x_train[0]
label = y_train[0]
plt.imshow(image, cmap="gray")
plt.title(label, fontdict={'fontsize': 30})
# ==========數(shù)據(jù)預(yù)處理(歸一化)==========
## 以下兩種方式等價(第一個是具體公式,第二個是簡便寫法)
x_train = (x_train - x_train.min()) / (x_train.max() - x_train.min())
x_test = x_test / 255
# ==========對標(biāo)簽進(jìn)行多分類編碼(變量轉(zhuǎn)向量)==========
import tensorflow.keras as keras
print("format y_train[0] is ", y_train[0])
num_categories = 10 # 0~9一共有10個數(shù)字
# 將標(biāo)量轉(zhuǎn)換成向量
y_train = keras.utils.to_categorical(y_train, num_categories)
y_test = keras.utils.to_categorical(y_test, num_categories)
print("after encoding, y_train[0] is ", y_train[0])
# ===============創(chuàng)建模型==================
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense
model = Sequential()
# 輸入層
"""
units參數(shù)指定該層中神經(jīng)元的數(shù)量。 這里使用512还栓,這是一個很好的起始值。也可以稍后修改此值來查看它如何影響訓(xùn)練結(jié)果传轰。
activation:激活函數(shù)剩盒,這里將使用relu激勵函數(shù),它將幫助我們的網(wǎng)絡(luò)做出比使用線性激勵函數(shù)更為復(fù)雜的預(yù)測
input_shape值指定輸入數(shù)據(jù)的形狀/維度慨蛙。
"""
model.add(Dense(units=512, activation='relu', input_shape=(784,))) # 輸入變量有784維
# 隱藏層
model.add(Dense(units = 512, activation='relu'))
# 輸出層
"""
該層使用softmax激勵函數(shù)辽聊,該函數(shù)將使該層的每個輸出值是0到1之間的概率值纪挎,并且該層的所有輸出相加等于1。
在這種情況下身隐,由于網(wǎng)絡(luò)要對一個圖像屬于0到9中的一個進(jìn)行預(yù)測廷区,所以一共有10個輸出唯灵,每個輸出都會給出模型對圖像屬于某個類的猜測值(概率)
因此贾铝,softmax較適用于需要分類的應(yīng)用場景。
"""
model.add(Dense(units = 10, activation='softmax')) # 輸出有10個類別埠帕,激活函數(shù)使用softmax
# 模型總結(jié)
model.summary()
# ==========模型編譯==========
"""
在實(shí)際使用數(shù)據(jù)訓(xùn)練模型之前垢揩,我們需要做的最后一步是對模型進(jìn)行編譯。
在這里敛瓷,我們要指定一個損失函數(shù)叁巨,模型將用該函數(shù)來了解其在訓(xùn)練過程中的表現(xiàn)。我們還要指定在模型訓(xùn)練時我們將要跟蹤準(zhǔn)確率
"""
model.compile(loss='categorical_crossentropy', metrics=['accuracy'])
# ==========訓(xùn)練模型==========
"""
x_train, y_train:分別是訓(xùn)練數(shù)據(jù)和訓(xùn)練標(biāo)簽呐籽;
epochs:表示在整個訓(xùn)練數(shù)據(jù)集上進(jìn)行訓(xùn)練的次數(shù)锋勺;
verbose=1:顯示訓(xùn)練過程和日志信息
validation_data:校驗(yàn)數(shù)據(jù),每一個訓(xùn)練完模型都會使用校驗(yàn)數(shù)據(jù)進(jìn)行檢查
"""
model.fit(x_train, y_train,
epochs=5,
verbose=1,
validation_data=(x_test, y_test)
)
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者