Todo lo que debes saber acerca de TensorFlow 2.0 y Keras, según el creador de Keras

Publicado por @SpainML el March 12, 2019, 8:53 p.m.
¡Hola a todos! Este post explica lo que deberías saber sobre el uso de TensorFlow 2.0 y Keras según François Chollet, creador de la propia librería Keras. El contenido es una traducción al castellano de un hilo de Twitter publicado desde la cuenta @fchollet. Ahí van las ideas clave que expone: - La primera clase que necesitas es `Layer`, que encapsula un estado (matriz de pesos o *weights*) y algún cómputo (definido en el método `call`). ![enter image description here][1] - El método `add_weight` sirve como atajo para la creación de la matriz de pesos) - Definir la creación de pesos en un método separado denominado `build` es una buena práctica. En el siguiente ejemplo se muestra una forma de definirlo que permite no tener que especificar el parámetro `input_dim`. ![enter image description here][2] - Se pueden obtener los gradientes de los pesos de una capa de manera automática llamándola dentro de un `GradientTape`. Usando estos gradientes se pueden actualizar los pesos de la capa tanto de forma manual como utilizando un objeto optimizador. También se pueden modificar los gradientes antes de usarse. ![enter image description here][3] - Los pesos creados por capas pueden ser tanto entrenables como no entrenables, quedando esto reflejado en las propiedades `trainable_weights` y `non_trainable_weights` de la capa. Aquí se muestra un ejemplo de una capa cuyos pesos no son entrenables. ![enter image description here][4] - Las capas pueden ser anidadas de manera recursiva para crear bloques de computación mayores. Cada capa *trackea* los pesos de sus subcapas (ya sean entrenables o no entrenables). ![enter image description here][5] - Las capas pueden crear pérdidas durante la propagación hacia adelante, lo cual es especialmente útil para pérdidas de regularización. Las pérdidas creadas por subcapas son *trackeadas* de manera recursiva por sus súper capas. ![enter image description here][6] - Estas pérdidas se reinician por la capa de alto nivel al principio de cada propagación hacia adelante de manera que no se acumulan. `layer.losses` siempre contiene únicamente las pérdidas creadas durante la última propagación hacia adelante. ![enter image description here][7] - TensorFlow 2.0 se ejecuta en modo *eager* por defecto, lo cual está bien en el caso de que se busque hacer *debugging*, pero se obtienen mejores rendimientos compilando la computación en grafos estáticos. Se puede compilar cualquier función envolviéndola con `tf.function` ![enter image description here][8] - Algunas capas, en particular las de `BatchNormalization` y `Dropout`, tienen distintos comportamientos dependiendo de si están en modo entrenamiento o inferencia. Para dichas capas, una práctica estandarizada es exponer un argumento *booleano* denominado `training` en el método `call`. ![enter image description here][9] - Existen muchas capas predefinidas, desde `Dense` hasta `Conv2D` ó `LSTM` e incluso otras como `Conv2DTranspose` ó `ConvLSTM2D`. - Para construir modelos de *Deep Learning* no es necesario utilizar programación orientada a objetos todo el tiempo. Todas las capas también pueden llamarse a través de la *Functional API*. ![enter image description here][12] Si quieres experimentar, aquí tienes este [Google Colaboratory][10] con ejemplos. Y si has llegado hasta aquí y no eres miembro aún de la comunidad de Slack de SpainML, puedes entrar ya mismo a través de este [enlace][11]. [1]: https://pbs.twimg.com/media/D1Y98h9VYAAMsO0.jpg [2]: https://pbs.twimg.com/media/D1Y-krTVYAAiZI9.jpg [3]: https://pbs.twimg.com/media/D1Y-tSmUwAAAixK.jpg [4]: https://pbs.twimg.com/media/D1Y--HqVAAAR_2V.jpg [5]: https://pbs.twimg.com/media/D1Y_NTxUcAAfznr.jpg [6]: https://pbs.twimg.com/media/D1Y_hhSU4AAsJnO.jpg [7]: https://pbs.twimg.com/media/D1Y_ymLVYAANNLZ.jpg [8]: https://pbs.twimg.com/media/D1ZAFPFVYAIgisO.jpg [9]: https://pbs.twimg.com/media/D1ZAV0tUcAAm3DK.jpg [10]: https://colab.research.google.com/drive/17u-pRZJnKN0gO5XZmq8n5A2bKGrfKEUg [11]: http://bit.ly/JoinSpainML [12]: https://pbs.twimg.com/media/D1ZA16gV4AEhPPP.jpg