前言:
本專欄在保證內容完整性的基礎上,力求簡潔,旨在讓初學者能夠更快地、高效地入門TensorFlow2 深度學習框架,如果覺得本專欄對您有幫助的話,可以給一個小小的三連,各位的支持將是我創作的最大動力!
系列文章匯總:TensorFlow2 入門指南
Github專案地址:https://github.com/Keyird/TensorFlow2-for-beginner

經過前面的兩篇文章:
- TensorFlow2 入門指南 | 12 tf.keras.Sequential 搭建簡單網路模型
- TensorFlow2 入門指南 | 13 Keras Functional API 搭建復雜網路模型
我們學會了如何去搭建簡單和復雜的網路模型,網路搭建好意味著成功了一半,下面就是模型的裝配、訓練和評估環節!
文章目錄
- 一、模型的裝配
- 二、模型的訓練
- 三、模型的評估
- 四、小試牛刀
一、模型的裝配
通過模型裝配可以指定模型訓練時的損失函式、評價指標和優化器,TensorFLow 提供了內部函式 compile() 進行模型的裝配,
compile函式定義如下:
compile(
optimizer='rmsprop', loss=None, metrics=None, loss_weights=None,
weighted_metrics=None, run_eagerly=None, steps_per_execution=None, **kwargs
)
函式重要引數解釋如下:
| 引數 | 解釋 |
|---|---|
| optimizer | 優化器 |
| loss | 損失函式 |
| metrics | 評價指標 |
| … | … |
其中,metrics 引數為串列,你的模型可以具有任意數量的指標,
下面給出一個簡單的例子:
model.compile(
optimizer=keras.optimizers.RMSprop(learning_rate=1e-3),
loss=keras.losses.SparseCategoricalCrossentropy(),
metrics=[keras.metrics.SparseCategoricalAccuracy()],
)
注:如果你的模型具有多個輸出,則可以為每個輸出指定不同的損失和指標,并且可以調整每個輸出對模型總損失的貢獻,后面的文章將會帶你具體了解,
TensorFLow 提供許多內置優化器、損失函式和評價指標,對于初學者來說,你不必從頭開始創建自己的損失、指標或優化器,可以選擇直接呼叫:

當然,對于進階者而言,需要進一步掌握如何自定義損失函式、評價指標,這也是我在后面文章中將要帶大家學習的內容,
二、模型的訓練
當模型搭建、裝配完畢,就可以進行模型的訓練了,TensorFlow 提供了內置函式 fit() 來進行模型訓練,函式定義如下:
fit(
x=None, y=None, batch_size=None, epochs=1, verbose='auto',
callbacks=None, validation_split=0.0, validation_data=None, shuffle=True,
class_weight=None, sample_weight=None, initial_epoch=0, steps_per_epoch=None,
validation_hsteps=None, validation_batch_size=None, validation_freq=1,
max_queue_size=10, workers=1, use_multiprocessing=False
)
函式重要引數解釋如下:
| 引數 | 解釋 |
|---|---|
| x | 訓練輸入樣本 |
| y | 訓練輸入標簽 |
| batch_size | 一次迭代的樣本數 |
| epochs | 訓練輪數 |
| validation_data | 驗證集 |
| … | … |
具體可參考:https://tensorflow.google.cn/api_docs/python/tf/keras/Model
下面給出一個簡單的例子:
history = model.fit(
x_train,
y_train,
batch_size=64,
epochs=10,
validation_data=(x_val, y_val),
)
三、模型的評估
模型進行訓練時,想要知道模型泛化性能如何,就需要同步對測驗機進行評估,從而作為評估模型訓練好壞的標準之一,
在TensorFlow中,提供了evaluate()函式方便開發者使用,其定義如下:
evaluate(
x=None, y=None, batch_size=None, verbose=1, sample_weight=None, steps=None,
callbacks=None, max_queue_size=10, workers=1, use_multiprocessing=False,
return_dict=False, **kwargs
)
函式重要引數解釋如下:
| 引數 | 解釋 |
|---|---|
| x | 測驗輸入樣本 |
| y | 測驗輸入標簽 |
| batch_size | 一次測驗輸入的樣本數 |
| … | … |
下面給出一個簡單的例子:
results = model.evaluate(x_test, y_test, batch_size=128)
四、小試牛刀
根據以上學習內容,針對MNIST資料集,實作手寫數字識別,下面分別進行:資料集加載、模型搭建、模型裝配、模型訓練、評估測驗集,完整代碼如下:
"""
note: compile/fit/evaluate
author: AI JUN
date: 2022/1/5
"""
from tensorflow import keras
from tensorflow.keras import layers
# 資料集準備
(x_train, y_train), (x_test, y_test) = keras.datasets.mnist.load_data()
x_train = x_train.reshape(60000, 784).astype("float32") / 255.
x_test = x_test.reshape(10000, 784).astype("float32") / 255.
y_train = y_train.astype("float32")
y_test = y_test.astype("float32")
# 訓練集
x_train = x_train[:-10000]
y_train = y_train[:-10000]
# 驗證集
x_val = x_train[-10000:]
y_val = y_train[-10000:]
# 網路搭建
model = keras.Sequential([
layers.Dense(64, activation="relu", name="layer1"),
layers.Dense(64, activation="relu", name="layer2"),
layers.Dense(10, activation="softmax", name="predictions"),
])
model.build(input_shape=[None, 28*28])
# 模型的裝配
model.compile(
optimizer=keras.optimizers.RMSprop(), # Optimizer
loss=keras.losses.SparseCategoricalCrossentropy(),
metrics=[keras.metrics.SparseCategoricalAccuracy()],
)
# 模型的訓練
history = model.fit(
x_train,
y_train,
batch_size=64,
epochs=10,
validation_data=(x_val, y_val), # at the end of each epoch
)
# 評估測驗集
print("Evaluate on test data")
results = model.evaluate(x_test, y_test, batch_size=128)
print("test loss, test acc:", results)
代碼運行結果:

本教程所有代碼會逐漸上傳github倉庫:https://github.com/Keyird/TensorFlow2-for-beginner
如果對你有幫助的話,歡迎star收藏~
最好的關系是互相成就,各位的「三連」就是【AI 菌】創作的最大動力,我們下期見!
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/404353.html
標籤:其他
上一篇:單鏈表@線性表 -- 增刪查改
