{"id":31975,"date":"2017-04-10T19:21:00","date_gmt":"2017-04-10T16:21:00","guid":{"rendered":"https:\/\/www.altoros.com\/blog\/?p=31975"},"modified":"2018-08-01T17:08:01","modified_gmt":"2018-08-01T14:08:01","slug":"building-a-keras-based-image-classifier-using-tensorflow-for-a-back-end","status":"publish","type":"post","link":"https:\/\/www.altoros.com\/blog\/building-a-keras-based-image-classifier-using-tensorflow-for-a-back-end\/","title":{"rendered":"Building a Keras-Based Image Classifier Using TensorFlow for a Back End"},"content":{"rendered":"<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_79_2 counter-hierarchy ez-toc-counter ez-toc-transparent ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">Table of Contents<\/p>\n<span class=\"ez-toc-title-toggle\"><a href=\"#\" class=\"ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle\" aria-label=\"Toggle Table of Content\"><span class=\"ez-toc-js-icon-con\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/span><\/a><\/span><\/div>\n<nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/www.altoros.com\/blog\/building-a-keras-based-image-classifier-using-tensorflow-for-a-back-end\/#Keras_TensorFlow\" >Keras + TensorFlow<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/www.altoros.com\/blog\/building-a-keras-based-image-classifier-using-tensorflow-for-a-back-end\/#Running_a_Docker_container\" >Running a Docker container<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/www.altoros.com\/blog\/building-a-keras-based-image-classifier-using-tensorflow-for-a-back-end\/#The_exemplified_data_set\" >The exemplified data set<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/www.altoros.com\/blog\/building-a-keras-based-image-classifier-using-tensorflow-for-a-back-end\/#Further_reading\" >Further reading<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/www.altoros.com\/blog\/building-a-keras-based-image-classifier-using-tensorflow-for-a-back-end\/#About_the_expert\" >About the expert<\/a><\/li><\/ul><\/nav><\/div>\n<h3><span class=\"ez-toc-section\" id=\"Keras_TensorFlow\"><\/span>Keras + TensorFlow<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p><img decoding=\"async\" src=\"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2017\/04\/keras-logo-small.jpg\" alt=\"keras-logo-small\" width=\"120\" style=\"margin: 0px 0px 20px 20px;\" class=\"alignright size-full wp-image-12761\" \/><\/p>\n<p>Written in Python, <a href=\"https:\/\/keras.io\/\" target=\"_blank\">Keras<\/a> is a high-level neural networks API that can be run on top of TensorFlow. This API was designed to provide machine learning enthusiasts with a tool that enables easy and fast prototyping, supports both <a href=\"https:\/\/www.altoros.com\/blog\/using-convolutional-neural-networks-and-tensorflow-for-image-classification\/\">convolutional<\/a> and <a href=\"https:\/\/www.altoros.com\/blog\/using-recurrent-neural-networks-and-tensorflow-to-recognize-handwriting\/\">recurrent neural networks<\/a> (and a combination of the two), while running on a CPU or GPU.<\/p>\n<p>At the recent <a href=\"https:\/\/www.altoros.com\/webinars\/image-classification-done-simply-using-keras-and-tensorflow\">webinar<\/a>, the attendees learned how to build an image classifier from scratch using Keras on top of TensorFlow, how containerization can help, how to fight data overfitting and reach 90% of accuracy, etc.<\/p>\n<p><a href=\"https:\/\/www.linkedin.com\/in\/rcshah\/\" target=\"_blank\">Rajiv Shah<\/a>, a senior data scientist at Catepillar Inc., demonstrated how to build a Keras-based image classifier with TensorFlow as a back end.<\/p>\n<p>The webinar highlighted how to:<\/p>\n<ul>\n<li>run a Docker container on Keras<\/li>\n<li>train a simple convolutional network (as a baseline)<\/li>\n<li>use the bottleneck features of a pre-trained network<\/li>\n<li>fine-tune the top layers of a pre-trained network<\/li>\n<\/ul>\n<p><center><a href=\"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2017\/04\/keras-based-image-classifier-with-tensorflow-as-a-back-end-pre-trained-networks-v1.jpg\"><img decoding=\"async\" src=\"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2017\/04\/keras-based-image-classifier-with-tensorflow-as-a-back-end-pre-trained-networks-v1.jpg\" alt=\"\" width=\"640\" class=\"aligncenter size-full wp-image-31980\" \/><\/a><\/center><\/p>\n<p>Building an image classifier, Rajiv actively employed such Keras functionality as <code style=\"color: #222222; background-color: #e6e6e6; padding: 1px 2px;\">fit_generator<\/code> to train a model and <code style=\"color: #222222; background-color: #e6e6e6; padding: 1px 2px;\">ImageDataGenerator<\/code> for real-time data augmentation.<\/p>\n<p>&nbsp;<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Running_a_Docker_container\"><\/span>Running a Docker container<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>With numerous Python libraries that have conflicting dependencies, it is quite difficult to replicate the work done. Containerization helps to isolate workers from the environment and abstract away some version dependencies that may be different for different jobs.<\/p>\n<p>In his example, Rajiv uses a Docker container\u2014<code style=\"color: #222222; background-color: #e6e6e6; padding: 1px 2px;\">ermaker\/keras-jupyter<\/code>. Those, who want to run his particular <a href=\"https:\/\/github.com\/rajshah4\/image_keras\/blob\/master\/notebook.ipynb\" target=\"_blank\">code<\/a>, can do it with the following command:<\/p>\n<p><code style=\"color: #222222; background-color: #e6e6e6; padding: 1px 2px;\">docker run -d -p 8888:8888 -e KERAS_BACKEND=tensorflow -v \/Users\/rajivshah\/Code:\/notebook ermaker\/keras-jupyter<\/code><\/p>\n<p>Then, you have to substitute a local path to the <a href=\"https:\/\/github.com\/rajshah4\/image_keras\/blob\/master\/notebook.ipynb\" target=\"_blank\">Rajiv\u2019s tutorial<\/a> and data for <code style=\"color: #222222; background-color: #e6e6e6; padding: 1px 2px;\">\/Users\/rajivshah\/Code<\/code>.<\/p>\n<p>&nbsp;<\/p>\n<h3><span class=\"ez-toc-section\" id=\"The_exemplified_data_set\"><\/span>The exemplified data set<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>As a sample image classifier was to differentiate cats and dogs, two major sources of data were chosen:<\/p>\n<ul>\n<li><a href=\"https:\/\/www.kaggle.com\/c\/dogs-vs-cats\/data\" target=\"_blank\">a Kaggle data set<\/a><\/li>\n<li><a href=\"https:\/\/gist.github.com\/baraldilorenzo\/07d7802847aaad0a35d3\" target=\"_blank\">VGG16 weights<\/a><\/li>\n<\/ul>\n<p><center><a href=\"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2017\/04\/the-vgg16-model-architecture-tensorflow-keras.png\"><img decoding=\"async\" src=\"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2017\/04\/the-vgg16-model-architecture-tensorflow-keras-1024x600.png\" alt=\"\" width=\"640\" class=\"aligncenter size-large wp-image-31981\" \/><\/a><small>The VGG16 model architecture (<a href=\"https:\/\/blog.heuritech.com\/2016\/02\/29\/a-brief-report-of-the-heuritech-deep-learning-meetup-5\" target=\"_blank\">Image credit<\/a>)<\/small><\/center><br \/>\n<\/p>\n<p>(Note: for his example, Rajiv utilized only 2&#215;1,000 training images and 2&#215;400 testing images among the 2&#215;12,500 available to demonstrate how to train a small data set.)<\/p>\n<p>Neural networks are prone to data <a href=\"https:\/\/en.wikipedia.org\/wiki\/Overfitting\" target=\"_blank\">overfitting<\/a>, when some random error or noise occurs instead of the underlying relationship. To enhance a data set, random transformation is applied to reduce overfitting and enable better generalization for a convolutional network. With data augmentation, Rajiv achieved ~80% of accuracy on the validation data set.<\/p>\n<p><center><a href=\"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2017\/04\/keras-based-image-classifier-with-tensorflow-as-a-back-end-data-overfitting-v1.png\"><img decoding=\"async\" src=\"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2017\/04\/keras-based-image-classifier-with-tensorflow-as-a-back-end-data-overfitting-v1.png\" alt=\"\" width=\"640\" class=\"aligncenter size-full wp-image-31979\" \/><\/a><\/center><\/p>\n<p>As a result of training the data set using the VGG16 model with a small multi-layer perceptron, Rajiv was able to identify bottleneck features. Then, he evaluated the bottleneck model and reached 90% of accuracy on the validation in just a minute (~20 epochs), employing only 8% of the samples available on the Kaggle data set.<\/p>\n<p><center><a href=\"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2017\/04\/keras-based-image-classifier-with-tensorflow-as-a-back-end-data-augmentation-v12.gif\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2017\/04\/keras-based-image-classifier-with-tensorflow-as-a-back-end-data-augmentation-v12.gif\" alt=\"\" width=\"640\" height=\"339\" class=\"aligncenter size-full wp-image-31978\" \/><\/a><\/center><\/p>\n<p>In his research, Rajiv relied on <a href=\"https:\/\/blog.keras.io\/building-powerful-image-classification-models-using-very-little-data.html\" target=\"_blank\">this Keras tutorial<\/a> and <a href=\"https:\/\/github.com\/gggdomi\/keras-workshop\" target=\"_blank\">this workshop<\/a>. You can find the source code for each of the steps he took on <a href=\"https:\/\/github.com\/rajshah4\/image_keras\/blob\/master\/notebook_extras.ipynb\" target=\"_blank\">Rajiv\u2019s GitHub repo<\/a>. His presentation is also available <a href=\"https:\/\/github.com\/rajshah4\/dlgroup\/blob\/master\/Intro_CNN_TK.pdf\" target=\"_blank\">here<\/a>.<\/p>\n<p>Want detail? Watch the <a href=\"https:\/\/www.altoros.com\/webinars\/image-classification-done-simply-using-keras-and-tensorflow\">webinar recording<\/a>!<\/p>\n<p>&nbsp;<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Further_reading\"><\/span>Further reading<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<ul>\n<li><a href=\"https:\/\/www.altoros.com\/blog\/building-a-chatbot-with-tensorflow-and-keras\/\">Building a Chatbot with TensorFlow and Keras<\/a><\/li>\n<li><a href=\"https:\/\/www.altoros.com\/blog\/using-convolutional-neural-networks-and-tensorflow-for-image-classification\/\">Using Convolutional Neural Networks and TensorFlow for Image Classification<\/a><\/li>\n<li><a href=\"https:\/\/www.altoros.com\/blog\/using-convolutional-neural-networks-and-tensorflow-for-image-classification\/\">Image and Text Recognition with TensorFlow Using Convolutional Neural Networks<\/a><\/li>\n<li><a href=\"https:\/\/www.altoros.com\/blog\/using-recurrent-neural-networks-and-tensorflow-to-recognize-handwriting\/\">Using Recurrent Neural Networks and TensorFlow to Recognize Handwriting<\/a><\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<h3><span class=\"ez-toc-section\" id=\"About_the_expert\"><\/span>About the expert<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p><img decoding=\"async\" src=\"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2017\/04\/rajiv-shah.jpg\" alt=\"rajiv-shah\" width=\"120\" style=\"margin: 0px 0px 20px 20px;\" class=\"alignright size-full wp-image-12773\" \/><\/p>\n<p><small><a href=\"https:\/\/www.linkedin.com\/in\/rcshah\/\" target=\"_blank\">Rajiv Shah<\/a> is a Senior Data Scientist at Caterpillar Inc. and an Adjunct Assistant Professor at the University of Illinois at Chicago. He is an active member of the data science community in Chicago with an interest into public policy issues, such as surveillance in Chicago. Rajiv has a PhD from the University of Illinois at Urbana Champaign.<\/small><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Keras + TensorFlow<\/p>\n<p>Written in Python, Keras is a high-level neural networks API that can be run on top of TensorFlow. This API was designed to provide machine learning enthusiasts with a tool that enables easy and fast prototyping, supports both convolutional and recurrent neural networks (and a combination of the [&#8230;]<\/p>\n","protected":false},"author":3,"featured_media":31984,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"content-type":"","footnotes":"","_links_to":"","_links_to_target":""},"categories":[214],"tags":[748,749],"class_list":["post-31975","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-tutorials","tag-machine-learning","tag-tensorflow"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.6 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Building a Keras-Based Image Classifier Using TensorFlow for a Back End | Altoros<\/title>\n<meta name=\"description\" content=\"Learn how to develop an image classifier with Keras on top of TensorFlow, tackle data overfitting, and achieve 90% of accuracy.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.altoros.com\/blog\/building-a-keras-based-image-classifier-using-tensorflow-for-a-back-end\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Building a Keras-Based Image Classifier Using TensorFlow for a Back End | Altoros\" \/>\n<meta property=\"og:description\" content=\"Keras + TensorFlow Written in Python, Keras is a high-level neural networks API that can be run on top of TensorFlow. This API was designed to provide machine learning enthusiasts with a tool that enables easy and fast prototyping, supports both convolutional and recurrent neural networks (and a combination of the [...]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.altoros.com\/blog\/building-a-keras-based-image-classifier-using-tensorflow-for-a-back-end\/\" \/>\n<meta property=\"og:site_name\" content=\"Altoros\" \/>\n<meta property=\"article:published_time\" content=\"2017-04-10T16:21:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2018-08-01T14:08:01+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2017\/04\/building-keras-based-image-classifier-using-tensorflow-for-back-end.gif\" \/>\n\t<meta property=\"og:image:width\" content=\"640\" \/>\n\t<meta property=\"og:image:height\" content=\"477\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/gif\" \/>\n<meta name=\"author\" content=\"Sophia Turol\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Sophia Turol\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"3 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.altoros.com\/blog\/building-a-keras-based-image-classifier-using-tensorflow-for-a-back-end\/\",\"url\":\"https:\/\/www.altoros.com\/blog\/building-a-keras-based-image-classifier-using-tensorflow-for-a-back-end\/\",\"name\":\"Building a Keras-Based Image Classifier Using TensorFlow for a Back End | Altoros\",\"isPartOf\":{\"@id\":\"https:\/\/www.altoros.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.altoros.com\/blog\/building-a-keras-based-image-classifier-using-tensorflow-for-a-back-end\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.altoros.com\/blog\/building-a-keras-based-image-classifier-using-tensorflow-for-a-back-end\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2017\/04\/building-keras-based-image-classifier-using-tensorflow-for-back-end.gif\",\"datePublished\":\"2017-04-10T16:21:00+00:00\",\"dateModified\":\"2018-08-01T14:08:01+00:00\",\"author\":{\"@id\":\"https:\/\/www.altoros.com\/blog\/#\/schema\/person\/58194952af19fe7b2b830846e077a58e\"},\"breadcrumb\":{\"@id\":\"https:\/\/www.altoros.com\/blog\/building-a-keras-based-image-classifier-using-tensorflow-for-a-back-end\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.altoros.com\/blog\/building-a-keras-based-image-classifier-using-tensorflow-for-a-back-end\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.altoros.com\/blog\/building-a-keras-based-image-classifier-using-tensorflow-for-a-back-end\/#primaryimage\",\"url\":\"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2017\/04\/building-keras-based-image-classifier-using-tensorflow-for-back-end.gif\",\"contentUrl\":\"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2017\/04\/building-keras-based-image-classifier-using-tensorflow-for-back-end.gif\",\"width\":640,\"height\":477},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.altoros.com\/blog\/building-a-keras-based-image-classifier-using-tensorflow-for-a-back-end\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.altoros.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Building a Keras-Based Image Classifier Using TensorFlow for a Back End\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.altoros.com\/blog\/#website\",\"url\":\"https:\/\/www.altoros.com\/blog\/\",\"name\":\"Altoros\",\"description\":\"Insight\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.altoros.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.altoros.com\/blog\/#\/schema\/person\/58194952af19fe7b2b830846e077a58e\",\"name\":\"Sophia Turol\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.altoros.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2019\/05\/trello_card-96x96.jpg\",\"contentUrl\":\"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2019\/05\/trello_card-96x96.jpg\",\"caption\":\"Sophia Turol\"},\"description\":\"Sophia Turol is passionate about delivering well-structured articles that cater for picky technical audience. With 3+ years in technical writing and 5+ years in editorship, she enjoys collaboration with developers to create insightful, yet intelligible technical tutorials, overviews, and case studies. Sophie is enthusiastic about deep learning solutions\u2014TensorFlow in particular\u2014and PaaS systems, such as Cloud Foundry.\",\"url\":\"https:\/\/www.altoros.com\/blog\/author\/sophie-turol\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Building a Keras-Based Image Classifier Using TensorFlow for a Back End | Altoros","description":"Learn how to develop an image classifier with Keras on top of TensorFlow, tackle data overfitting, and achieve 90% of accuracy.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.altoros.com\/blog\/building-a-keras-based-image-classifier-using-tensorflow-for-a-back-end\/","og_locale":"en_US","og_type":"article","og_title":"Building a Keras-Based Image Classifier Using TensorFlow for a Back End | Altoros","og_description":"Keras + TensorFlow Written in Python, Keras is a high-level neural networks API that can be run on top of TensorFlow. This API was designed to provide machine learning enthusiasts with a tool that enables easy and fast prototyping, supports both convolutional and recurrent neural networks (and a combination of the [...]","og_url":"https:\/\/www.altoros.com\/blog\/building-a-keras-based-image-classifier-using-tensorflow-for-a-back-end\/","og_site_name":"Altoros","article_published_time":"2017-04-10T16:21:00+00:00","article_modified_time":"2018-08-01T14:08:01+00:00","og_image":[{"width":640,"height":477,"url":"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2017\/04\/building-keras-based-image-classifier-using-tensorflow-for-back-end.gif","type":"image\/gif"}],"author":"Sophia Turol","twitter_misc":{"Written by":"Sophia Turol","Est. reading time":"3 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.altoros.com\/blog\/building-a-keras-based-image-classifier-using-tensorflow-for-a-back-end\/","url":"https:\/\/www.altoros.com\/blog\/building-a-keras-based-image-classifier-using-tensorflow-for-a-back-end\/","name":"Building a Keras-Based Image Classifier Using TensorFlow for a Back End | Altoros","isPartOf":{"@id":"https:\/\/www.altoros.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.altoros.com\/blog\/building-a-keras-based-image-classifier-using-tensorflow-for-a-back-end\/#primaryimage"},"image":{"@id":"https:\/\/www.altoros.com\/blog\/building-a-keras-based-image-classifier-using-tensorflow-for-a-back-end\/#primaryimage"},"thumbnailUrl":"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2017\/04\/building-keras-based-image-classifier-using-tensorflow-for-back-end.gif","datePublished":"2017-04-10T16:21:00+00:00","dateModified":"2018-08-01T14:08:01+00:00","author":{"@id":"https:\/\/www.altoros.com\/blog\/#\/schema\/person\/58194952af19fe7b2b830846e077a58e"},"breadcrumb":{"@id":"https:\/\/www.altoros.com\/blog\/building-a-keras-based-image-classifier-using-tensorflow-for-a-back-end\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.altoros.com\/blog\/building-a-keras-based-image-classifier-using-tensorflow-for-a-back-end\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.altoros.com\/blog\/building-a-keras-based-image-classifier-using-tensorflow-for-a-back-end\/#primaryimage","url":"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2017\/04\/building-keras-based-image-classifier-using-tensorflow-for-back-end.gif","contentUrl":"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2017\/04\/building-keras-based-image-classifier-using-tensorflow-for-back-end.gif","width":640,"height":477},{"@type":"BreadcrumbList","@id":"https:\/\/www.altoros.com\/blog\/building-a-keras-based-image-classifier-using-tensorflow-for-a-back-end\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.altoros.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Building a Keras-Based Image Classifier Using TensorFlow for a Back End"}]},{"@type":"WebSite","@id":"https:\/\/www.altoros.com\/blog\/#website","url":"https:\/\/www.altoros.com\/blog\/","name":"Altoros","description":"Insight","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.altoros.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/www.altoros.com\/blog\/#\/schema\/person\/58194952af19fe7b2b830846e077a58e","name":"Sophia Turol","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.altoros.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2019\/05\/trello_card-96x96.jpg","contentUrl":"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2019\/05\/trello_card-96x96.jpg","caption":"Sophia Turol"},"description":"Sophia Turol is passionate about delivering well-structured articles that cater for picky technical audience. With 3+ years in technical writing and 5+ years in editorship, she enjoys collaboration with developers to create insightful, yet intelligible technical tutorials, overviews, and case studies. Sophie is enthusiastic about deep learning solutions\u2014TensorFlow in particular\u2014and PaaS systems, such as Cloud Foundry.","url":"https:\/\/www.altoros.com\/blog\/author\/sophie-turol\/"}]}},"_links":{"self":[{"href":"https:\/\/www.altoros.com\/blog\/wp-json\/wp\/v2\/posts\/31975","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.altoros.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.altoros.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.altoros.com\/blog\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/www.altoros.com\/blog\/wp-json\/wp\/v2\/comments?post=31975"}],"version-history":[{"count":5,"href":"https:\/\/www.altoros.com\/blog\/wp-json\/wp\/v2\/posts\/31975\/revisions"}],"predecessor-version":[{"id":32046,"href":"https:\/\/www.altoros.com\/blog\/wp-json\/wp\/v2\/posts\/31975\/revisions\/32046"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.altoros.com\/blog\/wp-json\/wp\/v2\/media\/31984"}],"wp:attachment":[{"href":"https:\/\/www.altoros.com\/blog\/wp-json\/wp\/v2\/media?parent=31975"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.altoros.com\/blog\/wp-json\/wp\/v2\/categories?post=31975"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.altoros.com\/blog\/wp-json\/wp\/v2\/tags?post=31975"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}