Se eu salvar meu modelo usando a tensorflow.saved_model.save
funçã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.pb
arquivo. 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 MatchingFiles
ou WriteFile
) de um modelo no formato SavedModel?
Agora eu posso congelar a coisa toda, como tensorflowjs-converter
faz. 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:
ReadFile
como descrito aqui- ...
saved_model
variá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.GraphDef
umaSavedModel
mensagem ou um protobuf? Se você recebeu umatf.GraphDef
chamadagd
, 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
).