Se quiser copiar o código do PIX:

00020126580014BR.GOV.BCB.PIX013643c5f950-535b-4658-b91f-1f1d135fe4105204000053039865802BR5925Antonio Cavalcante de Pau6009SAO PAULO61080540900062070503***6304946B

Aula 28 - Tensor Flow - Keras - Conjunto de dados CIFAR-10 - VGG 3 - Weight Decay

CIFAR-10

Melhorando o Modelo

Na aula passada usamos a técnica de regularização chamada Dropout. O Dropout não depende da modificação da função de custo ou perda. Já o Weight Decay ou Redução de Peso, que é a técnica que vamos explorar nessa aula, precisa da atualização da função de perda para penalizar o modelo em proporção ao tamanho dos pesos do modelo. Assim como o Dropout, o Weight Decay ou Redução de Peso, é um tipo de regularização usado para controlar overfitting do modelo.

Origem do Weight Decay

Classificação de imagens é um trabalho complexo para uma máquina, e em geral, dados do mundo real são bem complexos, com muitas variáveis envolvidas, e para resolver problemas complexos, precisamos de soluções complexas. Ter menos parâmetros ou variáveis é apenas uma maneira de evitar que o modelo fique excessivamente complexo, mas, na verdade, é uma estratégia muito limitadora, porque não podemos perder informações importantes. Mais parâmetros significam mais interações entre várias partes de nossa rede neural e mais interações significam mais não linearidades. Essas não linearidades nos ajudam a resolver problemas complexos. No entanto, não queremos que essas interações saiam do controle. Então, se penalizarmos a complexidade, ainda usaremos muitos parâmetros, mas, evitaremos que nosso modelo se torne muito complexo. Foi assim que surgiu a ideia da Redução de Peso. Já testamos 100 épocas com Dropout, agora vamos testar 100 épocas com Weight Decay, e na próxima vamos usar a técnica de regularização Data Augmentation, e vamos comparar as 3 técnicas, para ver qual delas deu mais certo.

Definição do modelo

Veja que tiramos os Dropouts() Eles estão comentados, mas, pode tirar ele, deixei só como referência. O que tá em azul, é a parte que estamos mudando nessa aula.

# define cnn model
def define_model():
	model = Sequential()
 
	#bloco 1
	model.add(Conv2D(32, (3, 3), activation='relu', kernel_initializer='he_uniform', padding='same', kernel_regularizer=l2(0.001), input_shape=(32, 32, 3)))
	model.add(Conv2D(32, (3, 3), activation='relu', kernel_initializer='he_uniform', padding='same', kernel_regularizer=l2(0.001)))
	model.add(MaxPooling2D((2, 2)))
	#model.add(Dropout(0.2))
 
	#bloco 2
	model.add(Conv2D(64, (3, 3), activation='relu', kernel_initializer='he_uniform', padding='same', kernel_regularizer=l2(0.001)))
	model.add(Conv2D(64, (3, 3), activation='relu', kernel_initializer='he_uniform', padding='same', kernel_regularizer=l2(0.001)))
	model.add(MaxPooling2D((2, 2)))
	#model.add(Dropout(0.2))
 
  #bloco 3
	model.add(Conv2D(128, (3, 3), activation='relu', kernel_initializer='he_uniform', padding='same', kernel_regularizer=l2(0.001)))
	model.add(Conv2D(128, (3, 3), activation='relu', kernel_initializer='he_uniform', padding='same', kernel_regularizer=l2(0.001)))
	model.add(MaxPooling2D((2, 2)))
	#model.add(Dropout(0.2))
 
	model.add(Flatten())
	model.add(Dense(128, activation='relu', kernel_initializer='he_uniform', kernel_regularizer=l2(0.001)))
	#model.add(Dropout(0.2))
	model.add(Dense(10, activation=tf.nn.softmax, name='logits'))
	return model 

Agora acesse o notebook para rodar o código:

Notebook da aula

Anaconda

O código dessa aula, eu rodei o código usando meu processamento local, já que o colab impõe limites de processamento e tempo em seu plano free. Para isso, usei o jupyter notebook do Anaconda, criei um ambiente chamado tensorflow, instalei tudo que precisamos nele: o jupyter, o CMD.exe, o matplotlib, o tensorflow, o tensorboard...

Antes de executar o notebook localmente

Antes de rodar o notebook localmente, no painel do anaconda: Abra o prompt no ambiente que você criou, no meu caso, o ambiente tensorflow, e rode na pasta do notebook o seguinte comando:

tensorboard --logdir logs --port 6006
O comando acima cria a pasta logs na pasta do notebook, e é onde serão colocados os dados gerados durante o treinamento da rede, dados relativos a como a rede evoluiu durante o treinamento, baseado nas precisões nos dados de treino e validação. É onde o tensorboard vai ler os dados para plotar os gráficos, e também definimos a porta como 6006. Antes de rodar o treinamento da rede, exclua a pasta de log que tá na mesma pasta do notebook, pra ter certeza que a pasta será criada do zero, limpinha, sem nenhum vestígio de algum log anterior.

Por essa aula é só, na próxima, vamos explorar a técnica de regularização conhecida como Aumento de dados (Data Augmentation).

Meu github:

https://github.com/toticavalcanti

Se gostarem do conteúdo dêem um joinha 👍 na página do Código Fluente no Facebook

Link do código fluente no Pinterest

Novamente deixo meus link de afiliados:

Hostinger

Digital Ocean

One.com

Obrigado, até a próxima e bons estudos. ;)