簡體   English   中英

TensorFlow SavedModel 如何處理額外的依賴

[英]How does TensorFlow SavedModel handle additional dependencies

我正在嘗試使用tf.saved_model.save() function 導出我的 TF model。 但是,我在預處理期間使用了額外的外部庫。 使用 nltk 示例的工作代碼如下所示:

import tensorflow as tf
import nltk
import tensorflow_datasets as tfds
from tensorflow.python.ops import gen_string_ops
from tensorflow.python.ops import string_ops

train_data, val_data, test_data = train_data, validation_data, test_data = tfds.load(
    name="imdb_reviews", 
    split=('train[:60%]', 'train[60%:]', 'test'),
    as_supervised=True)


def remove_stops(text):
    nltk.download('stopwords')
    stop_words = nltk.corpus.stopwords.words('english')
    for w in stop_words:
        text = string_ops.regex_replace(text, '\\b{}\\b'.format(w),'')  # remove all stopwords
    text = tf.strings.strip(text)  # remove trailing whitespaces
    return text

vectorize_layer = tf.keras.layers.experimental.preprocessing.TextVectorization( # this gives me a BOW representation of my data...
    max_tokens=1000,
    standardize=remove_stops,  # ...using my method to remove stopwords
    output_mode='count') 

train_feats = list(map(lambda x: x[0], train_data)) # bc PrefetchDatasets don't allow direct access
vectorize_layer.adapt(train_feats)  # BOW needs to be trained beforehand to get vector reps

# define some simple network
input_layer = tf.keras.Input(shape=(), name='input_text', dtype=tf.string)
model = tf.keras.Sequential()
model.add(input_layer)
model.add(vectorize_layer)
model.add(tf.keras.layers.Dense(units=64, activation='softmax')) 
model.add(tf.keras.layers.Dense(units=1, activation='sigmoid'))
model.compile(optimizer='adam',loss='binary_crossentropy', metrics = ['binary_accuracy'])
model.fit(train_data.shuffle(10000).batch(512),
             epochs=2,
             validation_data=val_data.batch(512))

tf.saved_model.save(model, './save_here')

據我了解文檔, savedModel 包括訓練的參數和計算,但不是我的代碼。 但是當我在另一個腳本中加載相同的 model 時(即根本不導入我的外部庫)

import tensorflow as tf
loaded_model = tf.saved_model.load('./save_here')
loaded_model(tf.constant(['test me pls']))

我的 output 沒有任何錯誤

<tf.Tensor: shape=(1, 1), dtype=float32, numpy=array([[0.5086063]], dtype=float32)>

這對我來說尤其令人困惑,因為我什至使用 nltk 來下載停用詞數據集。 SavedModels 在導出過程中究竟是如何處理這些外部庫的?

實際上,在從保存的 model 進行推理期間,您沒有使用 NLTK 庫。

您的 model 只需要文本作為向量即可工作,由代碼中的vectorize_layer處理。 如果您想在推理之前預處理您的文本,您應該導入庫並對其進行預處理。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM