====== Dicas Deep Learning ====== Estou estudando Deep Learning (IA) no fast.ai e guardo aqui minhas anotações. **Referências externas:** * [[https://course.fast.ai/|Curso Fast AI]] * Reforço matemática: * [[https://pt.khanacademy.org|Khan Academy]] * [[https://machinelearningmastery.com/computational-linear-algebra-coders-review/|Curso de álgebra linear computacional]] ===== 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 ==== * 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: {{:ti_publica:equcacao_linear_matricial.gif|}}, 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)''