Aula 25 – Tensor Flow – Keras – Conjunto de dados CIFAR-10 – VGG 2
Aula 25 – Tensor Flow – Keras – Conjunto de dados CIFAR-10 – VGG 2
Voltar para página principal do blog
Todas as aulas desse curso
Aula 24 Aula 26 (Ainda não disponível)
Meu github:
https://github.com/toticavalcanti
Documentação oficial do TensorFlow:
https://www.tensorflow.org/
Quer aprender python3 de graça e com certificado? Acesse então:
https://workover.com.br/python-codigo-fluente
Se gostarem do conteúdo dêem um joinha 👍 na página do Código Fluente no
Facebook
https://digitalinnovation.one/
Aproveito para deixar meus link de afiliados:
Hostinger
Digital Ocean
One.com
Toti:
https://www.youtube.com/channel/UCUEtjLuDpcOvR3mIUr-viOA
Backing track / Play-along:
https://www.youtube.com/channel/UCT3TryVMqTqYBjf5g5WAHfA
Código Fluente
https://www.youtube.com/channel/UCgn-O-88XBAwdG9gUWkkb0w
Putz!
https://www.youtube.com/channel/UCZXop2-CECwyFYmHbhnAkAw
Fiquem a vontade para me adicionar ao linkedin.
Notebook da aula
Aula 25 – Tensor Flow – Keras – Conjunto de dados CIFAR-10 – VGG 2
CIFAR-10
Nessa aula usaremos a arquitetura VGG 2.
Existem outras arquiteturas conhecidas de redes convolucionais:
- AlexNet – que foi a primeira arquitetura de rede neural convolucional em grande escala que se saiu bem na classificação ImageNet – 2012.
- ResNet – Um dos problemas que os ResNets resolvem é o famoso gradiente de desaparecimento.
- Inception
- DenseNet
- VGG – explora um aspecto muito importante das CNNs: a profundidade.
Na camada de entrada a VGG obtém uma imagem RGB.
As camadas convolucionais na VGG usam um campo receptivo muito pequeno, 3×3, o menor tamanho possível que ainda captura esquerda / direita e cima / baixo.
No primeiro bloco
model.add(Conv2D(32, (3, 3), activation='relu', kernel_initializer='he_uniform', padding='same', input_shape=(32, 32, 3)))
model.add(Conv2D(32, (3, 3), activation='relu', kernel_initializer='he_uniform', padding='same'))
E no segundo bloco
model.add(Conv2D(64, (3, 3), activation='relu', kernel_initializer='he_uniform', padding='same'))
model.add(Conv2D(64, (3, 3), activation='relu', kernel_initializer='he_uniform', padding='same'))
A camada de pooling serve para simplificar a informação da camada anterior.
model.add(MaxPooling2D((2, 2)))
Assim como na convolução, no pooling, é escolhida uma unidade de área, por exemplo 2×2, para transitar por toda a saída da camada anterior.
A unidade de área é responsável por resumir a informação dessa área de 2×2 em um único valor.
Se a saída da camada anterior for 24×24, a saída do pooling será 12×12.
O método mais utilizado é o maxpooling e é exatamente ele que estamos usando no exemplo.
Fully connected
No final da rede temos uma camada totalmente conectada, onde sua entrada é a saída da camada anterior e sua saída são N neurônios, com N sendo a quantidade de classes que o modelo precisa classificar.
model.add(Dense(128, activation='relu', kernel_initializer='he_uniform'))
model.add(Dense(10, activation=tf.nn.softmax, name='logits'))
A saída da softmax são as probabilidades para a tarefa de classificação, e a sua entrada é a camada logits.
A camada logits normalmente produz valores de -infinity a + infinito e a camada softmax os transforma em valores entre 0 e 1.