如何使用Tensorflow和預訓練模型用Python編譯模型?


Tensorflow和預訓練模型可以透過使用“compile”方法來編譯模型。在此之前,還會定義“base_learning_rate”。

閱讀更多: 什麼是TensorFlow以及Keras如何與TensorFlow一起建立神經網路?

包含至少一層卷積層的神經網路稱為卷積神經網路。我們可以使用卷積神經網路構建學習模型。

我們將瞭解如何藉助預訓練網路的遷移學習對貓和狗的影像進行分類。影像分類中遷移學習背後的直覺是,如果一個模型在大型通用資料集上進行訓練,則此模型可以有效地用作視覺世界的通用模型。它將學習特徵圖,這意味著使用者不必從頭開始在大型資料集上訓練大型模型。

閱讀更多: 如何預訓練自定義模型?

我們正在使用Google Colaboratory執行以下程式碼。Google Colab或Colaboratory幫助透過瀏覽器執行Python程式碼,並且無需任何配置即可免費訪問GPU(圖形處理單元)。Colaboratory構建在Jupyter Notebook之上。

print("The model is being compiled")
base_learning_rate = 0.0001
model.compile(optimizer=tf.keras.optimizers.Adam(lr=base_learning_rate),
loss=tf.keras.losses.BinaryCrossentropy(from_logits=True),
metrics=['accuracy'])
print("The base architecture of the model")
model.summary()

程式碼來源 −https://www.tensorflow.org/tutorials/images/transfer_learning

輸出

The model is being compiled
The base architecture of the model
Model: "model"
_________________________________________________________________
Layer (type)            Output Shape            Param #
=================================================================
input_3 (InputLayer)    [(None, 160, 160, 3)]     0
_________________________________________________________________
sequential_1 (Sequential) (None, 160, 160, 3)       0
_________________________________________________________________
tf.math.truediv (TFOpLambda) (None, 160, 160, 3)    0
_________________________________________________________________
tf.math.subtract (TFOpLambda (None, 160, 160, 3)     0
_________________________________________________________________
mobilenetv2_1.00_160 (Functi (None, 5, 5, 1280)    2257984
_________________________________________________________________
global_average_pooling2d_2 ( (None, 1280)           0
_________________________________________________________________
dropout (Dropout)           (None, 1280)           0
_________________________________________________________________
dense_2 (Dense)              (None, 1)             1281
=================================================================
Total params: 2,259,265
Trainable params: 1,281
Non-trainable params: 2,257,984

解釋

  • 在訓練模型之前,需要先編譯模型。

  • 由於有兩個類別,因此使用二元交叉熵損失,並使用from_logits=True,因為模型提供線性輸出。

  • MobileNet中的250萬個引數被凍結,但在密集層中包含1.2K個可訓練引數。

  • 這些層在兩個tf.Variable物件(權重和偏差)之間分配。

更新於: 2021年2月25日

185 次瀏覽

開啟你的職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.