重用預訓練的嵌入
阿新 • • 發佈:2021-12-20
重用預訓練的嵌入
TensorFlow Hub專案可以輕鬆地在自己的模型中重用經過預訓練的模型元件。這些模型元件稱為模組。只需要瀏覽TF Hub儲存庫,就能找到需要的,然後將程式碼示例複製到下專案中,該模組將連同其預先訓練的權重一起自動下載幷包含在模型中:
# 在情感分析模型中使用nnlm-en-dim50句子嵌入模組: import tensorflow_hub as hub import tensorflow as tf from tensorflow import keras model = keras.models.Sequential([ hub.KerasLayer('https://tfhub.dev/google/tf2-preview/nnlm-en-dim50/1', dtype=tf.string, input_shape=[], output_shape=[50]), keras.layers.Dense(128, activation='relu'), keras.layers.Dense(1, activation='relu') ]) model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
hub.KerasLayer層會從給定的URL下載模組。這個特殊模組是一個句子編碼器:它把字串作為輸入,並將每個字串編碼為單個向量(在這個情況下為50維向量)。在內部,它解析字串(用空格來分隔單詞),並使用大型語料庫(Google News 7B語料庫,長70億個單詞)上預訓練的嵌入矩陣來嵌入每個單詞。最後,它將計算所有詞嵌入的均值,其結果就是句子嵌入。然後可以新增兩個簡單的Dense層來建立一個連搞得情感分析模型。預設情況下,hub.KerasLayer是不可訓練的,但是可以在建立它時設定trainable=True來更改它。
接下來只需要載入IMDB評論資料集即可,無需對其進行預處理(除了批處理和預取)並直接訓練模型:
import tensorflow_datasets as tfds
datasets, info = tfds.load('imdb_reviews', as_supervised=True, with_info=True)
train_size = info.splits['train'].num_examples
batch_size = 32
train_set = datasets['train'].batch(batch_size).prefetch(1)
history = model.fit(train_set, epochs=5)
TF Hub模組的URL最後一部分指定想要模型的版本1。此版本控制可以確保如果釋出了新的模組版本,不會破壞模型。方便的是,如果在網路瀏覽器中輸入此URL,會得到此模組的文件。預設情況下,TF Hub會將下載的檔案快取到本地系統的臨時目錄中。