Tensorflow: Como inicializar a camada de embeddings na API Estimator?

Criado em 12 jan. 2018  ·  3Comentários  ·  Fonte: tensorflow/tensorflow

Estou tentando usar embeddings existentes no modelo tensorflow, o tamanho do embedding é maior que 2 Gb e isso faz com que minha tentativa original de fazer isso não tenha sucesso:

embedding_var = tf.get_variable(
        "embeddings", 
        shape=GLOVE_MATRIX.shape, 
        initializer=tf.constant_initializer(np.array(GLOVE_MATRIX))
)

O que me deu este erro:

Cannot create a tensor proto whose content is larger than 2GB.

Estou usando o AWS SageMaker, que se baseia na API Estimator, e a execução real do gráfico na sessão acontece nos bastidores, então não tenho certeza de como inicializar alguns marcadores de posição para incorporação, dado isso. Seria útil se alguém pudesse compartilhar a forma de como fazer essa inicialização em termos de EstimatorAPI.


Acesse Stack Overflow para obter ajuda e suporte:

https://stackoverflow.com/questions/tagged/tensorflow

Se você abrir um problema do GitHub, esta é nossa política:

  1. Deve ser um bug ou uma solicitação de recurso.
  2. O formulário abaixo deve ser preenchido.
  3. Não deveria ser um problema do TensorBoard. Esses vão aqui .

Veja por que temos essa política : os desenvolvedores do TensorFlow respondem aos problemas. Queremos nos concentrar no trabalho que beneficia toda a comunidade, por exemplo, consertar bugs e adicionar recursos. O suporte ajuda apenas indivíduos. O GitHub também notifica milhares de pessoas quando os problemas são arquivados. Queremos que eles vejam você comunicando um problema interessante, em vez de serem redirecionados para o Stack Overflow.


Informação do sistema

  • Escrevi um código personalizado (em vez de usar um script de exemplo de estoque fornecido no TensorFlow) :
  • Plataforma e distribuição do sistema operacional (por exemplo, Linux Ubuntu 16.04) :
  • TensorFlow instalado de (fonte ou binário) :
  • Versão do TensorFlow (use o comando abaixo) :
  • Versão Python :
  • Versão do Bazel (se compilando da fonte) :
  • Versão do GCC / Compilador (se compilando da fonte) :
  • Versão CUDA / cuDNN :
  • Modelo de GPU e memória :
  • Comando exato para reproduzir :

Você pode coletar algumas dessas informações usando nosso script de captura de ambiente:

https://github.com/tensorflow/tensorflow/tree/master/tools/tf_env_collect.sh

Você pode obter a versão do TensorFlow com

python -c "importar tensorflow como tf; imprimir (tf.GIT_VERSION, tf.VERSION)"

Descreva o problema

Descreva o problema claramente aqui. Certifique-se de transmitir aqui por que é um bug no TensorFlow ou uma solicitação de recurso.

Código-fonte / logs

Inclua todos os logs ou código-fonte que possam ser úteis para diagnosticar o problema. Se incluir tracebacks, inclua o traceback completo. Registros e arquivos grandes devem ser anexados. Tente fornecer um caso de teste reproduzível que seja o mínimo necessário para gerar o problema.

awaiting response bug

Comentários muito úteis

parece que a maneira correta de inicializar variáveis ​​com embeddings seria usar tf.train.Scaffold . Aqui estão mais informações sobre isso no stackoverflow

Todos 3 comentários

Eu acho que isso normalmente seria um tipo de problema "enviar para StackOverflow" (resposta padrão anexada abaixo), mas o limite de 2 GB parece estar dentro do alcance de um bug ou uma solicitação de recurso.

@martinwicke @ispirmustafa alguma sugestão?

Esta pergunta é melhor feita no StackOverflow, pois não é um bug ou solicitação de recurso. Há também uma comunidade maior que lê perguntas lá. Obrigado!

Acho que está relacionado ao limite de tamanho do gráfico. o uso de constant_initializer incorpora GLOVE_MATRIX ao gráfico, o que aumenta o tamanho do gráfico.
Você poderia tentar usar o inicializador não constante?

parece que a maneira correta de inicializar variáveis ​​com embeddings seria usar tf.train.Scaffold . Aqui estão mais informações sobre isso no stackoverflow

Esta página foi útil?
0 / 5 - 0 avaliações