O que iremos discutir?

[Pages:23]5/14/2019

Apresentacao_QCon

Deep Learning com Keras e Tensor Flow

O que iremos discutir?

- Como construir uma CNN usando Keras + Tensorflow - Usando TransferLearning - Alguns desafios encontrados

localhost:8889/nbconvert/html/Apresentacao_QCon.ipynb?download=false

1/23

5/14/2019

Apresentacao_QCon

Por que Tensorflow + Keras?

Continuam sendo as bibliotecas mais usadas e mais pesquisadas para Deep Learning

Fonte () Muito mais simples do que usar Tensorflow puro e mais completo do que o Pytorch.

Convolutional Neural Network

Usadas principalmente para classifica??o de imagens.

Como elas funcionam?

Filtros convolucionais s?o usados para extrair features de imagens.

localhost:8889/nbconvert/html/Apresentacao_QCon.ipynb?download=false

2/23

5/14/2019

Apresentacao_QCon

Nas redes convolucionais esses filtros s?o aplicados em v?rias camadas:

Os valores dos filtros s?o aprendidos, portanto a pr?pria rede aprende quais caracter?sticas s?o relevantes.

Construindo uma CNN pra predizer lateralidade do raio-X

Nosso desafio ? criar uma rede para aprender se um raio X ? lateral ou de frente:

localhost:8889/nbconvert/html/Apresentacao_QCon.ipynb?download=false

3/23

5/14/2019

In [1]:

import warnings warnings.filterwarnings('ignore')

import numpy as np import matplotlib.pyplot as plt %matplotlib inline

import time import os import datetime

Apresentacao_QCon

from keras import datasets, Model from keras.layers.convolutional import Conv2D from keras.layers.convolutional import MaxPooling2D from keras.layers import Flatten from keras.layers.core import Dropout from keras.layers.core import Dense from keras.optimizers import Adam from keras import Sequential from keras.utils import to_categorical from keras.callbacks import ModelCheckpoint, EarlyStopping from keras.applications import VGG16 from keras.preprocessing.image import ImageDataGenerator from keras.models import load_model from keras import backend import tensorflow as tf

from keras.preprocessing.image import load_img, img_to_array

Using TensorFlow backend.

Input de dados

Existem v?rias formas de inputar os dados para treinamento, vamos usar o Image Data Generator para ler as imagens a partir do disco

In [2]: # aqui definimos as transforma??es que ser?o aplicadas na imagem e a % de dados # que ser?o usados para valida??o data_generator = ImageDataGenerator(rescale=1./255, validation_split=0.30)

localhost:8889/nbconvert/html/Apresentacao_QCon.ipynb?download=false

4/23

5/14/2019

Apresentacao_QCon

In [3]:

# para criar os generators precisamos definir o path da pasta raiz com as imagen s e o tamanho da BATCH SIZE path = 'images-chest-orientation/train/' BATCH_SIZE = 50

train_generator = data_generator.flow_from_directory(path, shuffle=True, seed=13 ,

class_mode='categorical', batch_size=BATCH_S IZE, subset="training")

validation_generator = data_generator.flow_from_directory(path, shuffle=True, se ed=13,

class_mode='categorical', batch_size=BATCH_S IZE, subset="validation")

Found 1549 images belonging to 2 classes. Found 662 images belonging to 2 classes.

Construindo o modelo:

Vamos criar uma rede pequena que consiga identificar corretamente essas imagens:

localhost:8889/nbconvert/html/Apresentacao_QCon.ipynb?download=false

5/23

5/14/2019

Apresentacao_QCon

In [6]:

def build_model(shape=(256,256)): ''' Constroi as camadas da rede :return: modelo construido '''

model = Sequential()

# primeira camada adiciona o shape do input # tamb?m ? poss?vel alterar a inicializacao, bias, entre outros -- https://k eras.io/layers/convolutional/#conv2d model.add(Conv2D(filters=64, kernel_size=2, activation='relu', input_shape=s hape)) #Tamanho do downsampling model.add(MaxPooling2D(pool_size=2)) # Fracao das unidades que serao zeradas model.add(Dropout(0.3))

# Segunda camada model.add(Conv2D(filters=128, kernel_size=2, activation='relu')) model.add(MaxPooling2D(pool_size=2)) model.add(Dropout(0.3))

# Da um reshape no output transformando em array model.add(Flatten())

# Camada full-connected model.add(Dense(256, activation='relu')) model.add(Dropout(0.5))

#Camada de saida com o resultado das classes model.add(Dense(2, activation='sigmoid'))

return model

localhost:8889/nbconvert/html/Apresentacao_QCon.ipynb?download=false

6/23

5/14/2019

Apresentacao_QCon

In [7]:

model = build_model(shape) model.summary()

_________________________________________________________________

Layer (type)

Output Shape

Param #

=================================================================

conv2d_1 (Conv2D)

(None, 256, 256, 64)

832

_________________________________________________________________

max_pooling2d_1 (MaxPooling2 (None, 128, 128, 64)

0

_________________________________________________________________

dropout_1 (Dropout)

(None, 128, 128, 64)

0

_________________________________________________________________

conv2d_2 (Conv2D)

(None, 128, 128, 128)

32896

_________________________________________________________________

max_pooling2d_2 (MaxPooling2 (None, 64, 64, 128)

0

_________________________________________________________________

dropout_2 (Dropout)

(None, 64, 64, 128)

0

_________________________________________________________________

flatten_1 (Flatten)

(None, 524288)

0

_________________________________________________________________

dense_1 (Dense)

(None, 256)

134217984

_________________________________________________________________

dropout_3 (Dropout)

(None, 256)

0

_________________________________________________________________

dense_2 (Dense)

(None, 2)

514

=================================================================

Total params: 134,252,226

Trainable params: 134,252,226

Non-trainable params: 0

_________________________________________________________________

Compila??o

Precisamos definir como a rede ir? aprender: fun??o de loss e otimizador

In [8]: # Compila o modelo definindo: otimizador, metrica e loss function pile(loss='binary_crossentropy',

optimizer='adam', metrics=['accuracy'])

Treinamento

Como lemos os dados usando um generator, o fit do keras tamb?m ser? usando um fit_generator . Tamb?m usaremos alguns callbacks :

ModelCheckPoint para salvar o modelo que tiver o melhor loss durante o treinamento e, EarlyStop para interromper o treinamento caso a rede pare de aprender.

localhost:8889/nbconvert/html/Apresentacao_QCon.ipynb?download=false

7/23

5/14/2019

Apresentacao_QCon

In [9]:

checkpoint = ModelCheckpoint('chest_orientation_model.hdf5', monitor='val_loss', verbose=1, mode='min', save_best_only=True)

early_stop = EarlyStopping(monitor='val_loss', min_delta=0.001, patience=5, mode='min', verbose=1)

localhost:8889/nbconvert/html/Apresentacao_QCon.ipynb?download=false

8/23

................
................

In order to avoid copyright disputes, this page is only a partial summary.

Google Online Preview   Download