Aula 06 – Tensor Flow – Redes Neurais – Variáveis, Placeholders e Grafos
Aula 06 – Tensor Flow – Variáveis, Placeholders e Grafos
Voltar para página principal do blog
Todas as aulas desse curso
Aula 05 Aula 07
Meu github:
https://github.com/toticavalcanti
Documentação oficial do TensorFlow:
https://www.tensorflow.org/
Link para o notebook da aula:
notebook-da-aula
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
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.
Aula 06 – Tensor Flow – Redes Neurais – Variáveis, Placeholders e Grafos
Placeholder
Um placeholder é um nó vazio que precisa receber um valor, que pode ser uma feature, labels, etc. Para então poder computar a saída.
Variável
Uma variável é um valor mutável de parâmetro do grafo que representa a rede, por exemplo, os pesos das conexões.
Grafo
Um grafo, é a representação da rede, é uma variável global, conectando variáveis e placeholders de operações.
Placeholder
class Placeholder():
def __init__(self):
self.output_nodes = []
_default_graph.placeholders.append(self)
A classe Placeholder inicia o output_nodes como uma lista vazia em seu construtor e se adiciona a lista placeholders da variável global _default_graph com o append.
Variable
class Variable():
def __init__(self, initial_value = None):
self.value = initial_value
self.output_nodes = []
_default_graph.variables.append(self)
A classe Variable pode receber um valor inicial, o valor inicial, ou seja, o que chegar em initial_value, será atribuído ao value da instância da classe Variable.
O output_node dela é declarado como uma lista vazia, e ela se adiciona na lista de variáveis do grafo, isto é, em
_default_graph.variables fazendo o append dela mesma na lista de variáveis do grafo.
Grafo
Agora vamos criar o grafo como uma variável global.
class Grafo():
def __init__(self):
self.operations = []
self.placeholders = []
self.variables = []
def set_as_default(self):
global _default_graph
_default_graph = self
O que o grafo basicamente faz é conectar placeholders e variáveis a operações.
Ele acompanha todos eles através das listas operations, placeholders e variables.
O método set_as_default() é para definir o Grafo como global e as outras classes (Variable e Placeholder) poderem acessar o _default_graph.
O _default_graph = self é para poder ser acessado, isto é, instanciado pelo main.
Vamos modificar a classe Operations adicionando as operações ao Grafo global que representa a rede:
class Operation():
#construtor
def __init__(self, input_nodes = []):
self.input_nodes = input_nodes
# a lista vazia vai ser substituída
# pela classe que irá extender Operation
# ou seja as operações
self.output_nodes = []
# para cada nó no input_nodes
# ponha essa operação na lista
# output_nodes daquele nó
for node in input_nodes:
node.output_nodes.append(self)
_default_graph.operations.append(self)
# O pass é porque o compute é apenas um método de espaço
# reservado e será substituído pelo método específico (soma, multiplica...)
def compute(self):
pass
Exemplo de uso
z = Ax + b
A = 10
b = 1
z = 10x + 1
O z guarda o valor retornado pela fórmula Ax + b.
O x na fórmula é um placeholder.
A e b são variáveis.
O valor de z vai depender do placeholder que a gente passar para o x.
Então, se você passar para ele uma operação de adição, ou de multiplicação, ou de… o resultado da computação será diferente.
Instanciando um grafo
Vamos instanciar um objeto grafo e inicializar ele como variável global.
g = Graph()
g.set_as_default()
E temos duas variáveis
A = Variable(10)
b = Variable(1)
O x é um Placeholder, e não sabemos seu valor, ele será fornecido pelo usuário.
x = Placeholder()
Na fórmula z = Ax + b temos duas operações, a multiplicação de A por x e a soma do resultado com o b.
Então vamos utilizar a operação multiply() primeiro.
y = multiply(A, x)
E o resultado final vamos guardar em z.
z = add(y, b)
Ordem de operações
Na aula que vem, vamos criar a função traversePostOrder() que servirá para garantir que a computação ocorra na ordem certa.
Ela vai percorrer os nós do grafo na ordem certa e portanto fazer a computação correta.
Vamos também criar a classe Session que é quem vai executar de fato o grafo.
Isso nós vamos ver na próxima!
\o/ e até lá.
notebook-da-aula
Ficamos por aqui e até a próxima.
Voltar para página principal do blog
Todas as aulas desse curso
Aula 05 Aula 07
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. 😉