Якщо я зберігаю свою модель за допомогою 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).