[Notas de aprendizaje profundo] Conceptos básicos de TensorFlow

En TensorFlow 2.0 y versiones posteriores, el método Eager Execution se adopta de manera predeterminada y la sesión de la versión 1.0 ya no se usa para crear sesiones. Eager Execution utiliza una forma más natural de organizar el código, sin crear un gráfico de cálculo, y puede realizar cálculos matemáticos inmediatamente, lo que simplifica el proceso de depuración del código. Este artículo presenta principalmente el uso básico de TensorFlow y presenta el proceso de optimización de TensorFlow de la función de pérdida mediante la construcción de una función de pérdida simple.

Tabla de contenido

1 tf.Tensor

2 tf.Variable

3 tf.Gradient Tape


TensorFlow es una plataforma integral para el aprendizaje automático. Es compatible con lo siguiente:

  • Cálculos numéricos basados ​​en arreglos multidimensionales (similares a NumPy)
  • GPU y procesamiento distribuido
  • diferenciación automática
  • Construcción de modelos, capacitación y exportación.

1 tf.Tensor


        TensorFlow usa objetos tf.Tensor para manejar arreglos multidimensionales (o tensores).El siguiente es un ejemplo de un 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)

Los atributos más importantes de un objeto tf.Tensor son la forma y el tipo:

  • Tensor.shape devuelve el tamaño de cada dimensión del tensor
  • Tensor.dtype devuelve el tipo de datos de los elementos en el tensor

print(x.shape)

(2, 3)

print(x.dtype)

<tipo: 'float32'>

        TensorFlow implementa operaciones matemáticas estándar en tensores, pero también incluye operaciones personalizadas para el aprendizaje automático. Aquí hay unos ejemplos:

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

2 tf.Variable

        En TensorFlow, los pesos de un modelo se almacenan con objetos tf.Variable, llamados variables.

import tensorflow as tf

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

<tf.Variable 'Variable no leída' forma=(3,) dtype=float32, 
numpy=array([1., 2., 3.], dtype=float32)>

        El valor del objeto tf.Variable se puede cambiar.En TensorFlow 2.0, la sesión ya no se usa para iniciar el cálculo, y la variable puede calcular directamente el resultado.

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

<tf.Variable 'Variable no leída' forma=(3,) dtype=float32, 
numpy=array([2., 3., 4.], dtype=float32)>

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

<tf.Variable 'Variable no leída' forma=(3,) dtype=float32, 
numpy=array([1., 2., 3.], dtype=float32)>

3 tf.Gradient Tape

        El método de descenso de gradiente y los algoritmos relacionados son la base del aprendizaje automático ahora. TensorFLow implementa la diferenciación automática para calcular gradientes, que normalmente se usa para calcular gradientes de funciones de pérdida para modelos de aprendizaje automático.

        TensorFlow 2.0 proporciona el objeto tf.GradientTape, que puede entenderse como "flujo de gradiente".Como sugiere el nombre, tf.GradientTape se usa para calcular el gradiente.

        Aquí hay un ejemplo simple:

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

Finalmente, crea una función de pérdida simple y usa TensorFlow para calcular el 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)

La función mínima de pérdida es: 

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')

Supongo que te gusta

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