Transfer learning na prática: o peso que já veio

Uma rede vazia precisa de milhares de fotos para aprender o que é uma borda. Uma ResNet que já viu o ImageNet chega com esse ofício pronto. O que muda é a cabeça, o pedaço que diz o rótulo do seu caso.

São cinco notebooks curtos. Cada um abre no Google Colab e roda em CPU. Os quatro primeiros usam um desenho simples, para a conta caber em dois minutos. O quinto abre radiografia de tórax, normal ou pneumonia, com Keras.

São 25 exercícios, e cada um tem um notebook próprio. Você escreve a resposta, roda a célula e o notebook diz na hora se acertou. Ver os 25 exercícios.

for p in base.parameters():
    p.requires_grad = False

base.fc = Linear(512, suas classes)

As aulas

rede = resnet18(weights=IMAGENET)

for p in modelo.parameters():
    p.requires_grad = False

modelo.fc = Linear(512, 2)
AULA 1

O peso que viajou

A ResNet-18 chega sabendo mil classes. A cabeça nova tem duas. O resto fica parado, e a conta mostra quantos pesos ainda podem mudar.

CPU · o peso baixa uma vez · 6 exercícios
Abrir no Colab
layer4.requires_grad = True

Adam([
    {"params": base, "lr": 1e-4},
    {"params": cabeça, "lr": 1e-3},
])
AULA 2

Congelar e soltar

O último bloco da base volta a treinar, com passo curto. A cabeça anda dez vezes mais rápido. A primeira camada continua travada.

CPU · o peso baixa uma vez · 6 exercícios
Abrir no Colab
antes = conv1.weight.clone()

# duas épocas, só a cabeça
opt.step()

base_andou = (conv1 - antes).abs().max()
AULA 3

Poucas fotos

Trinta e duas fotos de círculo e quadrado treinam só a cabeça. A base não anda. O acerto é lido em dezesseis fotos que ficaram de fora.

CPU · cerca de 2 minutos · 6 exercícios
Abrir no Colab
delta = B @ A   # posto 4

acerto_seu = prova(seu)
acerto_longe = prova(cor trocada)
AULA 4

Medir no seu dado

Um par de matrizes finas fica ao lado do peso grande. A prova mede o seu conjunto, e de novo o mesmo desenho com a cor trocada.

CPU · cerca de 2 minutos · 6 exercícios
Abrir no Colab
base = MobileNetV2(
    weights="imagenet",
    include_top=False,
)
base.trainable = False

Dense(2)  # normal ou pneumonia
AULA 5

Pneumonia com Keras

Radiografia de tórax, duas pastas: normal e pneumonia. O MobileNetV2 chega do ImageNet, a base fica parada e a cabeça nova aprende o exame.

CPU · cerca de 3 minutos · 1 exercício
Abrir no Colab

Os 25 exercícios

Cada exercício tem um notebook só dele. Ele prepara o modelo da aula, deixa uma célula para você tentar e mostra uma solução conferida. É só clicar em Abrir no Colab.

01Aula 1 · Pesos · exercício 1

Quantos pesos vieram

Quantos parâmetros a rede pré-treinada tem, antes de trocar a cabeça?

Abrir no Colab
02Aula 1 · Pesos · exercício 2

A cabeça antiga

Quantas classes a cabeça antiga sabia responder? É o out_features da rede.

Abrir no Colab
03Aula 1 · Pesos · exercício 3

O tamanho do vetor

Quantos números a base entrega para a cabeça? É o in_features.

Abrir no Colab
04Aula 1 · Pesos · exercício 4

O que ainda treina

Depois de congelar a base e trocar a cabeça, quantos parâmetros de modelo ainda podem mudar?

Abrir no Colab
05Aula 1 · Pesos · exercício 5

O que ficou parado

Quantos parâmetros de modelo ficaram congelados?

Abrir no Colab
06Aula 1 · Pesos · exercício 6

A primeira camada

O peso modelo.conv1.weight ainda pode mudar? Responda True ou False.

Abrir no Colab
07Aula 2 · Base · exercício 1

A porta de entrada

conv1 é a primeira camada. Ela voltou a treinar? Responda True ou False.

Abrir no Colab
08Aula 2 · Base · exercício 2

O bloco que soltou

Todos os parâmetros de layer4 estão livres para treinar? Responda True ou False.

Abrir no Colab
09Aula 2 · Base · exercício 3

Dois grupos

Quantos grupos de taxa de aprendizado o otimizador tem?

Abrir no Colab
10Aula 2 · Base · exercício 4

O passo da base

Qual é a taxa de aprendizado do primeiro grupo, o da base que soltou?

Abrir no Colab
11Aula 2 · Base · exercício 5

O passo da cabeça

Qual é a taxa de aprendizado do segundo grupo, o da cabeça nova?

Abrir no Colab
12Aula 2 · Base · exercício 6

Pesos do bloco

Quantos parâmetros tem o layer4, livres e parados somados?

Abrir no Colab
13Aula 3 · Fotos · exercício 1

Quantas fotos de treino

Quantas imagens tem o conjunto de treino, y_treino?

Abrir no Colab
14Aula 3 · Fotos · exercício 2

Quantas classes

Quantos rótulos diferentes aparecem em y_treino? Círculo e quadrado são dois.

Abrir no Colab
15Aula 3 · Fotos · exercício 3

Quantas épocas

Quantas épocas o treino deu na cabeça?

Abrir no Colab
16Aula 3 · Fotos · exercício 4

A base não andou

Qual foi a maior mudança, em valor absoluto, no peso conv1 depois do treino? Um número perto de zero quer dizer que a base ficou parada.

Abrir no Colab
17Aula 3 · Fotos · exercício 5

A cabeça andou

Qual foi a maior mudança no peso da cabeça, modelo.fc.weight, comparado com antes_fc?

Abrir no Colab
18Aula 3 · Fotos · exercício 6

Acerto no teste

Qual a fração de acerto em x_teste e y_teste? Use acuracia. O teste não entrou no treino.

Abrir no Colab
19Aula 4 · Medida · exercício 1

O posto do par

Qual é o posto do par pequeno? O posto é a dimensão do meio, a primeira dimensão de A.

Abrir no Colab
20Aula 4 · Medida · exercício 2

Pesos do par

Quantos números treináveis o par A e B tem, somados?

Abrir no Colab
21Aula 4 · Medida · exercício 3

Pesos da matriz cheia

Quantos números tem a matriz W, a que a gente não mexe?

Abrir no Colab
22Aula 4 · Medida · exercício 4

Tamanho da prova

Quantas fotos tem a prova, y_prova? Essa prova não entrou no ajuste da cabeça.

Abrir no Colab
23Aula 4 · Medida · exercício 5

Acerto no seu dado

Qual a fração de acerto da cabeça linear em feats_prova? Use acuracia_linear.

Abrir no Colab
24Aula 4 · Medida · exercício 6

Acerto no dado longe

A mesma cabeça, agora em feats_longe, onde a cor dos desenhos foi trocada. Qual a fração de acerto?

Abrir no Colab
25Aula 5 · Raio-x · exercício 1

Pesos que ainda treinam

A base do MobileNetV2 ficou congelada. Quantos parâmetros de modelo ainda podem mudar? É a cabeça nova, a que separa normal de pneumonia.

Abrir no Colab

Como rodar

  1. Clique em Abrir no Colab e entre com sua conta Google.
  2. Menu Ambiente de execução → Executar tudo. CPU basta. O peso baixa na primeira execução. Na aula 5, a radiografia baixa junto, cerca de 40 MB.
  3. Se o Colab avisar que o notebook não é do Google, confirme em Executar mesmo assim.
  4. Nos exercícios, troque resposta = None pela sua resposta e rode a célula. A solução conferida vem na célula de baixo.
  5. Para guardar suas alterações, use Arquivo → Salvar uma cópia no Drive.