Começando com TensorFlow
Escreva seus próprios modelos de Machine Learning
!1
Sandro Moreira

moreira.sandro@gmail.com
Sandro Moreira
- Professor em cursos de Graduação e Pós Graduação da
Universidade de Rio Verde (UniRV)

- Mestre em Engenharia Mecânica (UNESP)

- Doutorando em Ciência da Computação (UFG)

- Consultor de Projetos para Machine Learning

- Coorganizador da comunidade GDG Rio Verde

- Coorganizador da comunidade TensorFlow Goiás
O que é TensorFlow?
Plataforma de código aberto de ponta a ponta para aprendizado de máquina. 

Possui um ecossistema abrangente e flexível de ferramentas, bibliotecas e
recursos da comunidade que permite que os pesquisadores desenvolvam o
que há de mais moderno em ML e os desenvolvedores construam e
implantem facilmente aplicativos desenvolvidos por ML.
Linguagens de Programação
Oficiais:

Python

JavaScript

C++

Java

Go

Swift (Release em Breve)
Mantidos por comunidades

C#: TensorFlowSharp e TensorFlow.NET

Haskell

Julia

MATLAB

Ruby

Rust

Scala
O TensorFlow possui APIs disponíveis em várias linguagens, tanto para
a construção quanto para a execução de um gráfico do TensorFlow.
a = tf.constant(5)
b = tf.constant(3)
c = a * b
print(c)
a = tf.constant(5)
b = tf.constant(3)
c = a * b
with tf.Session() as sess:
print(sess.run(c))
Simbólico Concreto
TF1 TF2
Funções, não sessões
x = tf.constant([[5, 2],[1, 3]])
print(x)
tf.Tensor(
[[5 2]
[1 3]], shape=(2,2), dtype=int32)
Constants
x.numpy()
array([[5, 2]
[1, 3]], dtype=int32)
Tensores para NumPy
a = tf.random.normal(shape=(2,2))
b = tf.random.normal(shape=(2,2))
c = a + b
d = tf.square©
array([[5, 2]
[1, 3]], dtype=int32)
Matemática no TF2 funciona como NumPy
Desenvolvimento Produção
Data Design
tf.data
TF Datasets
Model Design
Keras
Estimators
Training
Distribution Strategy
CPU GPU TPU
Analisys
TensorBoard
Serialization
Saved Model
Model Repository
TensorFlow HUB
Browser e Node
TensorFlow.JS
Android, IOS, Arduino, etc
TensorFlow Lite e Micro
Cloud
TensorFlow Services
Construindo um modelo com TensorFlow
Sequencial API
+ Built-in Layers
Functional API
+ Built-in Layers
Functional API
+Custom Layers
+Custom Metrics
+Custom Losses
Subclassing: write
everything yourself
from scratch
Novos usuários,

modelos simples
Engenheiros 

com demandas 

padrões
Engenheiros que 

querem maior 

controle em casos

muito específicos
Pesquisadores
Construindo um modelo com TensorFlow
Sequencial API
+ Built-in Layers
Functional API
+ Built-in Layers
Functional API
+Custom Layers
+Custom Metrics
+Custom Losses
Subclassing: write
everything yourself
from scratch
Novos usuários,

modelos simples
Engenheiros 

com demandas 

padrões
Engenheiros que 

querem maior 

controle em casos

muito específicos
Pesquisadores
model = keras.Sequential()
model.add(layers.Dense(32, activation=‘relu’, input_shape=(784,)))
model.add(layers.Dense(32, activation=‘relu’))
model.add(layers.Dense(10, activation=‘softmax’))
Construindo um modelo com TensorFlow
Sequencial API
+ Built-in Layers
Functional API
+ Built-in Layers
Functional API
+Custom Layers
+Custom Metrics
+Custom Losses
Subclassing: write
everything yourself
from scratch
Novos usuários,

modelos simples
Engenheiros 

com demandas 

padrões
Engenheiros que 

querem maior 

controle em casos

muito específicos
Pesquisadores
Exemplo de Caso de uso mais específico
Visual Question Answering (VQA)

Tarefa: Dada uma imagem e uma pergunta em linguagem natural, a resposta deve vir em linguagem natural
Antol, S. et all; VQA: Visual Question Answering; The IEEE International Conference on Computer Vision (ICCV), 2015
Pergunta: Qual a cor do cachorro da direita?

Resposta: Preto
Antol, S. et all; VQA: Visual Question Answering; The IEEE International Conference on Computer Vision (ICCV), 2015
1 - Usar uma CNN para a imagem

2 - Usar uma LSTM para a pergunta

3 - Concatenar

4 - Classificar com Dense layers

Workflow
Input Question

(Vectorized, Padded)
Input Image

(Normalized)
Embedding
LSTM
Conv2D and

Maxpooling2D stack

Concatenate
Dense/Softmax
vision_model = Sequential()
vision_model.add(Conv2D(64,(3,3),
activation = ‘relu’,
input_shape=(224, 224,3)))
vision_model.add(MaxPooling2D())
vision_model.add(Flatten())
image_input = Input(shape=(224,224,3))
encode_image = vision_model(image_input)
Input Question

(Vectorized, Padded)
Input Image

(Normalized)
Embedding
LSTM
Conv2D and

Maxpooling2D stack

Concatenate
Dense/Softmax
question_input = Input(shape=(100,),
dtype=‘int32’,
name=“Question”)
embedded = Embedding(input_dim=10000,
output_dim=256,
input_length=100)(question_input)
encoded_question = LSTM(256)(embedded)
Input Question

(Vectorized, Padded)
Input Image

(Normalized)
Embedding
LSTM
Conv2D and

Maxpooling2D stack

Concatenate
Dense/Softmax
merged = layers.concatenate([encoded_image,
encoded_question])
Input Question

(Vectorized, Padded)
Input Image

(Normalized)
Embedding
LSTM
Conv2D and

Maxpooling2D stack

Concatenate
Dense/Softmax
#Classificador
output = Dense(1000,
activation=‘softmax’)(merged)
#Construção do Modelo que você pode treinar
#com .fit, .train_on_batch ou GradientTape
vqa_model = Model(inputs=[image_input,
question_input],
outputs=output)
#visualizando modelo
from tensorflow.keras.utils import plot_model
plot_model(vqa_model, to_file=‘modelo.png’)
Input Question

(Vectorized, Padded)
Input Image

(Normalized)
Embedding
LSTM
Conv2D and

Maxpooling2D stack

Concatenate
Dense/Softmax
Construindo um modelo com TensorFlow
Sequencial API
+ Built-in Layers
Functional API
+ Built-in Layers
Functional API
+Custom Layers
+Custom Metrics
+Custom Losses
Subclassing: write
everything yourself
from scratch
Novos usuários,

modelos simples
Engenheiros 

com demandas 

padrões
Engenheiros que 

querem maior 

controle em casos

muito específicos
Pesquisadores
class MyModel(tf.keras.Model):
def "__init"__(self, num_classes=10):
super(MyModel, self)."__init"__(name=‘my_model’)
self.dense_1 = layers.Dense(32, activation=‘relu’)
self.dense_2 = layers.Dense(num_classes,activation=‘softmax’)
def call(self, inputs):
x = self.dense_1(inputs)
return self.dense_2(x)
Treinando um modelo com TensorFlow
model.fit()
model.train_on_batch()
+ callbacks
Custom training
with GradientTape
Experimento

Rápido
Customizado

com checkpoints,

Monitoramento

com TensorBoard,

Enviar mensagens

via Slack
Customizado

com otimizadores e 

funções de perda

específicos

Ex: GAN
Controle Total

Ex: Novos 

algoritmos

de otimização
model.fit()
+ callbacks
Treinando um modelo com TensorFlow
model.fit()
model.train_on_batch()
+ callbacks
Custom training
with GradientTape
Experimento

Rápido
Customizado

com checkpoints,

Monitoramento

com TensorBoard,

Enviar mensagens

via Slack
Customizado

com otimizadores e 

funções de perda

específicos

Ex: GAN
Controle Total

Ex: Novos 

algoritmos

de otimização
model.fit()
+ callbacks
model.compile(optimizer=Adam(),
loss=BinaryCrossentropy(),
metrics=[AUC(), Precision(), Recall()])
model.fit(data,
epochs=10,
validation_data=val_data,
callbacks=[EarlyStopping(),
TensorBoard(),
ModelCheckpoint()])
Usando Notebooks Colab e TensorFlow 2.x
bit.ly/2IFyV23Notebook disponível em:
Recursos - Libraries & Extensions
Recursos - Libraries & Extensions
Dica #1
teachablemachine.withgoogle.com
Dica #2
https://codelabs.developers.google.com/?cat=TensorFlow
Dica #3
https://www.tensorflow.org/tutorials
Referências
- Introduction to TensorFlow 2.0: Easier for beginners, and more powerful for experts
(TF World ’19) - Josh Gordon 

- Tensorflow Documentation - https://tensorflow.org 

- Google Colaboratory - https://colab.research.google.com/

Comecando tensorflow

  • 1.
    Começando com TensorFlow Escrevaseus próprios modelos de Machine Learning !1 Sandro Moreira moreira.sandro@gmail.com
  • 2.
    Sandro Moreira - Professorem cursos de Graduação e Pós Graduação da Universidade de Rio Verde (UniRV) - Mestre em Engenharia Mecânica (UNESP) - Doutorando em Ciência da Computação (UFG) - Consultor de Projetos para Machine Learning - Coorganizador da comunidade GDG Rio Verde - Coorganizador da comunidade TensorFlow Goiás
  • 3.
    O que éTensorFlow? Plataforma de código aberto de ponta a ponta para aprendizado de máquina. Possui um ecossistema abrangente e flexível de ferramentas, bibliotecas e recursos da comunidade que permite que os pesquisadores desenvolvam o que há de mais moderno em ML e os desenvolvedores construam e implantem facilmente aplicativos desenvolvidos por ML.
  • 4.
    Linguagens de Programação Oficiais: Python JavaScript C++ Java Go Swift(Release em Breve) Mantidos por comunidades C#: TensorFlowSharp e TensorFlow.NET Haskell Julia MATLAB Ruby Rust Scala O TensorFlow possui APIs disponíveis em várias linguagens, tanto para a construção quanto para a execução de um gráfico do TensorFlow.
  • 5.
    a = tf.constant(5) b= tf.constant(3) c = a * b print(c) a = tf.constant(5) b = tf.constant(3) c = a * b with tf.Session() as sess: print(sess.run(c)) Simbólico Concreto TF1 TF2 Funções, não sessões
  • 6.
    x = tf.constant([[5,2],[1, 3]]) print(x) tf.Tensor( [[5 2] [1 3]], shape=(2,2), dtype=int32) Constants
  • 7.
    x.numpy() array([[5, 2] [1, 3]],dtype=int32) Tensores para NumPy
  • 8.
    a = tf.random.normal(shape=(2,2)) b= tf.random.normal(shape=(2,2)) c = a + b d = tf.square© array([[5, 2] [1, 3]], dtype=int32) Matemática no TF2 funciona como NumPy
  • 9.
    Desenvolvimento Produção Data Design tf.data TFDatasets Model Design Keras Estimators Training Distribution Strategy CPU GPU TPU Analisys TensorBoard Serialization Saved Model Model Repository TensorFlow HUB Browser e Node TensorFlow.JS Android, IOS, Arduino, etc TensorFlow Lite e Micro Cloud TensorFlow Services
  • 10.
    Construindo um modelocom TensorFlow Sequencial API + Built-in Layers Functional API + Built-in Layers Functional API +Custom Layers +Custom Metrics +Custom Losses Subclassing: write everything yourself from scratch Novos usuários, modelos simples Engenheiros com demandas padrões Engenheiros que querem maior controle em casos muito específicos Pesquisadores
  • 11.
    Construindo um modelocom TensorFlow Sequencial API + Built-in Layers Functional API + Built-in Layers Functional API +Custom Layers +Custom Metrics +Custom Losses Subclassing: write everything yourself from scratch Novos usuários, modelos simples Engenheiros com demandas padrões Engenheiros que querem maior controle em casos muito específicos Pesquisadores
  • 12.
    model = keras.Sequential() model.add(layers.Dense(32,activation=‘relu’, input_shape=(784,))) model.add(layers.Dense(32, activation=‘relu’)) model.add(layers.Dense(10, activation=‘softmax’))
  • 13.
    Construindo um modelocom TensorFlow Sequencial API + Built-in Layers Functional API + Built-in Layers Functional API +Custom Layers +Custom Metrics +Custom Losses Subclassing: write everything yourself from scratch Novos usuários, modelos simples Engenheiros com demandas padrões Engenheiros que querem maior controle em casos muito específicos Pesquisadores
  • 14.
    Exemplo de Casode uso mais específico Visual Question Answering (VQA) Tarefa: Dada uma imagem e uma pergunta em linguagem natural, a resposta deve vir em linguagem natural Antol, S. et all; VQA: Visual Question Answering; The IEEE International Conference on Computer Vision (ICCV), 2015 Pergunta: Qual a cor do cachorro da direita? Resposta: Preto
  • 15.
    Antol, S. etall; VQA: Visual Question Answering; The IEEE International Conference on Computer Vision (ICCV), 2015 1 - Usar uma CNN para a imagem 2 - Usar uma LSTM para a pergunta 3 - Concatenar 4 - Classificar com Dense layers Workflow Input Question (Vectorized, Padded) Input Image (Normalized) Embedding LSTM Conv2D and Maxpooling2D stack Concatenate Dense/Softmax
  • 16.
    vision_model = Sequential() vision_model.add(Conv2D(64,(3,3), activation= ‘relu’, input_shape=(224, 224,3))) vision_model.add(MaxPooling2D()) vision_model.add(Flatten()) image_input = Input(shape=(224,224,3)) encode_image = vision_model(image_input) Input Question (Vectorized, Padded) Input Image (Normalized) Embedding LSTM Conv2D and Maxpooling2D stack Concatenate Dense/Softmax
  • 17.
    question_input = Input(shape=(100,), dtype=‘int32’, name=“Question”) embedded= Embedding(input_dim=10000, output_dim=256, input_length=100)(question_input) encoded_question = LSTM(256)(embedded) Input Question (Vectorized, Padded) Input Image (Normalized) Embedding LSTM Conv2D and Maxpooling2D stack Concatenate Dense/Softmax
  • 18.
    merged = layers.concatenate([encoded_image, encoded_question]) InputQuestion (Vectorized, Padded) Input Image (Normalized) Embedding LSTM Conv2D and Maxpooling2D stack Concatenate Dense/Softmax
  • 19.
    #Classificador output = Dense(1000, activation=‘softmax’)(merged) #Construçãodo Modelo que você pode treinar #com .fit, .train_on_batch ou GradientTape vqa_model = Model(inputs=[image_input, question_input], outputs=output) #visualizando modelo from tensorflow.keras.utils import plot_model plot_model(vqa_model, to_file=‘modelo.png’) Input Question (Vectorized, Padded) Input Image (Normalized) Embedding LSTM Conv2D and Maxpooling2D stack Concatenate Dense/Softmax
  • 20.
    Construindo um modelocom TensorFlow Sequencial API + Built-in Layers Functional API + Built-in Layers Functional API +Custom Layers +Custom Metrics +Custom Losses Subclassing: write everything yourself from scratch Novos usuários, modelos simples Engenheiros com demandas padrões Engenheiros que querem maior controle em casos muito específicos Pesquisadores
  • 21.
    class MyModel(tf.keras.Model): def "__init"__(self,num_classes=10): super(MyModel, self)."__init"__(name=‘my_model’) self.dense_1 = layers.Dense(32, activation=‘relu’) self.dense_2 = layers.Dense(num_classes,activation=‘softmax’) def call(self, inputs): x = self.dense_1(inputs) return self.dense_2(x)
  • 22.
    Treinando um modelocom TensorFlow model.fit() model.train_on_batch() + callbacks Custom training with GradientTape Experimento Rápido Customizado com checkpoints, Monitoramento com TensorBoard, Enviar mensagens via Slack Customizado com otimizadores e funções de perda específicos Ex: GAN Controle Total Ex: Novos algoritmos de otimização model.fit() + callbacks
  • 23.
    Treinando um modelocom TensorFlow model.fit() model.train_on_batch() + callbacks Custom training with GradientTape Experimento Rápido Customizado com checkpoints, Monitoramento com TensorBoard, Enviar mensagens via Slack Customizado com otimizadores e funções de perda específicos Ex: GAN Controle Total Ex: Novos algoritmos de otimização model.fit() + callbacks
  • 24.
  • 25.
    Usando Notebooks Colabe TensorFlow 2.x bit.ly/2IFyV23Notebook disponível em:
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
    Referências - Introduction toTensorFlow 2.0: Easier for beginners, and more powerful for experts (TF World ’19) - Josh Gordon - Tensorflow Documentation - https://tensorflow.org 
 - Google Colaboratory - https://colab.research.google.com/