import tensorflow as tfTensorflow 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>