Я пытаюсь использовать tf.saved_model.save
после обучения модели трансформатора, чтобы развернуть его. Моя модель имеет несколько входов и выходов. Если я использую функцию saved_model для обслуживания, я добавляю некоторую проблему с формой ввода с первым вводом, а второй ввод не отображается, когда я использую функцию saved_model_cli show
. Я нашел способ решить эту проблему, обернув основной блок трансформатора модулем модели, а затем сохранив модель.
def build_model(MAX_LEN, transformer_layer):
inp = Input(shape=(MAX_LEN,), dtype=tf.int32, name="input_word_ids")
inp2 = Input(shape=(MAX_LEN,), dtype=tf.int32, name="attention_mask")
sequence_output, pooled_output = transformer_layer(inp, attention_mask = inp2)
out = Dense(1, activation='sigmoid', name='outputs')(pooled_output)
model = Model(inputs=[inp], outputs=[out])
return model
Но, как я вижу, в документации есть другой способ, который заключается в использовании подписей для указать входы / выходы во время tf.saved_model.save
. Для этого нам нужно использовать класс tf.Module
, но я не понял, как его использовать в случае, если у нас есть несколько входов / выходов точно (как понять модуль, что тензор входов должен быть связан с этими входами для модель?) . Кто-нибудь знает, как это сделать вторым методом? Более того, можем ли мы сделать предварительную обработку данных через подпись? https://www.tensorflow.org/guide/saved_model
class CustomModule(tf.Module):
def __init__(self):
super(CustomModule, self).__init__()
self.v = tf.Variable(1.)
@tf.function
def __call__(self, x):
print('Tracing with', x)
return x * self.v
@tf.function(input_signature=[tf.TensorSpec([], tf.float32)])
def mutate(self, new_v):
self.v.assign(new_v)
module = CustomModule()