Pelo que recolhi até agora, existem várias maneiras diferentes de despejar um gráfico do TensorFlow em um arquivo e, em seguida, carregá-lo em outro programa, mas não consegui encontrar exemplos / informações claras sobre como eles funcionam. O que eu já sei é o seguinte:
- Salve as variáveis do modelo em um arquivo de checkpoint (.ckpt) usando um
tf.train.Saver()
e restaure-as mais tarde ( fonte ) - Salve um modelo em um arquivo .pb e carregue-o de volta usando
tf.train.write_graph()
etf.import_graph_def()
( fonte ) - Carregue um modelo de um arquivo .pb, treine-o novamente e despeje-o em um novo arquivo .pb usando o Bazel ( fonte )
- Congele o gráfico para salvar o gráfico e os pesos juntos ( fonte )
- Use
as_graph_def()
para salvar o modelo, e para pesos / variáveis, mapeie-os em constantes ( fonte )
No entanto, não consegui esclarecer várias dúvidas sobre esses métodos diferentes:
- Com relação aos arquivos de checkpoint, eles salvam apenas os pesos treinados de um modelo? Os arquivos de checkpoint podem ser carregados em um novo programa e usados para executar o modelo, ou eles simplesmente servem como formas de salvar os pesos em um modelo em um determinado momento / estágio?
- Em relação
tf.train.write_graph()
, os pesos / variáveis também são salvos? - Em relação ao Bazel, ele só pode salvar / carregar arquivos .pb para treinamento? Existe um comando simples do Bazel apenas para despejar um gráfico em um .pb?
- Com relação ao congelamento, um gráfico congelado pode ser carregado usando
tf.import_graph_def()
? - A demonstração do Android para TensorFlow é carregada no modelo Inception do Google a partir de um arquivo .pb. Se eu quisesse substituir meu próprio arquivo .pb, como faria para fazer isso? Eu precisaria alterar algum código / método nativo?
- Em geral, qual é exatamente a diferença entre todos esses métodos? Ou mais amplamente, qual é a diferença entre
as_graph_def()
/.ckpt/.pb?
Em suma, o que estou procurando é um método para salvar um gráfico (como em, as várias operações e outros) e seus pesos / variáveis em um arquivo, que pode então ser usado para carregar o gráfico e os pesos em outro programa , para uso (não necessariamente continuando / retreinando).
A documentação sobre este tópico não é muito direta, portanto, quaisquer respostas / informações serão muito apreciadas.