{"id":31831,"date":"2017-04-21T18:01:19","date_gmt":"2017-04-21T15:01:19","guid":{"rendered":"https:\/\/www.altoros.com\/blog\/?p=31831"},"modified":"2018-03-22T16:31:45","modified_gmt":"2018-03-22T13:31:45","slug":"using-long-short-term-memory-networks-and-tensorflow-for-image-captioning","status":"publish","type":"post","link":"https:\/\/www.altoros.com\/blog\/using-long-short-term-memory-networks-and-tensorflow-for-image-captioning\/","title":{"rendered":"Using Long Short-Term Memory Networks and TensorFlow for Image Captioning"},"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\/using-long-short-term-memory-networks-and-tensorflow-for-image-captioning\/#Can_a_machine_describe_a_picture\" >Can a machine describe a picture?<\/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\/using-long-short-term-memory-networks-and-tensorflow-for-image-captioning\/#How_to_use_TensorBoard\" >How to use TensorBoard<\/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\/using-long-short-term-memory-networks-and-tensorflow-for-image-captioning\/#Want_detail_Watch_the_video\" >Want detail? Watch the video!<\/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\/using-long-short-term-memory-networks-and-tensorflow-for-image-captioning\/#Related_slides\" >Related slides<\/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\/using-long-short-term-memory-networks-and-tensorflow-for-image-captioning\/#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-6\" href=\"https:\/\/www.altoros.com\/blog\/using-long-short-term-memory-networks-and-tensorflow-for-image-captioning\/#About_the_experts\" >About the experts<\/a><\/li><\/ul><\/nav><\/div>\n<h3><span class=\"ez-toc-section\" id=\"Can_a_machine_describe_a_picture\"><\/span>Can a machine describe a picture?<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>TensorFlow and neural networks are actively used to perform image recognition and classification. At the recent <a href=\"https:\/\/www.meetup.com\/TensorFlow-San-Francisco\/events\/238828076\/\" target=\"_blank\">TensorFlow meetup<\/a>, attendees learnt how these technologies can be employed to enable a machine to recognize what is depicted in the image and to deliver a caption for it. In addition, an insightful overview of using <a href=\"https:\/\/www.altoros.com\/blog\/visualizing-tensorflow-graphs-with-tensorboard\/\">TensorBoard<\/a> was provided.<\/p>\n<p><a href=\"https:\/\/www.linkedin.com\/in\/vigyanik\/\" target=\"_blank\">Pankaj Kumar<\/a> of DataCabinet focused on enabling a <a href=\"https:\/\/www.altoros.com\/blog\/recurrent-neural-networks-classifying-diagnoses-with-long-short-term-memory\/\" target=\"_blank\">long short-term memory network<\/a> (LSTM)\u2014on top of TensorFlow\u2014to describe what is shown in the picture.<\/p>\n<p><center><a href=\"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2017\/04\/pankaj-kumar-tensorflow-and-long-short-term-memory-for-image-captioning-v113.jpg\"><img decoding=\"async\" src=\"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2017\/04\/pankaj-kumar-tensorflow-and-long-short-term-memory-for-image-captioning-v113-1024x768.jpg\" alt=\"\" width=\"640\" class=\"aligncenter size-large wp-image-31837\" \/><\/a><\/center><\/p>\n<p>Firstly, he explained how a simple neural network operates (check out the illustration below). In his very example (on the left), one can see a two-layer neural network with a hidden layer of four neurons, or units, an output layer of two neurons, and an input layer. On the right, there is an example of a three-layer neural network with already two hidden layers. Note that in both cases, the connections (synapses) are established between neurons across layers, but not within a layer.<\/p>\n<p><center><a href=\"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2017\/04\/a-sample-neural-network-v1.png\"><img decoding=\"async\" src=\"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2017\/04\/a-sample-neural-network-v1.png\" alt=\"\" width=\"640\" class=\"aligncenter size-full wp-image-31834\" \/><\/a><\/center><\/p>\n<p>The second key element to employ for <a href=\"https:\/\/www.altoros.com\/blog\/using-machine-learning-and-tensorflow-to-recognize-traffic-signs\/\">image recognition<\/a> is a <a href=\"https:\/\/www.altoros.com\/blog\/analyzing-text-and-generating-content-with-neural-networks-and-tensorflow\/\">convolutional neural network<\/a> (CNN). Pankaj noted that using CNNs allows for minimizing classification errors.<\/p>\n<p><center><a href=\"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2017\/04\/using-convolutional-neural-netwotk-for-image-classification-v1.png\"><img decoding=\"async\" src=\"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2017\/04\/using-convolutional-neural-netwotk-for-image-classification-v1.png\" alt=\"\" width=\"640\" class=\"aligncenter size-full wp-image-31839\" \/><\/a><\/center><\/p>\n<p>Then, recurrent neural networks are trained on a data set comprising various sentences to build a <a href=\"https:\/\/www.altoros.com\/blog\/the-magic-behind-google-translate-sequence-to-sequence-models-and-tensorflow\/\">language model<\/a> and make predictions. For instance, one may use Microsoft\u2019s <a href=\"http:\/\/mscoco.org\/\" target=\"_blank\">COCO data set<\/a> with 300,000+ images and five captions per each picture.<\/p>\n<p><center><a href=\"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2017\/04\/recurrent-neural-networks-for-sequence-modeling-v1.png\"><img decoding=\"async\" src=\"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2017\/04\/recurrent-neural-networks-for-sequence-modeling-v1.png\" alt=\"\" width=\"640\" class=\"aligncenter size-full wp-image-31838\" \/><\/a><\/center><\/p>\n<p>Still, when training a <a href=\"https:\/\/www.altoros.com\/blog\/using-recurrent-neural-networks-and-tensorflow-to-recognize-handwriting\/\">recurrent neural network<\/a>, one has to address the problem of a vanishing\/exploding gradient.<\/p>\n<p><center><a href=\"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2017\/04\/issues-with-reccurent-neural-networks-long-short-term-memory-v1.png\"><img decoding=\"async\" src=\"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2017\/04\/issues-with-reccurent-neural-networks-long-short-term-memory-v1.png\" alt=\"\" width=\"640\" class=\"aligncenter size-full wp-image-31836\" \/><\/a><\/center><\/p>\n<p>Combining recurrent and convolutional neural networks allows for avoiding word-by-word sampling. Furthermore, one can search over longer word sequences with <a href=\"https:\/\/github.com\/tensorflow\/tensorflow\/issues\/654\" target=\"_blank\">beam search<\/a>. Finally, to get a better image, an LSTM is implemented on top of TensorFlow.<\/p>\n<p><center><a href=\"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2017\/04\/using-long-short-term-memory-on-top-of-tensorflow-for-image-captioning-v1.png\"><img decoding=\"async\" src=\"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2017\/04\/using-long-short-term-memory-on-top-of-tensorflow-for-image-captioning-v1.png\" alt=\"\" width=\"640\" class=\"aligncenter size-full wp-image-31840\" \/><\/a><\/center><\/p>\n<p>&nbsp;<\/p>\n<h3><span class=\"ez-toc-section\" id=\"How_to_use_TensorBoard\"><\/span>How to use TensorBoard<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p><a href=\"https:\/\/www.linkedin.com\/in\/deepthimo\/\" target=\"_blank\">Deepthi Mohindra<\/a> demonstrated how to make use of <a href=\"https:\/\/www.tensorflow.org\/tensorboard\/get_started\" target=\"_blank\">TensorBoard<\/a> to visualize a TensorFlow graph, better understand what\u2019s under the hood, and debug the performance of model if necessary.<\/p>\n<p><center><a href=\"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2017\/04\/deepthi-mohindra-how-to-use-tensorboard-v112-tensorflow.jpg\"><img decoding=\"async\" src=\"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2017\/04\/deepthi-mohindra-how-to-use-tensorboard-v112-tensorflow-1024x768.jpg\" alt=\"\" width=\"640\" class=\"aligncenter size-large wp-image-31835\" \/><\/a><\/center><\/p>\n<p>Join <a href=\"https:\/\/www.meetup.com\/TensorFlow-San-Francisco\/\" target=\"_blank\">our group<\/a> to stay tuned with the upcoming events.<\/p>\n<p>&nbsp;<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Want_detail_Watch_the_video\"><\/span>Want detail? Watch the video!<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p><center><script src=\"https:\/\/fast.wistia.com\/embed\/medias\/eu7fnxasux.jsonp\" async><\/script><script src=\"https:\/\/fast.wistia.com\/assets\/external\/E-v1.js\" async><\/script><span class=\"wistia_embed wistia_async_eu7fnxasux popover=true popoverAnimateThumbnail=true\" style=\"display:inline-block;height:360px;width:640px\">&nbsp;<\/span><\/center><\/p>\n<p>&nbsp;<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Related_slides\"><\/span>Related slides<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>You can find the full presentation made by Pankaj Kumar below.<\/p>\n<p><center><iframe loading=\"lazy\" src=\"https:\/\/www.slideshare.net\/slideshow\/embed_code\/key\/Krv4Vz0YyR8Vib\" width=\"427\" height=\"356\" frameborder=\"0\" marginwidth=\"0\" marginheight=\"0\" scrolling=\"no\" style=\"border:1px solid #CCC; border-width:1px; margin-bottom:5px; max-width: 100%;\" allowfullscreen> <\/iframe><\/center><\/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\/text-prediction-with-tensorflow-and-long-short-term-memory-in-six-steps\/\">Text Prediction with TensorFlow and Long Short-Term Memory\u2014in Six Steps<\/a><\/li>\n<li><a href=\"https:\/\/www.altoros.com\/blog\/image-and-text-recognition-with-tensorflow-using-convolutional-neural-networks\/\">Image and Text Recognition with TensorFlow Using Convolutional Neural Networks<\/a><\/li>\n<li><a href=\"https:\/\/www.altoros.com\/blog\/recurrent-neural-networks-classifying-diagnoses-with-long-short-term-memory\/\">Recurrent Neural Networks: Classifying Diagnoses with Long Short-Term Memory<\/a><\/li>\n<li><a href=\"https:\/\/www.altoros.com\/blog\/using-tensorflow-and-long-short-term-memory-for-visualized-learning\/\">Hitchhiker\u2019s Guide to Using TensorFlow and LSTM for Visualized Learning<\/a><\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<h3><span class=\"ez-toc-section\" id=\"About_the_experts\"><\/span>About the experts<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p><small><a href=\"https:\/\/www.linkedin.com\/in\/vigyanik\/\" target=\"_blank\">Pankaj Kumar<\/a> is a founder of DataCabinet, a company behind a cloud-based IDE solution for machine learning. It enables to maintain a project as a Jupyter notebook in the cloud and is <a href=\"http:\/\/datacabinet.info\/\" target=\"_blank\">available in beta<\/a>. Before starting DataCabinet, he worked as an engineer at AppDynamics, focusing on APM agents and back ends. Pankaj graduated from the Indian Institute of Technology (Kharagpur) and then went to Purdue University for Master of Science. He has recently completed the Graduate Certificate in Statistical Data Mining and Applications from Stanford University.<\/small><\/p>\n<p><small><a href=\"https:\/\/www.linkedin.com\/in\/deepthimo\/\" target=\"_blank\">Deepthi Mohindra<\/a> is a quantitative analyst passionate about exploring data and extracting insights that help to drive meaningful impact. She is a huge fan of the &#8220;Datakind,&#8221; &#8220;Udacity,&#8221; and &#8220;Women Who Code&#8221; communities. You can check out <a href=\"https:\/\/github.com\/DeepthiMo\" target=\"_blank\">her GitHub profile<\/a>.<\/small><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Can a machine describe a picture?<\/p>\n<p>TensorFlow and neural networks are actively used to perform image recognition and classification. At the recent TensorFlow meetup, attendees learnt how these technologies can be employed to enable a machine to recognize what is depicted in the image and to deliver a caption for it. [&#8230;]<\/p>\n","protected":false},"author":3,"featured_media":31844,"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-31831","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>Using Long Short-Term Memory Networks and TensorFlow for Image Captioning | Altoros<\/title>\n<meta name=\"description\" content=\"Learn how to enable long short-term memory, convolutional neural, and recurrent neural networks on top of TensorFlow to describe what is shown in the picture.\" \/>\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\/using-long-short-term-memory-networks-and-tensorflow-for-image-captioning\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Using Long Short-Term Memory Networks and TensorFlow for Image Captioning | Altoros\" \/>\n<meta property=\"og:description\" content=\"Can a machine describe a picture? TensorFlow and neural networks are actively used to perform image recognition and classification. At the recent TensorFlow meetup, attendees learnt how these technologies can be employed to enable a machine to recognize what is depicted in the image and to deliver a caption for it. [...]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.altoros.com\/blog\/using-long-short-term-memory-networks-and-tensorflow-for-image-captioning\/\" \/>\n<meta property=\"og:site_name\" content=\"Altoros\" \/>\n<meta property=\"article:published_time\" content=\"2017-04-21T15:01:19+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2018-03-22T13:31:45+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2017\/04\/using-long-short-term-memory-networks-and-tensorflow-for-image-captioning.gif\" \/>\n\t<meta property=\"og:image:width\" content=\"640\" \/>\n\t<meta property=\"og:image:height\" content=\"480\" \/>\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\/using-long-short-term-memory-networks-and-tensorflow-for-image-captioning\/\",\"url\":\"https:\/\/www.altoros.com\/blog\/using-long-short-term-memory-networks-and-tensorflow-for-image-captioning\/\",\"name\":\"Using Long Short-Term Memory Networks and TensorFlow for Image Captioning | Altoros\",\"isPartOf\":{\"@id\":\"https:\/\/www.altoros.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.altoros.com\/blog\/using-long-short-term-memory-networks-and-tensorflow-for-image-captioning\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.altoros.com\/blog\/using-long-short-term-memory-networks-and-tensorflow-for-image-captioning\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2017\/04\/using-long-short-term-memory-networks-and-tensorflow-for-image-captioning.gif\",\"datePublished\":\"2017-04-21T15:01:19+00:00\",\"dateModified\":\"2018-03-22T13:31:45+00:00\",\"author\":{\"@id\":\"https:\/\/www.altoros.com\/blog\/#\/schema\/person\/58194952af19fe7b2b830846e077a58e\"},\"breadcrumb\":{\"@id\":\"https:\/\/www.altoros.com\/blog\/using-long-short-term-memory-networks-and-tensorflow-for-image-captioning\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.altoros.com\/blog\/using-long-short-term-memory-networks-and-tensorflow-for-image-captioning\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.altoros.com\/blog\/using-long-short-term-memory-networks-and-tensorflow-for-image-captioning\/#primaryimage\",\"url\":\"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2017\/04\/using-long-short-term-memory-networks-and-tensorflow-for-image-captioning.gif\",\"contentUrl\":\"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2017\/04\/using-long-short-term-memory-networks-and-tensorflow-for-image-captioning.gif\",\"width\":640,\"height\":480},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.altoros.com\/blog\/using-long-short-term-memory-networks-and-tensorflow-for-image-captioning\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.altoros.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Using Long Short-Term Memory Networks and TensorFlow for Image Captioning\"}]},{\"@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":"Using Long Short-Term Memory Networks and TensorFlow for Image Captioning | Altoros","description":"Learn how to enable long short-term memory, convolutional neural, and recurrent neural networks on top of TensorFlow to describe what is shown in the picture.","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\/using-long-short-term-memory-networks-and-tensorflow-for-image-captioning\/","og_locale":"en_US","og_type":"article","og_title":"Using Long Short-Term Memory Networks and TensorFlow for Image Captioning | Altoros","og_description":"Can a machine describe a picture? TensorFlow and neural networks are actively used to perform image recognition and classification. At the recent TensorFlow meetup, attendees learnt how these technologies can be employed to enable a machine to recognize what is depicted in the image and to deliver a caption for it. [...]","og_url":"https:\/\/www.altoros.com\/blog\/using-long-short-term-memory-networks-and-tensorflow-for-image-captioning\/","og_site_name":"Altoros","article_published_time":"2017-04-21T15:01:19+00:00","article_modified_time":"2018-03-22T13:31:45+00:00","og_image":[{"width":640,"height":480,"url":"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2017\/04\/using-long-short-term-memory-networks-and-tensorflow-for-image-captioning.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\/using-long-short-term-memory-networks-and-tensorflow-for-image-captioning\/","url":"https:\/\/www.altoros.com\/blog\/using-long-short-term-memory-networks-and-tensorflow-for-image-captioning\/","name":"Using Long Short-Term Memory Networks and TensorFlow for Image Captioning | Altoros","isPartOf":{"@id":"https:\/\/www.altoros.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.altoros.com\/blog\/using-long-short-term-memory-networks-and-tensorflow-for-image-captioning\/#primaryimage"},"image":{"@id":"https:\/\/www.altoros.com\/blog\/using-long-short-term-memory-networks-and-tensorflow-for-image-captioning\/#primaryimage"},"thumbnailUrl":"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2017\/04\/using-long-short-term-memory-networks-and-tensorflow-for-image-captioning.gif","datePublished":"2017-04-21T15:01:19+00:00","dateModified":"2018-03-22T13:31:45+00:00","author":{"@id":"https:\/\/www.altoros.com\/blog\/#\/schema\/person\/58194952af19fe7b2b830846e077a58e"},"breadcrumb":{"@id":"https:\/\/www.altoros.com\/blog\/using-long-short-term-memory-networks-and-tensorflow-for-image-captioning\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.altoros.com\/blog\/using-long-short-term-memory-networks-and-tensorflow-for-image-captioning\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.altoros.com\/blog\/using-long-short-term-memory-networks-and-tensorflow-for-image-captioning\/#primaryimage","url":"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2017\/04\/using-long-short-term-memory-networks-and-tensorflow-for-image-captioning.gif","contentUrl":"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2017\/04\/using-long-short-term-memory-networks-and-tensorflow-for-image-captioning.gif","width":640,"height":480},{"@type":"BreadcrumbList","@id":"https:\/\/www.altoros.com\/blog\/using-long-short-term-memory-networks-and-tensorflow-for-image-captioning\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.altoros.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Using Long Short-Term Memory Networks and TensorFlow for Image Captioning"}]},{"@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\/31831","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=31831"}],"version-history":[{"count":8,"href":"https:\/\/www.altoros.com\/blog\/wp-json\/wp\/v2\/posts\/31831\/revisions"}],"predecessor-version":[{"id":31920,"href":"https:\/\/www.altoros.com\/blog\/wp-json\/wp\/v2\/posts\/31831\/revisions\/31920"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.altoros.com\/blog\/wp-json\/wp\/v2\/media\/31844"}],"wp:attachment":[{"href":"https:\/\/www.altoros.com\/blog\/wp-json\/wp\/v2\/media?parent=31831"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.altoros.com\/blog\/wp-json\/wp\/v2\/categories?post=31831"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.altoros.com\/blog\/wp-json\/wp\/v2\/tags?post=31831"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}