Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

Tensorflow e numpy

import tensorflow as tf

Tensorflow e numpy

  • Ambas as bibliotecas compartilham similaridades.

  • numpy serve para computação numérica genérica.

  • tensorflow é especificamente projetado para aplicações de aprendizagem de máquina, mas também pode ser usado para computação numérica.

  • tensorflow possui algumas características adicionais não encontradas no_numpy_:

    • Diferenciação automática (DA): suporte direto à DA permite cálculos eficientes de gradientes de retropropagação (backpropagation).

    • Aceleração de hardware: suporte a GPU e TPU, enquanto o numpy se sustenta em CPU.

    • Computação distribuída: suporte nativo para escalabilidade em múltiplas plataformas e máquinas, enquanto o numpy é para máquina única.

    • Compatibilidade com o ecossistema TensorFlow: fácil integração com datasets e o pipeline de ML.

    • Grafos computacionais estáticos (GCEs): tensorflow opera sobre estruturas de grafos que pode ser otimizada. A natureza estática garante eficiência em aceleradores de hardware e sistemas distribuídos, enquanto o numpy opera em modo imediato sem o conceito de GCEs.

O tipo Tensor

  • Grosso modo, são arrays multidimensionais especializados.

  • Herdam todas as operações matemáticas do numpy.array, mas realizam outras mais.

  • Imutáveis.

Obs.: conceito paralelo ao tensor da física/mecânica.

# 'constant' significa 'immutable'
c1 = tf.constant(1.0)
c2 = tf.constant([1.0,2.0])
c3 = tf.constant([[1.0,2.0], [3.0,4.0]])
c1,c2,c3
(<tf.Tensor: shape=(), dtype=float32, numpy=1.0>, <tf.Tensor: shape=(2,), dtype=float32, numpy=array([1., 2.], dtype=float32)>, <tf.Tensor: shape=(2, 2), dtype=float32, numpy= array([[1., 2.], [3., 4.]], dtype=float32)>)
  • Método e atributos principais

c1.numpy(), c2.shape, c3.dtype
(1.0, TensorShape([2]), tf.float32)
  • Operações matemáticas comuns

print(2*c1)
print(c2/2)
print(c3 - tf.matmul(c3 + 1,tf.eye(2)))
tf.Tensor(2.0, shape=(), dtype=float32)
tf.Tensor([0.5 1. ], shape=(2,), dtype=float32)
tf.Tensor(
[[-1. -1.]
 [-1. -1.]], shape=(2, 2), dtype=float32)
  • Operador @ realiza multiplicação tensorial

c4 = tf.ones((3,3)) + tf.fill([3,3],2.0)
c5 = tf.one_hot(indices=[3,1,4],depth=5)
c6 = tf.transpose(c5) @ c4

print(c4)
print(c5)
print(c6)
tf.Tensor(
[[3. 3. 3.]
 [3. 3. 3.]
 [3. 3. 3.]], shape=(3, 3), dtype=float32)
tf.Tensor(
[[0. 0. 0. 1. 0.]
 [0. 1. 0. 0. 0.]
 [0. 0. 0. 0. 1.]], shape=(3, 5), dtype=float32)
tf.Tensor(
[[0. 0. 0.]
 [3. 3. 3.]
 [0. 0. 0.]
 [3. 3. 3.]
 [3. 3. 3.]], shape=(5, 3), dtype=float32)

Atribuição x imutabilidade

  • A imutabilidade do tensor está associada ao seu GCE.

  • Não podemos usar atribuição direta, mas isso não descreve a imutabilidae.

try:
    c1[0] = 2
except TypeError as e:
    print('--> Não posso ser alterado por atribuição indexada!\n', e)
--> Não posso ser alterado por atribuição indexada!
 'tensorflow.python.framework.ops.EagerTensor' object does not support item assignment
# conda install -c conda-forge tensorboard

with tf.compat.v1.Session() as sess:
    c3a = tf.constant([[1.0,2.0], [3.0,4.0]], name = "a")
    c3b = tf.constant([[-2.0,2.0], [4.0,-3.0]], name = "b")
    c3c = tf.add(c3a, c3b, name = "c")
    c3d = tf.multiply(2.0, c3c, name = "d")
    print(sess.run(c3d))
[[-2.  8.]
 [14.  2.]]

O tipo Variable

v1 = tf.Variable(2)
print(v1)
<tf.Variable 'Variable:0' shape=() dtype=int32, numpy=2>