In [0]:
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
Objetivos de aprendizaje:
Nota: Lee atentamente este instructivo. El modelo de programación de TensorFlow probablemente sea diferente a otros que conozcas y, por lo tanto, tal vez no sea lo suficientemente intuitivo.
El nombre de TensorFlow proviene de tensores, que son matrices de dimensionalidad arbitraria. Con TensorFlow, puedes manipular tensores con una gran cantidad de dimensiones. No obstante, mayormente trabajarás con uno o más de los siguientes tensores de baja dimensionalidad:
"Howdy"
o 5
[2, 3, 5, 7, 11]
o [5]
[[3.1, 8.2, 5.9][4.3, -2.7, 6.5]]
Las operaciones de TensorFlow crean, destruyen y manipulan tensores. La mayoría de las líneas de código en un programa típico de TensorFlow son operaciones.
Un gráfico de TensorFlow (también conocido como gráfico computacional o gráfico de flujo de datos) es, de hecho, una estructura de datos de gráfico. Muchos programas de TensorFlow consisten en un solo gráfico, pero es posible que los programas de TensorFlow alternativamente creen gráficos múltiples. Los nodos de un gráfico son operaciones; los bordes de un gráfico son tensores. Los tensores fluyen en el gráfico, manipulado en cada nodo mediante una operación. El tensor de resultado de una operación por lo general se convierte en el tensor de entrada de una operación subsiguiente. TensorFlow implementa un modelo de ejecución relajado, lo que significa que los nodos solo se calculan cuando es necesario, en función de los nodos asociados.
Los tensores pueden almacenarse en el gráfico como constantes o variables. Como podrás imaginar, las constantes tienen tensores cuyos valores no pueden cambiar, mientras que las variables tienen tensores cuyos valores sí pueden cambiar. Sin embargo, lo que posiblemente no imagines es que las constantes y las variables son solo más operaciones en el gráfico. Una constante es una operación que siempre arroja el mismo valor de tensor. Una variable es una operación que arrojará el tensor que tuviera asignado.
Para definir una constante, usa el operador tf.constant
y envía su valor. Por ejemplo:
x = tf.constant([5.2])
De manera similar, puedes crear una variable como la siguiente:
y = tf.Variable([5])
O bien puedes crear primero la variable y, luego, asignar un valor como el siguiente (ten en cuenta que siempre debes especificar un valor predeterminado):
y = tf.Variable([0])
y = y.assign([5])
Una vez que hayas definido algunas constantes o variables, podrás combinarlas con otras operaciones, como tf.add
. Cuando evalúas la operación tf.add
, esta invocará a tus operaciones tf.constant
o tf.Variable
para obtener sus valores y, luego, obtener un tensor nuevo con la suma de esos valores.
Los gráficos deben ejecutarse dentro de una sesión de TensorFlow, que incluye el estado de los gráficos que ejecuta:
with tf.Session() as sess:
initialization = tf.global_variables_initializer()
print(y.eval())
Cuando trabajas con variables tf.Variable
, debes inicializarlas de forma explícita. Para hacerlo, debes invocar a tf.global_variables_initializer
al inicio de la sesión, como se muestra arriba.
Nota: Una sesión puede distribuir la ejecución del gráfico en varias máquinas (si asumimos que el programa se ejecuta en un marco de trabajo de cálculo distribuido). Para obtener más información, consulta TensorFlow distribuido.
La programación de TensorFlow básicamente es un proceso de dos pasos:
Al igual que con casi todos los programas de Python, empezarás especificando algunas sentencias de import
.
El conjunto de sentencias de import
necesario para ejecutar un programa de TensorFlow depende, por supuesto, de las funciones que accede tu programa. Como mínimo, debes proporcionar la sentencia import tensorflow
en todos los programas de TensorFlow:
In [0]:
import tensorflow as tf
No te olvides de ejecutar el bloque de código previo (las sentencias de import
).
Otras sentencias de importación habituales incluyen lo siguiente:
import matplotlib.pyplot as plt # Visualización del conjunto de datos
import numpy as np # Biblioteca de Python numérica de bajo nivel
import pandas as pd # Biblioteca de Python numérica de alto nivel
TensorFlow proporciona un gráfico predeterminado. Sin embargo, recomendamos de forma explícita crear tu propio Graph
en lugar de proporcionar el estado de seguimiento (p. ej., es posible que quieras trabajar con un Graph
diferente en cada celda).
In [0]:
from __future__ import print_function
import tensorflow as tf
# Create a graph.
g = tf.Graph()
# Establish the graph as the "default" graph.
with g.as_default():
# Assemble a graph consisting of the following three operations:
# * Two tf.constant operations to create the operands.
# * One tf.add operation to add the two operands.
x = tf.constant(8, name="x_const")
y = tf.constant(5, name="y_const")
sum = tf.add(x, y, name="x_y_sum")
# Now create a session.
# The session will run the default graph.
with tf.Session() as sess:
print(sum.eval())
Revisa la lista de códigos de arriba para agregar tres números enteros, en lugar de dos:
z
, y asígnala a un valor de 4
.Agrega z
a sum
para generar una nueva suma.
Sugerencia: Consulta los documentos de la API para tf.add() para obtener más información sobre su firma de función.
Vuelve a ejecutar el bloque de código modificado. ¿El programa generó la suma total correcta?
In [0]:
# Create a graph.
g = tf.Graph()
# Establish our graph as the "default" graph.
with g.as_default():
# Assemble a graph consisting of three operations.
# (Creating a tensor is an operation.)
x = tf.constant(8, name="x_const")
y = tf.constant(5, name="y_const")
sum = tf.add(x, y, name="x_y_sum")
# Task 1: Define a third scalar integer constant z.
z = tf.constant(4, name="z_const")
# Task 2: Add z to `sum` to yield a new sum.
new_sum = tf.add(sum, z, name="x_y_z_sum")
# Now create a session.
# The session will run the default graph.
with tf.Session() as sess:
# Task 3: Ensure the program yields the correct grand total.
print(new_sum.eval())