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
Taxa de aprendizado (LR) muito alta;
Taxa de aprendizado muito baixa;
Número de iterações (epochs) muito alto;
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
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)