【发布时间】:2021-02-26 12:12:04
【问题描述】:
我正在尝试使用 tf.saved_model.save() 函数导出我的 TF 模型。但是,我在预处理期间使用了额外的外部库。使用 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')
据我了解docs,savedModel 包括经过训练的参数和计算,但不包括我的代码。但是当我像这样在另一个脚本中加载相同的模型时(即根本不导入我的外部库)
import tensorflow as tf
loaded_model = tf.saved_model.load('./save_here')
loaded_model(tf.constant(['test me pls']))
我的输出没有任何错误
<tf.Tensor: shape=(1, 1), dtype=float32, numpy=array([[0.5086063]], dtype=float32)>
这对我来说尤其令人困惑,因为我什至使用 nltk 来下载停用词数据集。 SavedModels 在导出过程中究竟是如何处理这些外部库的?
【问题讨论】:
标签: python tensorflow tensorflow-serving