Zephyrnet Logo

As 10 melhores práticas de aprendizado profundo a serem lembradas em 2020

Data:


Introdução

Se você der uma olhada na literatura e nas publicações sobre Inteligência Artificial desde o século 21, você não pode ignorar o Deep Learning. É um subconjunto de aprendizado de máquina que envolve o aprendizado de uma hierarquia de recursos para obter insights significativos de um espaço de entrada complexo.

Embora as pessoas geralmente fiquem animadas para usar o aprendizado profundo, elas podem rapidamente ficar desanimadas com a dificuldade de implementar suas próprias redes profundas. Especialmente na indústria, o desenvolvimento de processos para integrar o aprendizado profundo na infraestrutura computacional existente de uma organização continua sendo um desafio. Muitas organizações estão percebendo cada vez mais que a parte do código de aprendizado profundo em um sistema do mundo real é muito menor do que a infraestrutura necessária para seu suporte.

À medida que os projetos passam de pesquisa em pequena escala para implantação em grande escala, sua organização certamente precisará de muitos recursos para apoiar inferências, treinamento distribuído, pipelines de dados, monitoramento de modelo ... Pequenas empresas, no entanto, lutam para competir com grandes empresas que têm um grande quantidade de recursos para investir no desenvolvimento do fluxo de trabalho de aprendizagem profunda. Felizmente, existem algumas práticas recomendadas universais para obter uma implementação bem-sucedida do modelo de aprendizado profundo para uma empresa de qualquer tamanho e meio.


Defina o problema de negócios

A primeira e mais importante etapa para executar um projeto de aprendizado profundo bem-sucedido é definir um problema de negócios. Sem isso, um projeto simplesmente não pode existir. Para aprimorar um caso de uso de negócios, você deve começar com uma lista de questões críticas de negócios para escolher, possivelmente solicitando feedback e ideias de equipes em toda a empresa.

Vamos usar esta digitalização de fatura como um exemplo. Você deve ser capaz de responder a estas perguntas:

  • Qual é o processo atual? O processo de revisão de faturas evoluiu muito ao longo do tempo, desde a revisão manual até a digitalização de faturas. A digitalização de faturas envolve muitas etapas moderadas por humanos, portanto, podemos definitivamente usar a tecnologia para tornar esse processo melhor.
  • O uso de técnicas de aprendizado profundo ajudaria especificamente com esse problema de negócios e, em caso afirmativo, como? Abordagens de aprendizagem profunda viram avanços no problema específico de ler o texto e extrair informações estruturadas e não estruturadas de imagens. Ao fundir os métodos de aprendizagem profunda existentes com a tecnologia de reconhecimento óptico de caracteres (OCR), empresas e indivíduos foram capazes de automatizar o processo de digitalizando documentos e possibilitou procedimentos de entrada de dados manuais mais fáceis, melhor registro e armazenamento, menos erros e melhores tempos de resposta.
  • Temos a quantidade adequada de dados? Ao escolher um caso de uso de aprendizado profundo, você vai querer escolher um para o qual os dados já estão disponíveis. A exigência de coletar dados antes de iniciar um projeto não é ideal, pois prolongará significativamente o processo. Em nosso caso de uso, existem conjuntos de dados disponíveis para OCR para tarefas como reconhecimento de placa de matrícula ou reconhecimento de caligrafia, mas esses conjuntos de dados dificilmente são suficientes para obter o tipo de precisão que um processamento de sinistros de seguro ou atribuição de reembolso de um fornecedor exigiria.
  • Estamos dispostos a trabalhar neste problema com um parceiro externo? Como você trabalhará no projeto com alguém, o problema selecionado deve ser aquele em que você realmente deseja ter o envolvimento de um terceiro. Observe que, se construir uma solução interna for a abordagem que você escolher, os custos de construção devem ser compensados ​​por uma quantidade maior de clientes se inscrevendo, uma taxa maior de processamento de faturas e uma redução no número de revisores manuais necessários.
  • Este projeto vai me ajudar a ganhar ou economizar dinheiro? Se a resposta for “talvez” ou “não”, risque-a da lista. O projeto deve focar em oportunidades com resultados reais e mensuráveis. Para a digitalização de faturas, aqui estão alguns benefícios: automatizar processos, aumentar a eficiência, reduzir custos e armazenamento, aumentar a satisfação do cliente e reduzir a pegada ecológica.

Calcule o retorno do investimento

Existem muitos desafios no cálculo do ROI de um projeto de aprendizado profundo. Uma é que muitas vezes é difícil isolar as contribuições disso sozinho para melhorias, especialmente para resultados de negócios maiores. Além disso, o cálculo costuma ser complicado porque o valor não está todo em um número e pode se espalhar por vários departamentos e equipes. Portanto, a maior parte do trabalho aqui geralmente é determinar todas as maneiras possíveis pelas quais o projeto de aprendizado profundo pode trazer sucesso.

A lista de fatores é diferente para cada empresa, mas as contribuições universais são:

  • Economizando tempo: Isso é muito fácil de quantificar. O tempo economizado por meio de projetos de aprendizado profundo pode ser reinvestido em suas organizações para outras iniciativas.
  • Economizando dinheiro: Este valor depende inteiramente do projeto individual. O aprendizado profundo pode melhorar a precisão e a eficiência em todos os setores. Para um caso de uso de manutenção preditiva, o aprendizado profundo pode economizar dinheiro com taxas de rotatividade de clientes e esforço humano para manutenção. Para um caso de uso de mecanismo de recomendação, o aprendizado profundo pode aumentar o envolvimento do cliente e a fidelidade à marca. Para um caso de uso de chatbot de atendimento ao cliente, o aprendizado profundo pode diminuir os custos operacionais de suporte e melhorar a experiência do cliente.
  • Permitindo Escalabilidade: Os esforços internos de TI para empacotar dados e manter modelos para os engenheiros de aprendizado profundo podem ser caros se forem difíceis de acessar e grandes demais para manusear. Esse é um benefício importante das plataformas de aprendizado profundo, pois seus engenheiros podem acessar o pipeline de dados e fazer alterações quando necessário. Isso eventualmente permitiria que sua organização escalasse mais rapidamente sem ter que se preocupar com a carga da infraestrutura.
  • Melhorando a experiência do cliente: Quando o projeto demonstra o compromisso de sua organização com os clientes, é mais provável que eles o escolham em vez de outros concorrentes, dando-lhe uma vantagem. Além disso, os clientes têm menos probabilidade de mudar quando sua experiência é adaptada às suas necessidades individuais. O aprendizado profundo pode tornar esse tipo de experiência do cliente sem aumentar radicalmente os custos humanos.

Para aumentar o ROI do seu projeto, sua meta é definir KPIs claros que são colocados em prática e podem ser rastreados ao longo do tempo, por exemplo: (1) o número de projetos entregues por mês, (2) o tempo desde o início do protótipo à produção e (3) a proporção de projetos implantados para produção em relação às solicitações de projeto dos clientes.


Foco na qualidade e quantidade de dados

É muito importante investir no pré-processamento de seus dados antes de inseri-los no modelo de aprendizado profundo. Os dados do mundo real são geralmente incompleto (faltando valores de atributo, faltando certos atributos de interesse ou contendo apenas dados agregados), ruidoso (contendo erros ou outliers), e inconsistentet (contendo discrepâncias em códigos ou nomes). Algumas boas práticas de pré-processamento incluem limpeza (preencher valores ausentes, suavizar dados ruidosos, identificar ou remover outliers e resolver inc
onsistências), integração (usando vários bancos de dados, cubos de dados ou arquivos), transformação (normalização e agregação), redução (reduzindo o volume, mas produzindo os mesmos resultados analíticos ou semelhantes), e discretização (substituindo atributos numéricos por nominais).

Do lado da quantidade, ao implantar seu modelo de aprendizado profundo em um aplicativo do mundo real, você deve alimentar constantemente mais dados para o modelo para continuar melhorando seu desempenho. Mas não é fácil coletar dados bem anotados, já que o processo pode ser demorado e caro. Contratar pessoas para coletar manualmente os dados brutos e rotulá-los não é nada eficiente.

Uma sugestão que permite que você economize tempo e dinheiro é que você pode treinar seu modelo de aprendizado profundo conjuntos de dados de código aberto em grande escalae, em seguida, ajuste-o em seus próprios dados. Por exemplo, o Conjunto de dados de imagens abertas do Google tem cerca de 16 milhões de imagens rotuladas com caixas delimitadoras de 600 categorias. Seu modelo sendo treinado com esses dados provavelmente já é suficiente para detectar objetos, então agora você só precisa classificar os objetos nas caixas.

A abordagem acima funciona se o caso de uso for semelhante ao tipo de tarefa que os grandes projetos de código aberto atendem. Em muitas situações do mundo real, ele requer uma precisão de quase 100% (por exemplo, detecção de fraude, veículos autônomos), o que é impossível de fazer apenas com conjuntos de dados de código aberto. Para lidar com isso, você pode obter mais dados aproveitando aumento de dados, fazendo pequenas alterações nos dados existentes para gerar dados modificados sinteticamente. Ao realizar o aumento, você pode impedir que sua rede neural aprenda padrões irrelevantes e aumentar seu desempenho geral. Algumas técnicas populares de aumento para dados de imagens incluem virar as imagens horizontalmente e verticalmente, girar as imagens em alguns graus, dimensionar as imagens para fora ou para dentro em algumas proporções, cortar as imagens originais, traduzir as imagens ao longo de algumas direções e adicionar ruído gaussiano suas imagens. Este artigo da NanoNets fornece uma revisão detalhada sobre várias dessas abordagens, bem como outras mais avançadas, como modelos generativos.


Lidar com anotação de dados

Como você viu a importância do aumento de dados, um componente frequentemente esquecido na construção de uma pilha de dados forte é o processo pelo qual os dados são anotados, que precisa ser robusto para esse propósito. Anotação é o processo de adicionar informações contextuais ou rótulos a imagens, que servem como exemplos de treinamento para algoritmos aprenderem a identificar vários recursos automaticamente. Dependendo do seu conjunto de dados, as anotações podem ser geradas internamente ou terceirizadas para provedores de serviços terceirizados.

Você pode experimentar plataformas de terceiros que oferecem serviços de anotação de imagens. Tudo o que você precisa fazer é fornecer a eles uma descrição do tipo de dados e anotações de que você precisa. Algumas das plataformas mais conhecidas são Legião, Figura Oito e Escala. Suas soluções ajudam diferentes setores, como veículos autônomos, drones, robótica, AR / VR, varejo, etc., a lidar com várias tarefas de rotulagem e anotação de dados.

A seção anterior revela alguns serviços de anotação de imagem de terceiros, então, aqui, examinarei as práticas recomendadas para fazer anotações internas, também conhecido como construir sua infraestrutura de anotação:

  • É importante investir em treinamento formal e padronizado e educação para ajudar a impulsionar a qualidade e consistência em diferentes conjuntos de dados e anotadores. Pular esta etapa pode levar à ambigüidade e, como resultado, muitos dados que precisam ser re-anotados posteriormente, especialmente para dados que requerem um tipo específico de conhecimento ou que têm uma tendência a incluir alguma subjetividade.
  • Também é importante construir um processo de controle de qualidade, que garanta que as saídas das anotações sejam validadas por outras pessoas para gerar dados de melhor qualidade. Este processo é realizado sequencialmente, após o processo de anotação inicial onde os dados são enviados estocasticamente para controle de qualidade.
  • Por último, é fundamental incorporar análises para gerenciar o processo de anotação de uma forma orientada por dados, principalmente devido à sua natureza operacional. Esses dados podem ser usados ​​para gerenciar o processo e medir o desempenho de sua equipe em relação a metas cujos anotadores apresentam desempenho superior ou inferior.

Agora que você construiu uma infraestrutura de anotação, como você permite que os anotadores gerem dados com mais eficiência?

  • Nos estágios iniciais de fazer anotações em seus modelos, geralmente faz sentido usar abordagens mais tradicionais (técnicas clássicas de visão computacional) para servir de base para suas anotações. Essas abordagens podem reduzir significativamente o tempo de anotação e melhorar o desempenho geral.
  • A interface do usuário de anotação é muito importante. Uma interface simples e bem pensada ajuda muito a gerar anotações consistentes e de alta qualidade de seus usuários.
  • Por fim, gerar dados sintéticos também pode ajudar a maximizar a saída de uma única anotação, pois formaria uma anotação para cada conjunto de dados gerado correspondente.

No geral, a capacidade de gerar conjuntos de dados limpos e anotados em escala de maneira eficiente é um fator de valor fundamental para o seu negócio.


Reúna a equipe

As equipes de aprendizagem profunda de hoje consistem em pessoas com diferentes conjuntos de habilidades. Existem várias funções diferentes necessárias quando você começa a criar soluções de aprendizado profundo em nível de produção. A implementação do aprendizado de máquina requer uma coordenação muito complexa entre várias equipes e só pode ser realizada pelos melhores gerentes de produto. Aqui estão os vários indivíduos / equipes necessários para colocar o ML nas mãos dos usuários:

  1. Cientista de dados que explora e tenta entender as correlações nos dados coletados. Essa pessoa entende bem como as estatísticas e o aprendizado profundo funcionam enquanto mantém um corte de programação decente.
  2. Engenheiro de Aprendizado Profundo que transforma modelos de aprendizado profundo criados pelo cientista de dados para produção. Essa pessoa se destaca na escrita de código sustentável e tem um bom entendimento de como funciona o aprendizado profundo.
  3. Engenheiro de Dados quem se encarrega de coletar os dados e disponibilizá-los para o restante da equipe. Essa pessoa sabe como planejar pipelines de dados sustentáveis ​​e gerencia como os dados são testados.
  4. Anotador de Dados que rotulam e anotam os dados de treinamento.
  5. Designer quem projeta a experiência e a interação do usuário.
  6. Engenheiro Garantia de Qualidade quem testa os algoritmos e verifica os casos de falha. Essa pessoa deve ter boas práticas de desenvolvimento orientado a testes.
  7. Gerente de Operações que integra a aprendizagem profunda ao processo de negócios. Essa pessoa entende quais são os processos internos / complexos da organização em que a previsão barata é valiosa, portanto, pode se beneficiar do aprendizado profundo.
  8. Gestores de Distribuição (geralmente do departamento de Vendas / Marketing) que comunicam aos clientes o valor do aprendizado profundo. Essa pessoa deve fornecer conhecimento específico do domínio.

Escrever código pronto para produção

Como muitos cientistas de dados encarregados de criar modelos de aprendizado profundo não
e com experiência em engenharia de software, a qualidade desse código pode variar muito, causando problemas de reprodutibilidade e manutenção posteriormente. Portanto, uma boa prática nesse aspecto é escrever códigos prontos para produção, aqueles que são lidos e executados por muitas outras pessoas, em vez de apenas a pessoa que o escreveu. Em particular, o código pronto para produção deve ser (1) reproduzível, (2) modular e (3) bem documentado. Esses são desafios que o mundo da engenharia de software já enfrentou, então vamos mergulhar em algumas abordagens que podem lhe dar um impacto positivo imediato na qualidade do seu projeto de deep learning.

Para tornar seu código reproduzível, você deve definitivamente controle de versão sua base de código com “git” e tente enviar commits de código frequentemente. É importante criar versões de seus conjuntos de dados em que seus modelos são treinados também, para que você possa acompanhar o desempenho dos modelos, pois varia com os dados com os quais você os treina. Você também deve usar um ambiente virtual como “virtualenv” ou “conda”, que obtém um arquivo de configuração que contém uma lista dos pacotes usados ​​no código. Você pode distribuir esse arquivo para a sua equipe por meio do controle de versão para garantir que seus colegas estejam trabalhando no mesmo ambiente. Por último, você deve use um IDE adequado como PyCharm ou Visual Studio Code durante a programação, em vez de Notebooks Jupyter. Notebooks são ótimos para prototipagem inicial, mas não são bons para um fluxo de trabalho reproduzível.

Para tornar seu código modular, você precisa ter um estrutura de pipeline que lida com fluxos de trabalho de modelagem e engenharia de dados. Algumas boas escolhas são Louis e Fluxo de ar Apache, que permite construir o fluxo de trabalho como uma série de nós em um gráfico e oferece gerenciamento de dependência e execução de fluxo de trabalho. Você gostaria de escrever testes de unidade para sua base de código para garantir que tudo se comporte conforme o esperado, o que é importante no aprendizado profundo, pois você está lidando com algoritmos de caixa preta. Finalmente, você deve considerar adicionar integração contínua ao seu repo, que pode ser usado para executar seus testes de unidade ou pipeline após cada confirmação ou mesclagem, garantindo que nenhuma alteração na base de código o interrompa.

Para manter seu código bem documentado, você deve organizá-lo em um estrutura padrão para tornar mais fácil para seus colegas entenderem sua base de código. O modelo de Cortador de biscoito é meu favorito. Então você deve escolher um convenção de estilo de codificação (Tal como PEP8) e aplicá-lo com um linter pre-commit (como sim) Se você não quiser escrever a documentação sozinho, use Esfinge para criar documentos para seu projeto.


Acompanhar experimentos de modelo

A maioria das empresas hoje é capaz de armazenar sistematicamente apenas a versão do código, geralmente por meio de um sistema de controle de versão como o Git. Para cada experimento de aprendizado profundo, sua organização deve ter uma abordagem sistemática para armazenar o seguinte:

  • Código de treinamento: Você pode simplesmente usar um controle de versão de desenvolvimento de software regular, como Git, para armazenar a versão exata do código usado para executar um experimento específico.
  • Parâmetros do modelo: Armazenar parâmetros e ser capaz de ver seus valores para um modelo específico ao longo do tempo ajudará você a obter insights e intuição sobre como o espaço de parâmetro afeta seu modelo. Isso é muito importante para o crescimento de sua equipe, pois os novos funcionários poderão ver como um determinado modelo foi treinado no passado.
  • Conjuntos de dados: O controle de versão e o armazenamento dos conjuntos de dados são muito importantes para fins de reprodutibilidade e conformidade. À medida que a explicabilidade se torna cada vez mais difícil ao lidar com o aprendizado profundo, uma boa maneira de começar a entender os modelos é examinar os dados de treinamento. Um bom controle de versão do conjunto de dados o ajudará a enfrentar as leis de privacidade, como o GDPR, ou possíveis consultas legais futuras, como tendências de modelo.
  • Hardware: Se você usa um hardware de nuvem mais poderoso, é importante obter uma visibilidade fácil das estatísticas de uso de hardware. Deve ser fácil ver o uso da GPU e o uso da memória das máquinas sem ter que executar verificações e monitoramento manualmente. Isso otimizará o uso de máquinas e ajudará a depurar gargalos.
  • Meio Ambiente: O gerenciamento de pacotes é difícil, mas totalmente obrigatório para tornar o código fácil de executar. Ferramentas baseadas em contêiner, como Docker, permitem que você acelere rapidamente a colaboração em projetos.
  • Custo: O custo dos experimentos é importante na avaliação e orçamento do desenvolvimento de aprendizado de máquina.
  • O modelo: O controle de versão do modelo significa uma boa maneira de armazenar as saídas do seu código.
  • Registros: Os registros de tempo de execução de treinamento são essenciais para depurar casos de uso, mas também podem fornecer informações importantes sobre como controlar suas principais métricas, como precisão ou velocidade de treinamento e tempo estimado para conclusão.
  • Resultados: Deve ser trivial ver o desempenho e os principais resultados de qualquer experimento de treinamento que você tenha executado.

Por sistemático, quero dizer uma abordagem em que você é realmente capaz de pegar um modelo em produção e olhar para a versão do código usada para chegar a esse modelo. Isso deve ser feito para cada experimento, independentemente de estarem em produção ou não.


Infraestrutura local x nuvem

Na nuvem a infraestrutura inclui o provedor tradicional, como AWS, GCP, Microsoft Azure; bem como provedor específico de ML, como Paperspace e FloydHub. On-Premise a infraestrutura inclui servidores de aprendizagem profunda pré-construídos, como estações de trabalho Nvidia e Lambda Labs; bem como estações de trabalho de aprendizagem profunda criadas do zero (verifique recursos como isto e isto).

  • Os principais benefícios de escolher a opção de nuvem incluem uma barreira financeira baixa para a entrada, suporte disponível dos provedores e a capacidade de escalar junto com o cluster de computação de diferentes tamanhos.
  • Por outro lado, investir em sistemas locais permite iterar e tentar diferentes experimentos por tanto tempo e quantos projetos o hardware puder suportar, sem considerar o custo.

Em última análise, a escolha entre essas duas opções realmente depende do caso de uso em questão e do tipo de dados envolvidos. Provavelmente, sua organização precisará passar de um ambiente para outro em diferentes pontos do fluxo de trabalho do projeto, desde o experimento inicial até a implantação em grande escala.

Quando você está apenas começando, um provedor de nuvem, especialmente um específico de ML, faz sentido. Com pouco investimento inicial, tanto em dinheiro quanto em tempo, você pode obter seu primeiro treinamento de modelo em uma GPU. No entanto, conforme sua equipe cresce e seu número de modelos aumenta, a economia de custos de ir para o local pode chegar a quase 10 vezes nas grandes nuvens públicas. Adicione a isso a maior flexibilidade no que você pode construir e melhor segurança de dados, é claro que no local
As soluções ise são a escolha certa para fazer seu aprendizado profundo em escala.


Habilitar treinamento distribuído

Uma das principais razões para o aumento repentino na popularidade do aprendizado profundo tem a ver com o enorme poder computacional. O aprendizado profundo requer o treinamento de redes neurais com um grande número de parâmetros em uma grande quantidade de dados. Computação distribuída, portanto, é uma ferramenta perfeita para aproveitar ao máximo as vantagens do hardware moderno. Se você não está familiarizado com computação distribuída, é uma forma de programar software que usa vários componentes distintos conectados em uma rede.

O treinamento distribuído de redes neurais pode ser abordado de 2 maneiras: (1) paralelismo de dados e (2) paralelismo de modelo.

  • Paralelismo de dados tenta dividir o conjunto de dados igualmente nos nós do sistema, onde cada nó tem uma cópia da rede neural junto com seus pesos locais. Cada nó opera em um subconjunto exclusivo do conjunto de dados e atualiza seu conjunto local de pesos. Esses pesos locais são compartilhados por todo o cluster para calcular um novo conjunto global de pesos por meio de um algoritmo de acumulação. Esses pesos globais são então distribuídos para todos os nós e o processamento do próximo lote de dados vem a seguir.
  • Paralelismo de modelo tenta distribuir o treinamento dividindo a arquitetura do modelo em nós separados. É aplicável quando a arquitetura do modelo é muito grande para caber em uma única máquina e o modelo possui algumas peças que podem ser paralelizadas. Geralmente, a maioria das redes pode caber em 2 GPUs, o que limita a quantidade de escalabilidade que pode ser alcançada.

Praticamente, o paralelismo de dados é mais popular e frequentemente empregado em grandes organizações para a execução de algoritmos de aprendizado profundo em nível de produção. Abaixo estão alguns bons frameworks que permitem fazer paralelismo de dados em escala:

  • MXNet - Um aprendizado profundo distribuído leve, portátil e flexível para Python, R, Julia, Go, Javascript e muito mais.
  • aprendizagem profunda4j - Uma plataforma de aprendizagem profunda distribuída para Java, Clojure, Scala.
  • Kit de ferramentas de aprendizado de máquina distribuído (DMTK) - Uma estrutura de aprendizado de máquina distribuída (criada pela Microsoft) que permite fazer modelagem de tópicos, incorporação de palavras e árvore de aumento de gradiente.
  • Elefas - Uma extensão do Keras, que permite executar modelos de aprendizado profundo distribuídos em escala com o Spark.
  • Horovod - Uma estrutura de treinamento distribuída para TensorFlow (criada por Uber).

Implante modelos em estado selvagem

Projetos de aprendizado profundo não devem acontecer no vácuo; portanto, é fundamental integrar realmente o modelo às operações da empresa. Voltando à seção 1, o objetivo de um projeto de aprendizado profundo é, afinal, fornecer insights de negócios. Isso significa que o modelo precisará entrar em produção e não ficar preso em uma fase de prototipagem ou sandbox.

Um dos maiores desafios subestimados no desenvolvimento de aprendizado de máquina é a implantação de modelos treinados em produção também de forma escalonável. Uma das melhores ferramentas que podem resolver esse problema é Estivador, uma plataforma de conteinerização que empacota um aplicativo e todas as suas dependências em um contêiner. O Docker é usado quando você tem muitos serviços que funcionam de maneira isolada e servem como um provedor de dados para um aplicativo da web. Dependendo da carga, as instâncias podem ser desmembradas sob demanda com base nas regras configuradas.

Motor Kubernetes é outro ótimo lugar para executar suas cargas de trabalho em escala. Antes de poder usar o Kubernetes, você precisa colocar seus aplicativos em contêineres. Você pode executar a maioria dos aplicativos em um contêiner do Docker sem muitos problemas. No entanto, executar efetivamente esses contêineres na produção e otimizar o processo de construção é outra história. Abaixo estão as práticas sólidas, de acordo com o Google Cloud, para ajudá-lo a construir contêineres de maneira eficaz:

  • Empacote um único aplicativo por contêiner: É mais difícil depurar quando há mais de um aplicativo em execução dentro de um contêiner.
  • Otimize para o cache de compilação do Docker: Docker pode armazenar camadas de suas imagens para acelerar compilações posteriores. Este é um recurso muito útil, mas apresenta alguns comportamentos que você precisa levar em consideração ao escrever seus Dockerfiles. Por exemplo, você deve adicionar o código-fonte de seu aplicativo o mais tarde possível em seu Dockerfile para que a imagem base e as dependências de seu aplicativo sejam armazenadas em cache e não sejam reconstruídas em cada construção.
  • Remova ferramentas desnecessárias: Isso ajuda a reduzir a superfície de conexão do sistema host.
  • Construa a menor imagem possível: Isso diminui os tempos de download, de inicialização a frio e o uso do disco. Você pode usar várias estratégias para conseguir isso: comece com uma imagem de base mínima, aproveite camadas comuns entre as imagens e use o recurso de construção de vários estágios do Docker.
  • Considere se deve usar uma imagem pública: Usar imagens públicas pode ser uma ótima maneira de começar a trabalhar com um software específico. No entanto, usá-los na produção pode representar uma série de desafios, especialmente em um ambiente de alta restrição. Você pode precisar controlar o que está dentro deles ou pode não querer depender de um repositório externo, por exemplo. Por outro lado, construir suas próprias imagens para cada software que você usa não é trivial, principalmente porque você precisa se manter atualizado com as atualizações de segurança do software upstream. Pese cuidadosamente os prós e os contras de cada um para seu caso de uso específico e tome uma decisão consciente.

De modo geral, os contêineres são ótimos para usar para garantir que suas análises e modelos sejam reproduzíveis em diferentes ambientes. Embora os contêineres sejam úteis para manter as dependências limpas em uma única máquina, o principal benefício é que eles permitem que os cientistas de dados escrevam terminais de modelo sem se preocupar com como o contêiner será hospedado. Essa separação de interesses torna mais fácil fazer parceria com equipes de engenharia para implantar modelos na produção. Além disso, usando Docker e / ou Kubernetes, os cientistas de dados também podem ser proprietários da implantação de modelos para produção.


É claro que existe uma maneira melhor, muito mais simples e mais intuitiva de realizar tarefas de OCR.


Aprendizado Profundo com Nanonets

A API de nanonets permite que você crie modelos de OCR com facilidade.

Você pode fazer upload de seus dados, anotá-los, definir o modelo para treinar e esperar obter previsões por meio de uma interface do usuário baseada em navegador sem escrever uma única linha de código, se preocupar com GPUs ou encontrar as arquiteturas certas para seus modelos de aprendizado profundo. Você também pode adquirir as respostas JSON de cada previsão para integrá-la aos seus próprios sistemas e criar aplicativos baseados em aprendizado de máquina baseados em algoritmos de última geração e
uma forte infraestrutura.

Usando a GUI: https://app.nanonets.com/

Veja como você também pode usar o API Nanonets OCR seguindo as etapas abaixo:

Etapa 1: Clonar o repositório, instalar dependências

git clone https://github.com/NanoNets/nanonets-ocr-sample-python.git
cd nanonets-ocr-sample-python
sudo pip install requests tqdm

Etapa 2: Obtenha sua chave de API gratuita
Obtenha sua chave de API gratuita em http://app.nanonets.com/#/keys

GIF de detecção de matrícula

Etapa 3: defina a chave da API como uma variável de ambiente

export NANONETS_API_KEY=YOUR_API_KEY_GOES_HERE

Etapa 4: crie um novo modelo

python ./code/create-model.py

Observação: Isso gera um MODEL_ID necessário para a próxima etapa

Etapa 5: adicionar ID do modelo como variável de ambiente

export NANONETS_MODEL_ID=YOUR_MODEL_ID

Observação: você receberá YOUR_MODEL_ID da etapa anterior

Etapa 6: fazer upload dos dados de treinamento
Os dados do treinamento são encontrados em images (arquivos de imagem) e annotations (anotações para os arquivos de imagem)

python ./code/upload-training.py

Etapa 7: modelo de trem
Assim que as imagens forem carregadas, comece a treinar o modelo

python ./code/train-model.py

Etapa 8: obter o estado do modelo
O modelo leva cerca de 2 horas para treinar. Você receberá um e-mail assim que o modelo for treinado. Enquanto isso, você verifica o estado do modelo

python ./code/model-state.py

Etapa 9: faça a previsão
Uma vez que o modelo é treinado. Você pode fazer previsões usando o modelo

python ./code/prediction.py ./images/151.jpg


Nanonetas e humanos no loop

‌‌A tela 'Moderada' auxilia nos processos de correção e entrada e reduz a carga de trabalho do revisor manual em quase 90% e reduz os custos em 50% para a organização.

As características incluem

  1. Rastreie as previsões corretas
  2. Rastreie quais estão errados
  3. Faça correções para as imprecisas
  4. Exclua os que estão errados
  5. Preencha as previsões ausentes
  6. Filtrar imagens com intervalos de datas
  7. Obtenha contagens de imagens moderadas em comparação com as não moderadas

Todos os campos estão estruturados em uma GUI de fácil manuseio que permite ao usuário aproveitar as vantagens da tecnologia OCR e auxiliá-la no aprimoramento à medida que avança, sem ter que digitar nenhum código ou entender como a tecnologia funciona.


Conclusão

Ao esquecer qualquer uma dessas 10 práticas, você corre o risco de frustrar as partes interessadas envolvidas por uma perspectiva negativa do projeto de aprendizado profundo em ação. Além disso, você também pode arriscar avaliar os resultados de um esforço incompleto que estava fadado ao fracasso desde o início, desperdiçando muito tempo e dinheiro. Aderir a essas práticas permitirá que sua organização mova rapidamente uma prova de conceito de aprendizado profundo para a produção e economize mais tempo e dinheiro.

Fonte: https://nanonets.com/blog/10-best-practices-deep-learning/

local_img

Inteligência mais recente

Café VC

Café VC

local_img