{"id":1487,"date":"2019-02-14T15:39:59","date_gmt":"2019-02-14T14:39:59","guid":{"rendered":"https:\/\/evenbytes.com\/?p=1487"},"modified":"2019-02-14T15:41:39","modified_gmt":"2019-02-14T14:41:39","slug":"construccion-de-un-modelo-de-machine-learning-usando-tensorflow-parte-1","status":"publish","type":"post","link":"https:\/\/evenbytes.com\/es\/construccion-de-un-modelo-de-machine-learning-usando-tensorflow-parte-1\/","title":{"rendered":"Construcci\u00f3n de un modelo de Machine Learning usando TensorFlow (parte 1)"},"content":{"rendered":"\n<p>Hoy, en pleno proceso de digitalizaci\u00f3n de las industrias, hay un campo que destaca especialmente por su eficacia y flexibilidad para producir este cambio. Y es el caso de la IA (Inteligencia Artificial). Aunque este campo ya era investigado desde antes del siglo XXI, no fue hasta la \u00faltima d\u00e9cada donde se produjo el<em> \u00a1Boom!<\/em> para convertirse en uno de los campos m\u00e1s investigados y solicitados, creando una demanda en la sociedad actual que no da a basto para suplirlas.<br><\/p>\n\n\n\n<p>En este art\u00edculo en concreto, voy a centrarme en una subrama de la IA, llamada Machine Learning, donde m\u00e1s concretamente me enfocar\u00e9 en la creaci\u00f3n de un modelo de predicci\u00f3n usando Tensorflow y como ejemplo de tarea intentar\u00e9 la de clasificar monos y humanos en una imagen dada.<br><\/p>\n\n\n\n<p>Para ello, en primer lugar necesitamos preparar la parte m\u00e1s importante de un modelo, los datos de entrenamiento. Este procedimiento suele ser la parte m\u00e1s pesada de un proyecto de ML, donde abarca entre un 70% &#8211; 80% del tiempo total invertido en un proyecto, esto es debido a que los datos interfieren directamente con el porcentaje de acierto a la hora de predecir sobre los nuevos datos obtenidos. Pongamos un ejemplo, queremos clasificar en una imagen un perro y un gato, pero los datos de entrenamiento que hemos creado, contienen en gran parte fotos de perros pero muy pocas de gatos, esto puede provocar que una vez entrenado el modelo con estos datos, al llegar el momento de la predicci\u00f3n de im\u00e1genes nuevas se equivoque un gato con un perro. Esto es debido a que al darle tan pocas im\u00e1genes de gatos el modelo no ha conseguido suficiente informaci\u00f3n para identificar los patrones que diferencian los perros de los gatos. Por eso debemos hacer que nuestros datos de entrenamiento sean lo m\u00e1s balanceados posibles para que no ocurran casos como este.<br><\/p>\n\n\n\n<p>Para nuestro ejemplo, he seleccionado im\u00e1genes de monos y personas en cantidades similares y las he clasificado dependiendo de si aparec\u00eda un mono o un humano, usando LabelImg, que nos permite la clasificaci\u00f3n de \u00a0im\u00e1genes gr\u00e1ficamente y ayuda a generar un archivo XML que indica en qu\u00e9 p\u00edxeles de la imagen aparece el objetivo. <\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/lh5.googleusercontent.com\/X82YYhk8mekMpJUfQbymEpx14Nr8CVpQ931E1hjlk4xg7jtGBuLwUKNHzvuD_q7uXuJivUHUFiUym-MDievlSm4WqflctFTXLWY9Jdwf5OJnywt89VFQiURFBziKaJoufrpKnA98\" alt=\"\"\/><\/figure>\n\n\n\n<p>Despu\u00e9s de pasar horas y horas clasificando todas las im\u00e1genes, ha llegado el momento de codificar. Pero, \u00bfen qu\u00e9 se codifica ML? Te preguntar\u00e1s. Aunque hoy en d\u00eda existen multitud de lenguajes de programaci\u00f3n que facilitan la tarea de crear modelos de ML, hay un lenguaje que destaca por encima de todos, y es el caso de Python. \u00bfPor qu\u00e9 Python?, es debido a que Python nos proporciona una gran cantidad de librer\u00edas descargables, como TensorFlow o Keras, que nos ayudan a modelar nuestro modelo de forma f\u00e1cil y sencillo y otras librer\u00edas que nos permite adaptar nuestros datos de entrenamiento al formato del input que pide TensorFlow.<br><\/p>\n\n\n\n<p>Pero antes de empezar a escribir una l\u00ednea de c\u00f3digo, necesitamos realizar paso &nbsp;m\u00e1s, y es preparar la estructura interna de la carpeta de datos, ya que, a pesar de que TensorFlow nos ayuda a crear los archivos TFRecord que son los que se pasa al modelo para entrenar, los Scripts para crear estos ficheros piden una entrada de unas carpetas en concreto y, por tanto, tenemos que adaptar nuestra carpeta de dataset a ello.<br><\/p>\n\n\n\n<p>En primer lugar, la carpeta necesita un formato tal que as\u00ed:<br><\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter\"><img decoding=\"async\" src=\"https:\/\/lh5.googleusercontent.com\/xkjhAH_Omo8t3URST16IqHHlO1r2nXRIeaaBOJwJiC79390myEC0kZzNODYdW7CGbEwv27Zo1rbX4IquCPDLhgjjmmy4BgzTyI0BxBJ8g3UlluPSIuOgg0cL3583uE_vqkPCcg7u\" alt=\"\"\/><\/figure><\/div>\n\n\n\n<p>Como se puede observar la estructura es muy simple, donde en la carpeta ra\u00edz se encuentra la carpeta que almacena las im\u00e1genes y luego otra que almacena las anotaciones, estas anotaciones son los archivos XML que hemos generado a partir de clasificar las im\u00e1genes con el programa LabelImg, y por otro lado un fichero label_map.pbtxt que contendr\u00e1 las objetivos que queremos clasificar en este caso son humanos y monos por lo que el archivo tendr\u00e1 un formato igual a este:<br><\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" width=\"138\" height=\"190\" src=\"https:\/\/evenbytes.com\/wp-content\/uploads\/2019\/02\/image-1.png\" alt=\"\" class=\"wp-image-1490\"\/><\/figure>\n\n\n\n<p><a href=\"https:\/\/evenbytes.com\/es\/construccion-de-un-modelo-de-machine-learning-usando-tensorflow-parte-2\/\">CONTINUAR CON LA PARTE 2 -><\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Hoy, en pleno proceso de digitalizaci\u00f3n de las industrias, hay un campo que destaca especialmente por su eficacia y flexibilidad para producir este cambio. Y es el caso de la IA (Inteligencia Artificial). Aunque este campo ya era investigado desde antes del siglo XXI, no&#8230;<\/p>\n","protected":false},"author":2,"featured_media":1493,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[55,83],"tags":[86,84,85],"class_list":["post-1487","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-develop-es","category-machine-learning","tag-ia","tag-machine-learning","tag-tensorflow"],"_links":{"self":[{"href":"https:\/\/evenbytes.com\/es\/wp-json\/wp\/v2\/posts\/1487","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/evenbytes.com\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/evenbytes.com\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/evenbytes.com\/es\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/evenbytes.com\/es\/wp-json\/wp\/v2\/comments?post=1487"}],"version-history":[{"count":2,"href":"https:\/\/evenbytes.com\/es\/wp-json\/wp\/v2\/posts\/1487\/revisions"}],"predecessor-version":[{"id":1498,"href":"https:\/\/evenbytes.com\/es\/wp-json\/wp\/v2\/posts\/1487\/revisions\/1498"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/evenbytes.com\/es\/wp-json\/wp\/v2\/media\/1493"}],"wp:attachment":[{"href":"https:\/\/evenbytes.com\/es\/wp-json\/wp\/v2\/media?parent=1487"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/evenbytes.com\/es\/wp-json\/wp\/v2\/categories?post=1487"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/evenbytes.com\/es\/wp-json\/wp\/v2\/tags?post=1487"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}