Se eu salvar meu modelo usando a tensorflow.saved_model.savefunção no formato SavedModel, como recuperar quais Tensorflow Ops são usados nesse modelo posteriormente. Como o modelo pode ser restaurado, essas operações são armazenadas no gráfico, meu palpite está no saved_model.pbarquivo. Se eu carregar esse protobuf (não o modelo inteiro), a parte da biblioteca do protobuf os lista, mas isso não está documentado e marcado como um recurso experimental por enquanto. Os modelos criados no Tensorflow 1.x não terão essa parte.
Então, qual é uma maneira rápida e confiável de recuperar uma lista de operações usadas (como MatchingFilesou WriteFile) de um modelo no formato SavedModel?
Agora eu posso congelar a coisa toda, como tensorflowjs-converterfaz. Como eles também verificam as operações suportadas. Atualmente, isso não funciona quando um LSTM está no modelo, veja aqui . Existe uma maneira melhor de fazer isso, já que as Ops estão aí?
Um modelo de exemplo:
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')
Esperado na saída de todas as operações, contendo neste caso pelo menos:
ReadFilecomo descrito aqui- ...
saved_modelvariável no seu último exemplo? O resultado tf.saved_model.load('/path/to/model')ou o carregamento do protobuf do arquivo saved_model.pb.
saved_model.pb, étf.GraphDefumaSavedModelmensagem ou um protobuf? Se você recebeu umatf.GraphDefchamadagd, pode obter a lista de operações usadas comsorted(set(n.op for n in gd.node)). Se você tem um modelo carregado, pode fazê-losorted(set(op.type for op in tf.get_default_graph().get_operations())). Se for umSavedModel, você pode obter o resultadotf.GraphDef(por exemplosaved_model.meta_graphs[0].graph_def).