Solucionado (ver solução)
Solucionado
(ver solução)
7
respostas

Deep Learning Keras

Eu nao entendi muito bem algumas coisas do curso. Por exemplo: Afinal que rede neural utilizamos para treinar o modelo ? Usamos tecnologia como tensorflow e keras, mas que algoritmo utilizamos ? No curso de machine learning foi o MultinominalNB e outros e aqui ?

7 respostas

Oi Bruno,

a rede que usamos foi uma de 3 camadas com Flatten, Dense, Dropout e Dense novamente.

Ela não tem nenhum nome específico, é uma rede neural com 3 camadas. Nós não escolhemos alguma mais "famosa", pois elas tendem a ser mais complexas e estamos fazendo uma intro mão na massa ao tema.

Os algoritmos que usamos foram Softmax, AdamOptimizer e Entropia categórica cruzada esparsa ou Sparse Categorical Cross-entropy. O primeiro para calcular as saídas, o segundo para melhorar os resultados e o terceiro para diminuir a perda.

Nós fizemos a analogia com o curso de Machine Learning para dar uma idéia geral e conectar os cursos da mesma área, mas repare que ao falarmos de redes neurais profundas ou aprendizado profundo, o jeito de fazer as coisas fica um pouco diferente, principalmente nos pontos que citou.

Uma coisa importante é que o que abordamos não precisa se encaixar ou ter uma relação direta com o que está no curso de Machine Learning, inclusive com os termos. Um algoritmo usado no curso de Machine Learning pode não ter o mesmo papel de um algoritmo usado no curso de Deep Learning, ainda assim as duas coisas são chamadas de algoritmos. Quanto a isso, você não precisa ficar preocupado ou questionar o seu conhecimento.

O que eu sugiro é focar em saber chegar do outro lado com o resultado, entender o papel de cada camada, ter uma idéia geral dos passos e como as coisas funcionam. Se você conseguiu ir acompanhando o curso, rodando os códigos e sabendo onde mexer e interpretar as diferenças nos resultados, valeu. :)

Eu espero ter dado uma esclarecida, se tiver mais alguma outra dúvida, só postar aqui no fórum.

Percebi, mas pode-me ajudar em uma duvida ?

Data Augmentation. Tenho poucos dados de imagens realistas e preciso de gerar mais dados sinteticos para treinar o modelo.

Perguntas ?

Para fazer isso acho que tem de ser com as GANs. Certo ? Como poderia fazer isso ? Que tecnicas existem para isso ?

Pode me ajudar ?

Obrigado

Qual a diferença entre uma CNN e uma GAN ?

Obrigado

Oi Bruno,

posso, claro ^^.

Há diversas técnicas para fazer o aumento de um conjunto de dados (data augmentation). Eu sugiro que você selecione a técnica que for melhor de acordo com o problema que for resolver e com o conteúdo do seu conjunto de dados.

Vamos supor que você esteja classificando imagens de carros, e como tem poucas imagens de exemplo, a rede acaba conhecendo os mesmos 5 modelos diferentes de carros nas mesmas posições. O que acontece quando ela vê um carro de um modelo conhecido em outra posição? Ela fica confusa. Assim como o nosso cérebro quando sempre vimos algo de um jeito e, de repente, vemos de outro.

Então, o que podemos fazer para aumentar os dados é usar imagens, por exemplo, em ângulos diferentes e aumentar o grau de dificuldade para a rede. Podemos pegar as imagens que já temos, modificar seus ângulos e adicioná-las nesse conjunto de dados como se fossem imagens novas.

Essa é uma técnica, rotacionar a imagem.

Mas, por exemplo, e se você rotaciona o carro e ele fica de ponta cabeça, será que é válido? Caso você esteja resolvendo um problema de batidas de carros (no qual teremos muitos carros de ponta cabeça), é válido sim. Mas caso você esteja tentando reconhecer carros em lojas de vendas, aí já não encaixa tanto, seria melhor não rotacionar, ou rotacionar pouco a imagem.

E como você pode fazer isso? Com alguma biblioteca para manipular imagens.

Com python, você pode usar Pillow, OpenCv, inclusive os módulos de imagem no scikit-learn como Scikit-image. Além disso, você pode fazer alguns tipos de manipulação de imagens no Tensorflow com tf.image.

E dá pra fazer mais do que rotacionar, também há outras técnicas como cortar a imagem, incluir um filtro na imagem (como o filtro Gaussiano), re-escalar a imagem alterando as suas proporções, transladar o conteúdo da imagem, refletir a imagem, seja na vertical ou horizontal. Você também pode alterar sua luminosidade. Vai depender dos exemplos que tem e do problema para saber qual faz sentido.

solução!

Agora, sobre as redes geradoras adversárias ou GANs. As GANs são uma técnica mais avançada. Nesse caso, é como se precisássemos gerar dinheiro, uma delas fosse um criminoso e outra um policial.

Primeiro o criminoso começa a gerar o que ele acha que é dinheiro e é totalmente falso, mas para o policial está ok, porque ele nunca viu dinheiro antes. Mas aí o departamento começa a ensinar para o policial como o dinheiro é, de modo que ele vai aprender a distinguir o que é dinheiro verdadeiro do falso. Ainda assim, o policial é desligado e ele vai deixando o criminoso gerar mais dinheiro falso. Vai deixando tanto que o criminoso se aprimora tanto em gerar dinheiro que fica difícil para o policial saber qual dinheiro é falso e qual é real.

Nesse caso, o policial é o descriminador numa GAN e o criminoso o gerador. Ou seja, você terá uma rede discriminadora que irá receber imagens geradas por outra rede e imagens reais, você vai "rodar" o aprendizado até ficar difícil de distinguir as duas.

Montar essa estrutura exige mais gasto computacional, maior processamento, e eu sugiro usar caso não esteja suprindo as necessidades da classificação com as técnicas mais simples acima.

Seria melhor se com as alterações nas imagens já desse para resolver. Caso não dê, pode ser necessário usar uma GAN, mas também há outras alternativas mais complexas que as alterações de imagens, só que não tão complexas quanto as GANs que são os codificadores automáticos ou autoencoders.

Os autoencoders pegam uma imagem e tentam reproduzi-la da maneira mais fiel possível, nisso, ela sai um pouco diferente e você pode usá-la para aumentar seus dados. Elas fazem isso tendo uma camada de codificação, uma camada oculta, e outra de decodificação, mas diferente do que fazemos no curso, a camada oculta tem menos unidades do que as necessárias para processar as imagens, o que faz com que ela extraia algumas características e deixe outras de lado, modificando a imagem.

Algumas pessoas acham que os autoencoders deixaram a desejar, modificando pouco as imagens, então há também os autoencoders de variabilidade ou VAEs, que são como os autoencoders, mas na sua camada oculta mudam como vão processar as informações das imagens usando algum tipo de distribuição da probabilidade como a distribuição normal. Essa distribuição acontecerá dentro de cada nó e depois quando chegar na saída da rede, a saída tentará formar uma imagem similar ao que recebeu.

Você pode encontrar estruturas de autoencoders já prontas no github, ou pode montá-las, tem tutoriais pela rede.

E sobre a CNN ou rede neural de convolução, ela vai pegar pedaços da imagem, alterar seus valores e reconstituir a imagem, mas para extrair suas características e reconhecer essas características ao invés de gerar novas imagens. Como as CNN geralmente são boas em reconhecer imagens de ângulos, tamanho e luminosidade diferentes, não importando o quanto a imagem varia, então tendo invariância. Muitas vezes elas são usadas como parte de uma GAN.

Eu espero ter esclarecido, qualquer coisa, só continuar postando.

Perfeita Explicação. Parabéns.

Seria muito interessante ter um curso abordar essa parte de GANs. :)

Acho que muita gente por aqui compra. Europa

Ah, muito obrigada, Bruno!

Sim, acho que mais lá pra frente a gente consegue sim! Eu já passei pro pessoal a sua sugestão.

Abraços!