Ferramentas do usuário

Ferramentas do site


ti_publica:notas_deep_learning

Dicas Deep Learning

Estou estudando Deep Learning (IA) no fast.ai e guardo aqui minhas anotações.

Referências externas:

Lição 2

O que pode dar errado

  1. Taxa de aprendizado (LR) muito alta;
  2. Taxa de aprendizado muito baixa;
  3. Número de iterações (epochs) muito alto;
  4. Número de iterações muito baixo.

Learning rate padrão = 0.003. Pode ser alterada em max_lr:

learn.fit_one_cycle(1, max_lr=0.5)

Ajustes:

  • Se sua perda na validação (valid_loss) está muito grande, sua LR está alta;
  • Se sua perda no treino é maior que na validação: ou sua taxa de aprendizado (learning rate) está muito baixa ou o número de iterações (epochs);
  • Não aumente tanto o número de epochs, ou seu modelo pode ficar treinado pra reconhecer apenas a sua fotografia e não qualquer fotografia daquele tipo
  • O risco de treinar demais o modelo (e passar a reconhecer só suas fotos) é muito baixo. Isso pode ser percebido se seu erro caiu bem e depois começou a aumentar de novo durante as iterações

Dicas lição 2

  • Não há como definir quanto material é necessário pra um treino, só testando. Se treinar com muitas iterações e o erro começar a piorar sem antes ter chegado onde quer, e se não tiver com um dos quatro problemas mencionados, pode precisar de mais dados.
  • Dados desproporcionais (muito mais dados de uma das classes) também funcionam, teste. Se não funcionar uma ideia é fazer over sampling, copiando os dados que tem pra aumentar.

Álgebra

Equações lineares

  • Notação equação reduzida da reta: y = ax + b
    • a = coeficiente de inclinação da reta (tb chamado 'm'): m = Δy / Δx
    • b = ponto onde a reta corta o eixo y
    • Para operações matriciais é mais conveniente redigir como: y = ax1 + bx2, com x2 = 1 sempre
    • Mais convenientemente ainda pode ser notada assim para um conjunto de dados: , onde a2 era o b e xi,2 = 1 sempre.
  • Notação equação fundamental da reta: y-b = m(x-a)
    • Mais prática pra escrever a partir de m e um ponto (a,b), mas não dá a interceptação do eixo y

pi torch

Criando um vetor

  • x = torch.ones(n,2) inicia um tensor com n linhas e 2 colunas, segunda coluna com '1's (vide álgebra pra facilitar operações matriciais)
  • x[:,0].uniform_(-1.,1) - cria dados randômicos entre -1 e 1 na primeira coluna do vetor:
    • [:] endereça cada valor na dimensão (no caso endereça toda a linha);
    • 0 pega a primeira coluna;
    • uniform vai criar distribuição uniforme randômica;
    • O '_' indica que não vai retornar valor, vai atribuir valor a variável referida.
    • Se não usar um ponto '.' os valores serão inteiros e não pto flutuante. O bom é que basta um ponto em um dos números, dispensando os zeros, mas poderia ser usado (-1.0,1.0)
ti_publica/notas_deep_learning.txt · Última modificação: 2019/10/01 13:08 por cartola