{"id":2322,"date":"2020-11-15T14:04:00","date_gmt":"2020-11-15T20:04:00","guid":{"rendered":"https:\/\/naps.com.mx\/blog\/?p=2322"},"modified":"2021-10-13T09:06:58","modified_gmt":"2021-10-13T14:06:58","slug":"un-primer-ejemplo-explicado-de-tensorflow","status":"publish","type":"post","link":"https:\/\/naps.com.mx\/blog\/un-primer-ejemplo-explicado-de-tensorflow\/","title":{"rendered":"Un primer ejemplo explicado de TensorFlow"},"content":{"rendered":"<p>Demostramos, a trav\u00e9s de un ejemplo explicado de TensorFlow, la forma de trabajar con \u00e9sta biblioteca de desarrollo de modelos de Machine Learning.<\/p>\n<p><!--more--><\/p>\n<p><strong>\u00bfQu\u00e9 es TensorFlow?<\/strong><\/p>\n<p>TensorFlow es una biblioteca c\u00f3digo abierto para aprender a desarrollar y entrenar modelos de Machine Learning; cuenta con herramientas y recursos que permiten impulsar un aprendizaje autom\u00e1tico innovador.<\/p>\n<h2>Ejemplo explicado de TensorFlow en Python<\/h2>\n<p>A continuaci\u00f3n vamos a crear un modelo que nos permitir\u00e1 convertir grados celsius a grados Fahrenheit sin utilizar una f\u00f3rmula. Le proporcionaremos al modelo una serie de unos 30 datos de ejemplos de conversi\u00f3n y con base en ellos, el modelo \u00abaprender\u00e1\u00bb c\u00f3mo convertir de grados celsius a grados fahrenheit.<\/p>\n<h3>Instalaci\u00f3n de TensorFlow en Python<\/h3>\n<p>Puedes instalar TensorFlow en Python utilizando el siguiente comando:<\/p>\n<pre class=\"lang:batch decode:true \">pip install tensorflow<\/pre>\n<p>o bien<\/p>\n<pre class=\"lang:default decode:true \">pip3 install tensoflow<\/pre>\n<h2>C\u00f3digo del ejemplo explicado de TensorFlow<\/h2>\n<h3>Paso 1. Importar las librer\u00edas<\/h3>\n<pre class=\"lang:python decode:true\">import pandas as pd\r\nimport seaborn as sns\r\nimport matplotlib.pyplot as plt\r\nimport tensorflow as tf<\/pre>\n<p>Las librer\u00edas que utilizaremos son:<\/p>\n<p><a href=\"https:\/\/naps.com.mx\/blog\/pandas-en-python-lo-que-debes-saber\/\"><strong>Pandas<\/strong><\/a>, para leer el archivo que contiene los datos<\/p>\n<p><strong>Seaborn<\/strong> y <a href=\"https:\/\/naps.com.mx\/blog\/ejemplos-en-matplotlib-de-5-tipos-graficos\/\"><strong>Matplotlib<\/strong><\/a> para la visualizaci\u00f3n de gr\u00e1ficos<\/p>\n<p><strong>Tensorflow<\/strong> para crear un modelo de machine learning<\/p>\n<h3>Paso 2. Obtenci\u00f3n de los datos<\/h3>\n<pre class=\"lang:python decode:true\">print (\"Leyendo CSV\")\r\ntemperature_df = pd.read_csv(\"celsius_a_fahrenheit.csv\")\r\n\r\n# Visualizaci\u00f3n\r\nsns.scatterplot(temperature_df['Celsius'], temperature_df['Fahrenheit'])\r\nplt.show()<\/pre>\n<p>Primero, leemos los datos que se encuentran en el archivo celsius_a_fahrenheit.csv.<\/p>\n<p>El archivo est\u00e1 disponible en:\u00a0<a href=\"https:\/\/drive.google.com\/file\/d\/1InzN9ULPJJvPEgy4kslLJMj2zKOq20P8\/view?usp=sharing\">https:\/\/drive.google.com\/file\/d\/1InzN9ULPJJvPEgy4kslLJMj2zKOq20P8\/view?usp=sharing<\/a><\/p>\n<p>Adem\u00e1s, se utiliza scatterplot para mostrar que los datos est\u00e1n correlacionados.<\/p>\n<p><a href=\"https:\/\/naps.com.mx\/blog\/wp-content\/uploads\/2020\/11\/ejemplo-explicado-de-tensorflow.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-2325\" src=\"https:\/\/naps.com.mx\/blog\/wp-content\/uploads\/2020\/11\/ejemplo-explicado-de-tensorflow.png\" alt=\"ejemplo explicado de tensorflow\" width=\"1504\" height=\"1300\" srcset=\"https:\/\/naps.com.mx\/blog\/wp-content\/uploads\/2020\/11\/ejemplo-explicado-de-tensorflow.png 1504w, https:\/\/naps.com.mx\/blog\/wp-content\/uploads\/2020\/11\/ejemplo-explicado-de-tensorflow-300x259.png 300w, https:\/\/naps.com.mx\/blog\/wp-content\/uploads\/2020\/11\/ejemplo-explicado-de-tensorflow-768x664.png 768w, https:\/\/naps.com.mx\/blog\/wp-content\/uploads\/2020\/11\/ejemplo-explicado-de-tensorflow-1024x885.png 1024w\" sizes=\"auto, (max-width: 1504px) 100vw, 1504px\" \/><\/a><\/p>\n<h3>Paso 3. Selecci\u00f3n de las variables independiente y objetivo<\/h3>\n<pre class=\"lang:python decode:true\">#Cargando Set de Datos\r\nprint (\"Seleccionando las columnas\")\r\nX_train = temperature_df['Celsius']\r\ny_train = temperature_df['Fahrenheit']<\/pre>\n<p>Los datos obtenidos contienen dos columnas. La primer llamada Celsius, ser\u00e1 nuestra variable independiente. La segunda, llamada Fahrenheit, ser\u00e1 la variable objetivo. Es decir, una vez entrenado, el modelo ser\u00e1 capaz de indicar los grados fahrenheit si le proporcionamos los grados celsius.<\/p>\n<h3>Paso 4. Creaci\u00f3n del modelo<\/h3>\n<pre class=\"lang:python decode:true\">#Creando el Modelo\r\nprint (\"Creando el modelo\")\r\nmodel = tf.keras.Sequential()\r\nmodel.add(tf.keras.layers.Dense(units=1, input_shape=[1]))<\/pre>\n<p>En \u00e9sta parte del c\u00f3digo utilizamos Keras. Keras es una biblioteca escrita en Python que nos permite crear redes neuronales. Keras nos permite acceder a varios frameworks de machine learning, entre ellos, TensorFlow.<\/p>\n<p>keras.Sequential nos permite crear una red neuronal en keras a la que se le agregan \u00abcapas\u00bb en forma secuencial. Un modelo en keras se considera \u00abcomo una secuencia de capas que cada una de ellas va \u201cdestilando\u201d gradualmente los datos de entrada para obtener la salida deseada\u00bb (Torres, 2018).<\/p>\n<p>add agrega una capa al modelo. Cuando un modelo tiene capas densamente conectadas, todas las neuronas de cada capa est\u00e1n conectadas con todas las neuronas de la capa siguiente.<\/p>\n<h3>Paso 5. Compilaci\u00f3n del modelo<\/h3>\n<pre class=\"lang:python decode:true \">#Compilado\r\nprint (\"Compilando el modelo\")\r\nmodel.compile(optimizer=tf.keras.optimizers.Adam(1), loss='mean_squared_error')<\/pre>\n<p>Antes de que el modelo sea entrenado, se agregan configuraciones adicionales durante el paso de compilaci\u00f3n. En \u00e9ste caso se configura un optimizador y una funci\u00f3n de p\u00e9rdida, que mide qu\u00e9 tan exacto es el modelo. La funci\u00f3n de p\u00e9rdida utiliza es el \u00aberror cuadrado promedio\u00bb que\u00a0b\u00e1sicamente mide el error cuadrado promedio de nuestras predicciones. El modelo tratar\u00e1 de minimizar \u00e9sta funci\u00f3n para dirigir el modelo a la direcci\u00f3n adecuada.<\/p>\n<h3>Paso 6. Entrenamiento del modelo<\/h3>\n<pre class=\"lang:python decode:true\">#Entrenando el modelo\r\nprint (\"Entrenando el modelo\")\r\nepochs_hist = model.fit(X_train, y_train, epochs = 100)\r\n<\/pre>\n<p>Usamos fit para entrenar el modelo. Le pasamos como par\u00e1metros la variable independiente (Grados Celsius) y la variable objetivo (Grados Fahrenheit) . Tambi\u00e9n le indicamos que deseamos 100 epochs. Un epoch representa una iteraci\u00f3n completa del conjunto \u00a0de entrenamiento. El n\u00famero de epochs es la cantidad de veces que se ejecutar\u00e1 el algoritmo.<\/p>\n<p>A continuaci\u00f3n evaluaremos el modelo.<\/p>\n<pre class=\"lang:python decode:true\">#Evaluando modelo\r\nprint (\"Evaluando el modelo entrenado\")\r\nprint (\"Keys:\")\r\nprint(epochs_hist.history.keys())\r\n\t\r\n#Grafico\r\nplt.plot(epochs_hist.history['loss'])\r\nplt.title('Progreso de P\u00e9rdida durante Entrenamiento del Modelo')\r\nplt.xlabel('Epoch')\r\nplt.ylabel('Training Loss')\r\nplt.legend('Training Loss')\r\nplt.show()<\/pre>\n<p>Primero utilizamos epochs_hist.history.keys() \u00a0para mostrar el nombre de las llaves. Observamos que el nombre es \u00abloss\u00bb. Despu\u00e9s, procedemos a graficar ese dato.<\/p>\n<p>La gr\u00e1fica obtenida es similar a la siguiente:<\/p>\n<p><a href=\"https:\/\/naps.com.mx\/blog\/wp-content\/uploads\/2020\/11\/ejemplo-explicado-de-tensorflow-perdida.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-2328\" src=\"https:\/\/naps.com.mx\/blog\/wp-content\/uploads\/2020\/11\/ejemplo-explicado-de-tensorflow-perdida.png\" alt=\"ejemplo explicado de tensorflow perdida\" width=\"1504\" height=\"1300\" srcset=\"https:\/\/naps.com.mx\/blog\/wp-content\/uploads\/2020\/11\/ejemplo-explicado-de-tensorflow-perdida.png 1504w, https:\/\/naps.com.mx\/blog\/wp-content\/uploads\/2020\/11\/ejemplo-explicado-de-tensorflow-perdida-300x259.png 300w, https:\/\/naps.com.mx\/blog\/wp-content\/uploads\/2020\/11\/ejemplo-explicado-de-tensorflow-perdida-768x664.png 768w, https:\/\/naps.com.mx\/blog\/wp-content\/uploads\/2020\/11\/ejemplo-explicado-de-tensorflow-perdida-1024x885.png 1024w\" sizes=\"auto, (max-width: 1504px) 100vw, 1504px\" \/><\/a><\/p>\n<p>Observamos que la p\u00e9rdida (Training_loss) va disminuyendo a medida que se realizan m\u00e1s iteraciones (epoch).<\/p>\n<h2>Realizar una predicci\u00f3n utilizando el modelo entrenado<\/h2>\n<pre class=\"lang:python decode:true\">Temp_C = 0\r\nTemp_F = model.predict([Temp_C])\r\nprint(\"Temperatura de Prediccion: \" + str(Temp_F))<\/pre>\n<p>Teniendo nuestro modelo entrenado, ya podemos realizar una predicci\u00f3n. En \u00e9ste caso, le damos una valor en grados Celsius (Temp_C) y el modelo nos devuelve el resultado que el cree correcto en grados Fahrenheit (Temp_F).<\/p>\n<pre class=\"lang:python decode:true\">Temp_F = 9\/5 * Temp_C + 32\r\nprint(\"Temperatura de Ecuacion: \" + str(Temp_F))<\/pre>\n<p>Adicionalmente, mostramos el resultado utilizando la f\u00f3rmula matem\u00e1tica, para corroborar qu\u00e9 tan cercana fue la predicci\u00f3n que el modelo arroj\u00f3.<\/p>\n<p><a href=\"https:\/\/naps.com.mx\/blog\/wp-content\/uploads\/2020\/11\/ejemplo-explicado-de-tensor-flow-salida.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-2331\" src=\"https:\/\/naps.com.mx\/blog\/wp-content\/uploads\/2020\/11\/ejemplo-explicado-de-tensor-flow-salida.png\" alt=\"ejemplo explicado de tensor flow salida\" width=\"2004\" height=\"1382\" srcset=\"https:\/\/naps.com.mx\/blog\/wp-content\/uploads\/2020\/11\/ejemplo-explicado-de-tensor-flow-salida.png 2004w, https:\/\/naps.com.mx\/blog\/wp-content\/uploads\/2020\/11\/ejemplo-explicado-de-tensor-flow-salida-300x207.png 300w, https:\/\/naps.com.mx\/blog\/wp-content\/uploads\/2020\/11\/ejemplo-explicado-de-tensor-flow-salida-768x530.png 768w, https:\/\/naps.com.mx\/blog\/wp-content\/uploads\/2020\/11\/ejemplo-explicado-de-tensor-flow-salida-1024x706.png 1024w\" sizes=\"auto, (max-width: 2004px) 100vw, 2004px\" \/><\/a><\/p>\n<p>Espero que \u00e9ste ejemplo te haya permitido conocer un poco sobre \u00e9sta biblioteca para Machine Learning que es TensorFlow.<\/p>\n<p>Referencias:<\/p>\n<ol>\n<li>Torres(2018). <a href=\"https:\/\/torres.ai\/deep-learning-inteligencia-artificial-keras\/\" target=\"_blank\" rel=\"noopener\" class=\"broken_link\">Deep Learning. Introducci\u00f3n pr\u00e1ctica con Keras<\/a>. Disponible en: [https:\/\/torres.ai\/deep-learning-inteligencia-artificial-keras\/] consultado el [15-11-2020]<\/li>\n<\/ol>\n<h2>Te puede interesar:<\/h2>\n<p><iframe loading=\"lazy\" width=\"732\" height=\"412\" src=\"https:\/\/www.youtube.com\/embed\/Ok6n0ys5Edc\" title=\"YouTube video player\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"allowfullscreen\"><\/iframe><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Demostramos, a trav\u00e9s de un ejemplo explicado de TensorFlow, la forma de trabajar con \u00e9sta biblioteca de desarrollo de modelos de Machine Learning.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"amp_status":"","footnotes":""},"categories":[315],"tags":[310,284,321],"class_list":["post-2322","post","type-post","status-publish","format-standard","hentry","category-machine-learning","tag-inteligencia-artificial","tag-machine-learning","tag-tensorflow"],"_links":{"self":[{"href":"https:\/\/naps.com.mx\/blog\/wp-json\/wp\/v2\/posts\/2322","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/naps.com.mx\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/naps.com.mx\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/naps.com.mx\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/naps.com.mx\/blog\/wp-json\/wp\/v2\/comments?post=2322"}],"version-history":[{"count":9,"href":"https:\/\/naps.com.mx\/blog\/wp-json\/wp\/v2\/posts\/2322\/revisions"}],"predecessor-version":[{"id":2419,"href":"https:\/\/naps.com.mx\/blog\/wp-json\/wp\/v2\/posts\/2322\/revisions\/2419"}],"wp:attachment":[{"href":"https:\/\/naps.com.mx\/blog\/wp-json\/wp\/v2\/media?parent=2322"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/naps.com.mx\/blog\/wp-json\/wp\/v2\/categories?post=2322"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/naps.com.mx\/blog\/wp-json\/wp\/v2\/tags?post=2322"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}