Якщо я зберігаю свою модель за допомогою tensorflow.saved_model.save
функції у форматі SavedModel, то як я можу потім знайти, який Tensorflow Ops буде використаний у цій моделі згодом. Оскільки модель може бути відновлена, ці операції зберігаються у графіку, я здогадуюсь у saved_model.pb
файлі. Якщо я завантажую цей протобуф (так це не вся модель), бібліотечна частина протобуфа перераховує їх, але це поки що не задокументовано та позначено як експериментальна функція. Моделі, створені в Tensorflow 1.x, не матимуть цієї частини.
Отже, який швидкий та надійний спосіб отримати список використаних операцій (на кшталт MatchingFiles
або WriteFile
) з моделі у форматі SavedModel?
Зараз я можу заморозити всю річ, як tensorflowjs-converter
і. Оскільки вони також перевіряють, чи підтримуються операції. Наразі це не працює, коли LSTM є в моделі, дивіться тут . Чи є кращий спосіб зробити це, оскільки Оп напевно є там?
Приклад моделі:
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')
або завантаження протобуфа файлу save_model.pb.
saved_model.pb
, цеtf.GraphDef
чиSavedModel
повідомлення протобуфа? Якщо у вас є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()))
. Якщо це aSavedModel
, ви можете отриматиtf.GraphDef
його (наприкладsaved_model.meta_graphs[0].graph_def
).