Если я tensorflow.saved_model.save
сохраню свою модель, используя функцию в формате SavedModel, как я могу узнать, какие операции Tensorflow используются в этой модели впоследствии. Поскольку модель может быть восстановлена, эти операции хранятся в графике, я думаю, в saved_model.pb
файле. Если я загружаю этот protobuf (то есть не всю модель), библиотечная часть protobuf перечисляет их, но это пока не задокументировано и не помечено как экспериментальная функция. Модели, созданные в Tensorflow 1.x, не будут иметь этой части.
Итак, что такое быстрый и надежный способ получения списка используемых операций (например, MatchingFiles
или WriteFile
) из модели в формате SavedModel?
Прямо сейчас я могу заморозить всю вещь, как tensorflowjs-converter
делает. Как они также проверяют на поддерживаемые операции. В настоящее время это не работает, когда LSTM находится в модели, см. Здесь . Есть ли лучший способ сделать это, поскольку Ops определенно там?
Пример модели:
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')
Ожидаемые в выводе все Ops, содержащие в этом случае как минимум:
ReadFile
как описано здесь- ...
saved_model
переменная в вашем последнем примере? Результат tf.saved_model.load('/path/to/model')
или загрузка протобуфа файла сохраненного_моделя.pb.
saved_model.pb
этоtf.GraphDef
, илиSavedModel
сообщение protobuf? Если у вас естьtf.GraphDef
вызовgd
, вы можете получить список используемых операций сsorted(set(n.op for n in gd.node))
. Если у вас есть загруженная модель, вы можете сделатьsorted(set(op.type for op in tf.get_default_graph().get_operations()))
. Если этоSavedModel
, вы можете получитьtf.GraphDef
от него (напримерsaved_model.meta_graphs[0].graph_def
).