[Notas de aprendizado profundo] Princípios básicos do TensorFlow

No TensorFlow 2.0 e versões posteriores, o método Eager Execution é adotado por padrão, e a Session da versão 1.0 não é mais usada para criar sessões. O Eager Execution usa uma forma mais natural de organizar o código, sem construir um gráfico de cálculo, e pode realizar cálculos matemáticos imediatamente, o que simplifica o processo de depuração do código. Este artigo apresenta principalmente o uso básico do TensorFlow e apresenta o processo do TensorFlow otimizando a função de perda construindo uma função de perda simples.

Índice

1 tf.Tensor

2 tf. Variável

3 tf.GradientTape


O TensorFlow é uma plataforma de ponta a ponta para aprendizado de máquina. Ele suporta o seguinte:

  • Cálculos numéricos baseados em matrizes multidimensionais (semelhante ao NumPy)
  • GPUs e processamento distribuído
  • diferenciação automática
  • Construção, treinamento e exportação de modelos

1 tf.Tensor


        O TensorFlow usa objetos tf.Tensor para lidar com matrizes multidimensionais (ou tensores). Veja a seguir um exemplo de um tensor 2D:

import tensorflow as tf
x = tf.constant([[1., 2., 3.],
                 [4., 5., 6.]])
print(x)

tf.Tensor(
[[1. 2. 3.]
 [4. 5. 6.]], forma=(2, 3), dtype=float32)

Os atributos mais importantes de um objeto tf.Tensor são shape e dtype:

  • Tensor.shape retorna o tamanho de cada dimensão do tensor
  • Tensor.dtype retorna o tipo de dados dos elementos no tensor

print(x.shape)

(2, 3)

print(x.dtype)

<dtype: 'float32'>

        O TensorFlow implementa operações matemáticas padrão em tensores, mas também inclui operações personalizadas para aprendizado de máquina. aqui estão alguns exemplos:

x + x
5 * x
tf.transpose(x)
tf.nn.softmax(x, axis=-1)
tf.reduce_sum(x)

2 tf. Variável

        No TensorFlow, os pesos de um modelo são armazenados com objetos tf.Variable, chamados de variáveis.

import tensorflow as tf

x = tf.Variable([0., 0., 0.])
x.assign([1, 2, 3])

<tf.Variable 'UnreadVariable' shape=(3,) dtype=float32, 
numpy=array([1., 2., 3.], dtype=float32)>

        O valor do objeto tf.Variable pode ser alterado. No TensorFlow 2.0, a Session não é mais usada para iniciar o cálculo e a variável pode calcular diretamente o resultado.

x.assign_add([1, 1, 1,])

<tf.Variable 'UnreadVariable' shape=(3,) dtype=float32, 
numpy=array([2., 3., 4.], dtype=float32)>

x.assign_sub([1, 1, 1])

<tf.Variable 'UnreadVariable' shape=(3,) dtype=float32, 
numpy=array([1., 2., 3.], dtype=float32)>

3 tf.GradientTape

        O método de descida do gradiente e os algoritmos relacionados são a base do aprendizado de máquina agora. O TensorFLow implementa diferenciação automática para calcular gradientes, normalmente usado para calcular gradientes de funções de perda para modelos de aprendizado de máquina.

        O TensorFlow 2.0 fornece o objeto tf.GradientTape, que pode ser entendido como "fluxo de gradiente". Como o nome sugere, tf.GradientTape é usado para calcular o gradiente.

        Aqui está um exemplo simples:

import tensorflow as tf

def f(x):
   return x**2 + 2*x - 5

x = tf.Variable(1.0)

with tf.GradientTape() as tape:
   y = f(x)
g_x = tape.gradient(y, x) # 计算 y 在 x = 1.0 处的梯度
print(g_x)

4.0

Por fim, crie uma função de perda simples e use o TensorFlow para calcular o mínimo.

import tensorflow as tf

def loss(x):
   return x**2 - 10*x + 25

x = tf.Variable(1.0) # 随机初始值

losses = [] # 记录损失函数值
for i in range(100):
   with tf.GradientTape() as tape:
      one_loss = loss(x)
   lossed.append(one_loss)
   grad = tape.gradient(one_loss, x)
   x.assign_sub(0.1 * grad) # 执行一次梯度下降法

print("The mininum of loss function is: ")
tf.print(x)

O mínimo da função de perda é: 

4.99999905

# 可视化优化过程
import matplotlib
from matplotlib import pyplot as plt

matplotlib.rcParams['figure.figsize'] = [8, 5]

plt.figure()
plt.plot(losses)
plt.title('Loss vs training iterations')
plt.xlabel('iterations')
plt.ylabel('loss')

Acho que você gosta

Origin blog.csdn.net/sxyang2018/article/details/132153893
Recomendado
Clasificación