1. 程式人生 > 其它 >重用預訓練的嵌入

重用預訓練的嵌入

重用預訓練的嵌入

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會將下載的檔案快取到本地系統的臨時目錄中。