¡Acceso ilimitado 24/7 a todos nuestros libros y vídeos! Descubra la Biblioteca Online ENI. Pulse aquí
¡Acceso ilimitado 24/7 a todos nuestros libros y vídeos! Descubra la Biblioteca Online ENI. Pulse aquí
  1. Libros
  2. Data Scientist y lenguaje R
  3. Deep learning con Tensorflow y Keras
Extrait - Data Scientist y lenguaje R Autoformación en los aspectos básicos de la inteligencia artificial en el universo... (2a edición)
Extractos del libro
Data Scientist y lenguaje R Autoformación en los aspectos básicos de la inteligencia artificial en el universo... (2a edición) Volver a la página de compra del libro

Deep learning con Tensorflow y Keras

Deep learning según Google

No podemos descuidar a un actor principal como Google. Esta podría ser una buena razón para considerar usar TensorFlow en sus proyectos, pero no es la única.

Según el sitio de GitHub, TensorFlow y Keras dominan la cantidad de GitHub stars by AI library en 2020: 153 000 estrellas para TensorFlow, 51 000 para Keras, 46 000 para PyTorch, 45 000 para Scikit-learn, 31 000 para Caffe y 19 000 para MXNet.

Se puede acceder fácilmente a estos frameworks en R:

  • TensorFlow y Keras, como veremos más adelante,

  • PyTorch, con el paquete rTorch,

  • Scikit-learn, que funciona muy bien en R cuando se importa con reticulate,

  • MXNet (pero preste atención, no a través del CRAN), cuya instalación no es sencilla, pero la implementación es potente.

TensorFlow es una librería de software open source dedicada a los cálculos numéricos. Se usa muy a menudo en el contexto del Deep learning, pero no exclusivamente.

Esta librería implementa gráficos de flujo de datos en segundo plano a los que puede acceder, pero que solo los especialistas analizan. Los nodos representan operaciones matemáticas, mientras que las aristas del gráfico representan tensores (gráficos dirigidos). El interés de esta arquitectura gráfica es múltiple, pero cabe recordar que, entre otras cosas, permite una mejor gestión...

Instalar e inicializar su contexto técnico

No dude en hacer balance de su contexto antes de comenzar su trabajo, verificando su configuración de Python y su correcto funcionamiento.

getwd()                              # ¿dónde estoy? 
library(reticulate)                  # carga de reticulate 
os    <- reticulate::import("os")    # una pequeña prueba de funcionamiento 
os$listdir(".")                      # si todo va bien: dir local 

Puede instalar de manera muy sencilla paquetes de Python en el entorno que utiliza en R/RStudio de la siguiente manera:

# instalación de paquetes Python (solo se hace una vez) 
# esto es útil cuando estos paquetes no están, evita 
# equivocarse de entono de instalación 
 
py_install('matplotlib') 
py_install('pandas') 
 
py_install('graphviz') 
py_install('pydot') 
py_install('pydotplus') 

Con R se simplifica la instalación de TensorFlow (versiones 2.x.x). Ahora, la opción predeterminada, si la configuración de su hardware lo admite, es ejecutar bajo CUDA y, por lo tanto, con una unidad de procesamiento de gráficos...

Tensores TensorFlow/Keras

1. Forma de los tensores

Como ejemplo, vamos a tomar un tensor que tiene los parámetros de forma siguiente:

  • tres columnas,

  • cinco filas,

  • dos niveles de profundidad.

ceros <- tf$Variable(tf$ceros(shape(2L,5L,3L))) 
print(ceros) 
 
##> <tf.Variable 'Variable:0' shape=(2, 5, 3) dtype=float32, numpy= 
##> array([[[0., 0., 0.], 
##>         [0., 0., 0.], 
##>         [0., 0., 0.], 
##>         [0., 0., 0.], 
##>         [0., 0., 0.]], 
##> 
##>        [[0., 0., 0.], 
##>         [0., 0., 0.], 
##>         [0., 0., 0.], 
##>         [0., 0., 0.], 
##>         [0., 0., 0.]]], dtype=float32)> 

Probablemente sea más interesante crear este mismo tensor utilizando la API de Keras, que nos permite escribir código que funcionaría con un backend diferente a TensorFlow:

ceros <-  k_ceros(shape = c(2, 5, 3)) 
print(ceros) 
  
##> <tf.Variable 'Variable:0' shape=(2, 5, 3) dtype=float32, numpy= 
##> array([[[0., 0., 0.], 
##>         [0., 0., 0.], 
##>         [0., 0., 0.], 
##>         [0., 0., 0.], 
##>         [0., 0., 0.]], 
##> 
##>        [[0., 0., 0.], 
##>         [0., 0., 0.], 
##>         [0., 0., 0.], 
##>         [0., 0., 0.], 
##>         [0., 0., 0.]]], dtype=float32)> 

Observe el orden de los parámetros de TensorFlow/Keras, que están en «estilo C».

Compárelos con los parámetros de los arrays de R, que están en «estilo Fortran»:

array(0.0 , c(5,3,2)) 
 
##> , , 1 
##> 
##>      [,1] [,2] [,3] 
##> [1,]    0    0    0 
##> [2,]    0    0    0 
##> [3,]    0    0  ...

Puesta a punto de un modelo de referencia usando caret

Primero, crearemos un modelo con nuestras técnicas habituales usando el paquete caret, que encapsula muchas técnicas y modelos. A continuación, veremos en qué se diferenciará del trabajo con keras para realizar un modelo similar.

Vamos a utilizar datos iris, sin duda el dataset más conocido que existe; nuestro objetivo es crear un modelo que deduzca el tipo de iris en función de algunas características de sus flores.

library(caret)              # gestión de muchos tipos de modelos 
library(lessR)              # siempre menos código R ... 
library(DataExplorer)       # para algunas funcionalidades 

Este dataset se incluye en su implementación de R, por lo que siempre está disponible para sus experimentos. Veamos brevemente su estructura.

summary(iris) 
 
##>   Sepal.Length    Sepal.Width     Petal.Length    Petal.Width 
##>  Min.   :4.300   Min.   :2.000   Min.   :1.000   Min.   :0.100 
##>  1st Qu.:5.100   1st Qu.:2.800   1st Qu.:1.600   1st Qu.:0.300 
##>  Median :5.800   Median :3.000   Median :4.350   Median :1.300 
##>  Mean   :5.843   Mean   :3.057   Mean   :3.758   Mean   :1.199 
##>  3rd Qu.:6.400   3rd Qu.:3.300   3rd Qu.:5.100   3rd Qu.:1.800 
##>  Max.   :7.900   Max.   :4.400   Max.   :6.900   Max.   :2.500 
##>        Species 
##>  setosa    :50 
##>  versicolor:50 
##>  virginica :50 
##> 
##> 
##> 
 
introduce(iris) 
 
##>   rows columns discrete_columns continuous_columns all_missing_columns 
##> 1  150       5                1                  4  ...

Crear un modelo con TensorFlow 2 y Keras

Tendremos más líneas para escribir por varias razones:

  • Los modelos en el paquete caret ya están parametrizados y se pueden usar sin modificar, mientras que la interfaz de Keras que hemos utilizado para acceder a la potencia del framework TensorFlow necesita más parametrización. Observe que utilizar TensorFlow directamente requiere aún más esfuerzo.

  • Antes de usarlos, tendremos que transformar nuestros datos en estructuras numéricas, normalmente tensores o al menos matrices que, al igual que los vectores, son matemáticamente tensores. Además, Keras asimila correctamente las matrices de R, mientras que TensorFlow y Keras tienen su propio tipo de tensor.

  • Tendremos que transformar la columna de nuestra variable respuesta, que es categórica (setosa, versicolor, virginica) en tres columnas de 0 o 1 que nos indicarán si el iris es de tal o cual tipo. Como primera aproximación, podría estar tentado de transformar las categorías en niveles (1,2,3), pero el método adoptado aquí es mucho más potente y generalizable.

  • Tendremos que realizar la operación inversa, pasando de tres columnas a una, con objeto de que los resultados sean más comprensibles para los humanos.

Entonces, ¿por qué hacer todo esto? He aquí algunas pistas:

  • Este nuevo contexto es muy propicio para el desarrollo de redes neuronales de todo tipo, modernas y, en ocasiones, basadas en modelos que están parcialmente entrenados (con la técnica de transfer learning, que se puede implementar fácilmente con Keras).

  • Los modelos que se crean son exportables y, algunas veces, se pueden utilizar directamente en una amplia variedad de contextos, que van desde supercomputadoras hasta componentes electrónicos, incluidos teléfonos móviles, objetos cotidianos o add-on usb en los que se puede exportar la ejecución de modelos.

  • Podremos trabajar de manera más fina nuestro modelo y visualizar la evolución de sus métricas durante las iteraciones de su construcción (las famosas epochs), como la función de pérdida (loss) y la precisión o accuracy (en el caso de variables categóricas).

  • Algunos contextos técnicos empresariales se basan en potentes implementaciones de TensorFlow, lo que le permite acceder a una gran...