Jeśli tensorflow.saved_model.save
zapiszę mój model za pomocą funkcji w formacie SavedModel, jak mogę pobrać, które operacje Tensorflow zostaną użyte w tym modelu później. Ponieważ model można przywrócić, operacje te są przechowywane na wykresie, domyślam się, że w saved_model.pb
pliku. Jeśli załaduję ten protobuf (a więc nie cały model), część protobufa w bibliotece zawiera je, ale nie jest to na razie udokumentowane i oznaczone jako funkcja eksperymentalna. Modele utworzone w Tensorflow 1.x nie będą miały tej części.
Jaki jest zatem szybki i niezawodny sposób na uzyskanie listy używanych operacji (takich jak MatchingFiles
lub WriteFile
) z modelu w formacie SavedModel?
W tej chwili mogę zamrozić wszystko, podobnie jak tensorflowjs-converter
robi. Sprawdzają również obsługiwane operacje. To obecnie nie działa, gdy LSTM jest w modelu, patrz tutaj . Czy istnieje lepszy sposób, aby to zrobić, ponieważ operatorzy zdecydowanie tam są?
Przykładowy model:
class FileReader(tf.Module):
@tf.function(input_signature=[tf.TensorSpec(name='filename', shape=[None], dtype=tf.string)])
def read_disk(self, file_name):
input_scalar = tf.reshape(file_name, [])
output = tf.io.read_file(input_scalar)
return tf.stack([output], name='content')
file_reader = FileReader()
tf.saved_model.save(file_reader, 'file_reader')
Oczekiwano w wyniku wszystkich operacji, zawierających w tym przypadku co najmniej:
ReadFile
jak opisano tutaj- ...
saved_model
zmienna w twoim ostatnim przykładzie? Wynik tf.saved_model.load('/path/to/model')
lub ładowanie protobufa pliku save_model.pb.
saved_model.pb
jesttf.GraphDef
, czySavedModel
wiadomość typu protobuf? Jeśli masztf.GraphDef
sprawdzonegd
, możesz uzyskać listę używanych operacji zsorted(set(n.op for n in gd.node))
. Jeśli masz załadowany model, możesz to zrobićsorted(set(op.type for op in tf.get_default_graph().get_operations()))
. Jeśli jest toSavedModel
, możesztf.GraphDef
z niego uzyskać (npsaved_model.meta_graphs[0].graph_def
.).