Tensorflow v1.10 + por que uma função que serve como receptor de entrada é necessária quando são feitos pontos de verificação sem el

Estou no processo de adaptar meu modelo à API estimadora do TensorFlo

Fiz recentemente uma pergunta sobre parando antes com base nos dados de validação onde, além da parada antecipada, o melhor modelo nesse momento deve ser exportad

arece que o meu entendimento sobre o que é uma exportação de modelo e o que é um ponto de verificação não está complet

s @Checkpoints são feitos automaticamente. Pelo meu entendimento, os pontos de verificação são suficientes para que o estimador comece a "aquecer" - usando pesos tão treinados ou pesos antes de um erro (por exemplo, se você sofreu uma queda de energia).

O que é legal nos pontos de verificação é que não preciso escrever nenhum código além do necessário para um estimador personalizado (ou seja,input_fn emodel_fn).

Enquanto um dado estimador inicializado, pode-se simplesmente chamar seutrain para treinar o modelo, na prática esse método é bastante sem brilho. Muitas vezes, alguém gostaria de fazer várias coisas:

compare a rede periodicamente com um conjunto de dados de validação para garantir que você não esteja ajustando demais interrompa o treinamento mais cedo se ocorrer excesso de ajustealve o melhor modelo sempre que a rede terminar (atingindo o número especificado de etapas de treinamento ou os critérios de parada antecipada

Para alguém novo na API do estimador de "alto nível", parece ser necessário um conhecimento de baixo nível (por exemplo, para oinput_fn), como não é fácil obter o estimador para fazer iss

Por algum código de luz que refaz # 1 pode ser alcançado usandotf.estimator.TrainSpec etf.estimator.EvalSpec comtf.estimator.train_and_evaluate.

Noprevious question do utilizador@ GPhilo esclarece como # 2 pode ser alcançado usando uma função semi-intuitiva dotf.contrib:

tf.contrib.estimator.stop_if_no_decrease_hook(my_estimator,'my_metric_to_monitor', 10000)

(não intuitivo como "a parada precoce não é acionada de acordo com o número de avaliações que não melhoram, mas com o número de avaliações que não melhoram em um determinado intervalo de etapas").

@ GPhilo - observando que não está relacionado a # 2 - também respondeu como fazer # 3 (conforme solicitado na postagem original). No entanto, eu não entendo o que uminput_serving_fn é, por que é necessário ou como fazê-l

Isso é ainda mais confuso, pois nenhuma função é necessária para fazer os pontos de verificação ou para o estimador começar "quente" a partir do ponto de verificaçã

Então minhas perguntas são:

ual é a diferença entre um ponto de verificação e um melhor modelo exportad o que exatamente é uma função de receptor de entrada de serviço e como escrever uma? (Passei um pouco de tempo lendo os documentos do tensorflow e não acho suficiente entender como devo escrever um e por que preciso fazê-lo).como posso treinar meu estimador, salvar o melhor modelo e depois carregá-l

Para ajudar a responder à minha pergunta, estou fornecendo este Colab documento.

Este notebook independente produz alguns dados fictícios, os salva na TF Records, possui um estimador personalizado muito simples viamodel_fn e treina este modelo com uminput_fn que usa os arquivos TF Record. Portanto, deve ser suficiente para alguém me explicar quais espaços reservados eu preciso criar para a função de receptor de entrada de informações e como posso realizar # 3.

Atualiza

@ GPhilo Em primeiro lugar, não posso subestimar minha apreciação por sua consideração e cuidado em ajudar-me (e espero que outros) entendam esse assunt

Meu “objetivo” (motivando-me a fazer esta pergunta) é tentar criar uma estrutura reutilizável para redes de treinamento, para que eu possa passar umbuild_fn and go (além de ter os recursos de qualidade de vida do modelo exportado, paradas antecipadas etc.

Um atualizado (com base nas suas respostas) Colab pode ser encontradoAqu.

pós várias leituras de sua resposta, encontrei agora mais algumas confusõe

1.

a maneira como você fornece informações para o modelo de inferência é diferente daquela usada para o treinamento

Por quê? Para meu entendimento, o pipeline de entrada de dados não é:

load raw —> process —> feed to model

Mas sim:

Load raw —> pre process —> store (perhaps as tf records)
# data processing has nothing to do with feeding data to the model?
Load processed —> feed to model

Em outras palavras, é meu entendimento (talvez errado) que o objetivo de um tfExample / SequenceExample é armazenar uma entidade de referência singular completa e pronta para ser usada - nenhum outro processamento é necessário além da leitura doTFRecord Arquivo

Por isso, pode haver uma diferença entre o treinamento / avaliaçãoinput_fn e a inferência (por exemplo, leitura de arquivo x avaliação ansiosa / interativa na memória), mas o formato dos dados é o mesmo (exceto pela inferência, você pode querer alimentar apenas 1 exemplo em vez de um lote ...)

Concordo que o " pipeline de entrada não faz parte do próprio modelo ”. No entanto, na minha opinião, e aparentemente estou errado ao pensar assim, com o estimador devo poder fornecer um lote para treinamento e um único exemplo (ou lote) para inferênci

An aparte: “ Ao avaliar, você não precisa dos gradientes e precisa de uma função de entrada diferent “, A única diferença (pelo menos no meu caso) são os arquivos dos quais você está lendo?

Estou familiarizado com esse Guia TF, mas não o achei útil, porque não está claro para mim quais espaços reservados eu preciso adicionar e quais operações adicionais precisam ser adicionadas para converter os dados.

E se eu treinar meu modelo com registros e quiser deduzir apenas os tensores densos?

Tangencialmente, acho oexempl no subparágrafo do guia vinculado, uma vez que a interface tf record exige que o usuário defina várias vezes como gravar / extrair recursos de um arquivo tf record em diferentes contextos. Além disso, dado que a equipe do TF declarou explicitamente que tem pouco interesse em documentar os registros, qualquer documentação construída sobre ele é, portanto, para mim igualmente ingênu

A respeito detf.estimator.export.build_raw_serving_input_receiver_fn. Como é chamado o espaço reservado? Entrada? Você poderia talvez mostrar o análogo detf.estimator.export.build_raw_serving_input_receiver_fn escrevendo o equivalenteserving_input_receiver_fn

Com relação ao seu exemploserving_input_receiver_fn com as imagens de entrada. Como você sabe chamar os recursos de 'imagens' e o tensor do receptor 'dados de entrada'? Esse (o último) é padrão?

Como nomear uma exportação comsignature_constants.DEFAULT_SERVING_SIGNATURE_DEF_KEY.

questionAnswers(0)

yourAnswerToTheQuestion