CINXE.COM
Migrate the SavedModel workflow | TensorFlow Core
<!doctype html> <html lang="en" dir="ltr"> <head> <meta name="google-signin-client-id" content="157101835696-ooapojlodmuabs2do2vuhhnf90bccmoi.apps.googleusercontent.com"> <meta name="google-signin-scope" content="profile email https://www.googleapis.com/auth/developerprofiles https://www.googleapis.com/auth/developerprofiles.award"> <meta property="og:site_name" content="TensorFlow"> <meta property="og:type" content="website"><meta name="theme-color" content="#ff6f00"><meta charset="utf-8"> <meta content="IE=Edge" http-equiv="X-UA-Compatible"> <meta name="viewport" content="width=device-width, initial-scale=1"> <link rel="manifest" href="/_pwa/tensorflow/manifest.json" crossorigin="use-credentials"> <link rel="preconnect" href="//www.gstatic.com" crossorigin> <link rel="preconnect" href="//fonts.gstatic.com" crossorigin> <link rel="preconnect" href="//fonts.googleapis.com" crossorigin> <link rel="preconnect" href="//apis.google.com" crossorigin> <link rel="preconnect" href="//www.google-analytics.com" crossorigin><link rel="stylesheet" href="//fonts.googleapis.com/css?family=Google+Sans:400,500|Roboto:400,400italic,500,500italic,700,700italic|Roboto+Mono:400,500,700&display=swap"> <link rel="stylesheet" href="//fonts.googleapis.com/css2?family=Material+Icons&family=Material+Symbols+Outlined&display=block"><link rel="stylesheet" href="https://www.gstatic.com/devrel-devsite/prod/vd2dddc2199cd18ccf014281c77515e1e906f6b98324fd2a8b5fa9e92b09e8018/tensorflow/css/app.css"> <link rel="shortcut icon" href="https://www.gstatic.com/devrel-devsite/prod/vd2dddc2199cd18ccf014281c77515e1e906f6b98324fd2a8b5fa9e92b09e8018/tensorflow/images/favicon.png"> <link rel="apple-touch-icon" href="https://www.gstatic.com/devrel-devsite/prod/vd2dddc2199cd18ccf014281c77515e1e906f6b98324fd2a8b5fa9e92b09e8018/tensorflow/images/apple-touch-icon-180x180.png"><link rel="canonical" href="https://www.tensorflow.org/guide/migrate/saved_model"><link rel="search" type="application/opensearchdescription+xml" title="TensorFlow" href="https://www.tensorflow.org/s/opensearch.xml"> <link rel="alternate" hreflang="en" href="https://www.tensorflow.org/guide/migrate/saved_model" /><link rel="alternate" hreflang="x-default" href="https://www.tensorflow.org/guide/migrate/saved_model" /><link rel="alternate" hreflang="ar" href="https://www.tensorflow.org/guide/migrate/saved_model?hl=ar" /><link rel="alternate" hreflang="bn" href="https://www.tensorflow.org/guide/migrate/saved_model?hl=bn" /><link rel="alternate" hreflang="zh-Hans" href="https://www.tensorflow.org/guide/migrate/saved_model?hl=zh-cn" /><link rel="alternate" hreflang="fa" href="https://www.tensorflow.org/guide/migrate/saved_model?hl=fa" /><link rel="alternate" hreflang="fr" href="https://www.tensorflow.org/guide/migrate/saved_model?hl=fr" /><link rel="alternate" hreflang="hi" href="https://www.tensorflow.org/guide/migrate/saved_model?hl=hi" /><link rel="alternate" hreflang="id" href="https://www.tensorflow.org/guide/migrate/saved_model?hl=id" /><link rel="alternate" hreflang="it" href="https://www.tensorflow.org/guide/migrate/saved_model?hl=it" /><link rel="alternate" hreflang="ja" href="https://www.tensorflow.org/guide/migrate/saved_model?hl=ja" /><link rel="alternate" hreflang="ko" href="https://www.tensorflow.org/guide/migrate/saved_model?hl=ko" /><link rel="alternate" hreflang="pl" href="https://www.tensorflow.org/guide/migrate/saved_model?hl=pl" /><link rel="alternate" hreflang="pt-BR" href="https://www.tensorflow.org/guide/migrate/saved_model?hl=pt-br" /><link rel="alternate" hreflang="ru" href="https://www.tensorflow.org/guide/migrate/saved_model?hl=ru" /><link rel="alternate" hreflang="es-419" href="https://www.tensorflow.org/guide/migrate/saved_model?hl=es-419" /><link rel="alternate" hreflang="th" href="https://www.tensorflow.org/guide/migrate/saved_model?hl=th" /><link rel="alternate" hreflang="tr" href="https://www.tensorflow.org/guide/migrate/saved_model?hl=tr" /><link rel="alternate" hreflang="vi" href="https://www.tensorflow.org/guide/migrate/saved_model?hl=vi" /><title>Migrate the SavedModel workflow | TensorFlow Core</title> <meta property="og:title" content="Migrate the SavedModel workflow | TensorFlow Core"><meta property="og:url" content="https://www.tensorflow.org/guide/migrate/saved_model"><meta property="og:image" content="https://www.tensorflow.org/static/images/tf_logo_social.png"> <meta property="og:image:width" content="1200"> <meta property="og:image:height" content="675"><meta property="og:locale" content="en"><meta name="twitter:card" content="summary_large_image"><script type="application/ld+json"> { "@context": "https://schema.org", "@type": "Article", "headline": "Migrate the SavedModel workflow" } </script><script type="application/ld+json"> { "@context": "https://schema.org", "@type": "BreadcrumbList", "itemListElement": [{ "@type": "ListItem", "position": 1, "name": "TensorFlow Core", "item": "https://www.tensorflow.org/tutorials" },{ "@type": "ListItem", "position": 2, "name": "Migrate the SavedModel workflow", "item": "https://www.tensorflow.org/guide/migrate/saved_model" }] } </script> <link rel="stylesheet" href="/extras.css"></head> <body class="" template="page" theme="tensorflow-theme" type="article" layout="docs" display-toc pending> <devsite-progress type="indeterminate" id="app-progress"></devsite-progress> <a href="#main-content" class="skip-link button"> Skip to main content </a> <section class="devsite-wrapper"> <devsite-cookie-notification-bar></devsite-cookie-notification-bar><devsite-header role="banner"> <div class="devsite-header--inner nocontent"> <div class="devsite-top-logo-row-wrapper-wrapper"> <div class="devsite-top-logo-row-wrapper"> <div class="devsite-top-logo-row"> <button type="button" id="devsite-hamburger-menu" class="devsite-header-icon-button button-flat material-icons gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Navigation menu button" visually-hidden aria-label="Open menu"> </button> <div class="devsite-product-name-wrapper"> <a href="/" class="devsite-site-logo-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Site logo" track-type="globalNav" track-name="tensorFlow" track-metadata-position="nav" track-metadata-eventDetail="nav"> <picture> <img src="https://www.gstatic.com/devrel-devsite/prod/vd2dddc2199cd18ccf014281c77515e1e906f6b98324fd2a8b5fa9e92b09e8018/tensorflow/images/lockup.svg" class="devsite-site-logo" alt="TensorFlow"> </picture> </a> <span class="devsite-product-name"> <ul class="devsite-breadcrumb-list" > <li class="devsite-breadcrumb-item "> </li> </ul> </span> </div> <div class="devsite-top-logo-row-middle"> <div class="devsite-header-upper-tabs"> <devsite-tabs class="upper-tabs"> <nav class="devsite-tabs-wrapper" aria-label="Upper tabs"> <tab > <a href="https://www.tensorflow.org/install" class="devsite-tabs-content gc-analytics-event " track-metadata-eventdetail="https://www.tensorflow.org/install" track-type="nav" track-metadata-position="nav - install" track-metadata-module="primary nav" data-category="Site-Wide Custom Events" data-label="Tab: Install" track-name="install" > Install </a> </tab> <tab class="devsite-dropdown devsite-active "> <a href="https://www.tensorflow.org/learn" class="devsite-tabs-content gc-analytics-event " track-metadata-eventdetail="https://www.tensorflow.org/learn" track-type="nav" track-metadata-position="nav - learn" track-metadata-module="primary nav" aria-label="Learn, selected" data-category="Site-Wide Custom Events" data-label="Tab: Learn" track-name="learn" > Learn </a> <button aria-haspopup="menu" aria-expanded="false" aria-label="Dropdown menu for Learn" track-type="nav" track-metadata-eventdetail="https://www.tensorflow.org/learn" track-metadata-position="nav - learn" track-metadata-module="primary nav" data-category="Site-Wide Custom Events" data-label="Tab: Learn" track-name="learn" class="devsite-tabs-dropdown-toggle devsite-icon devsite-icon-arrow-drop-down"></button> <div class="devsite-tabs-dropdown" role="menu" aria-label="submenu" hidden> <div class="devsite-tabs-dropdown-content"> <div class="devsite-tabs-dropdown-column tfo-menu-column-learn"> <ul class="devsite-tabs-dropdown-section "> <li class="devsite-nav-item"> <a href="https://www.tensorflow.org/learn" track-type="nav" track-metadata-eventdetail="https://www.tensorflow.org/learn" track-metadata-position="nav - learn" track-metadata-module="tertiary nav" tooltip > <div class="devsite-nav-item-title"> Introduction </div> <div class="devsite-nav-item-description"> New to TensorFlow? </div> </a> </li> <li class="devsite-nav-item"> <a href="https://www.tensorflow.org/tutorials" track-type="nav" track-metadata-eventdetail="https://www.tensorflow.org/tutorials" track-metadata-position="nav - learn" track-metadata-module="tertiary nav" tooltip > <div class="devsite-nav-item-title"> Tutorials </div> <div class="devsite-nav-item-description"> Learn how to use TensorFlow with end-to-end examples </div> </a> </li> <li class="devsite-nav-item"> <a href="https://www.tensorflow.org/guide" track-type="nav" track-metadata-eventdetail="https://www.tensorflow.org/guide" track-metadata-position="nav - learn" track-metadata-module="tertiary nav" tooltip > <div class="devsite-nav-item-title"> Guide </div> <div class="devsite-nav-item-description"> Learn framework concepts and components </div> </a> </li> <li class="devsite-nav-item"> <a href="https://www.tensorflow.org/resources/learn-ml" track-type="nav" track-metadata-eventdetail="https://www.tensorflow.org/resources/learn-ml" track-metadata-position="nav - learn" track-metadata-module="tertiary nav" tooltip > <div class="devsite-nav-item-title"> Learn ML </div> <div class="devsite-nav-item-description"> Educational resources to master your path with TensorFlow </div> </a> </li> </ul> </div> </div> </div> </tab> <tab class="devsite-dropdown "> <a href="https://www.tensorflow.org/api" class="devsite-tabs-content gc-analytics-event " track-metadata-eventdetail="https://www.tensorflow.org/api" track-type="nav" track-metadata-position="nav - api" track-metadata-module="primary nav" data-category="Site-Wide Custom Events" data-label="Tab: API" track-name="api" > API </a> <button aria-haspopup="menu" aria-expanded="false" aria-label="Dropdown menu for API" track-type="nav" track-metadata-eventdetail="https://www.tensorflow.org/api" track-metadata-position="nav - api" track-metadata-module="primary nav" data-category="Site-Wide Custom Events" data-label="Tab: API" track-name="api" class="devsite-tabs-dropdown-toggle devsite-icon devsite-icon-arrow-drop-down"></button> <div class="devsite-tabs-dropdown" role="menu" aria-label="submenu" hidden> <div class="devsite-tabs-dropdown-content"> <div class="devsite-tabs-dropdown-column "> <ul class="devsite-tabs-dropdown-section "> <li class="devsite-nav-item"> <a href="https://www.tensorflow.org/api/stable" track-type="nav" track-metadata-eventdetail="https://www.tensorflow.org/api/stable" track-metadata-position="nav - api" track-metadata-module="tertiary nav" tooltip > <div class="devsite-nav-item-title"> TensorFlow (v2.16.1) </div> </a> </li> <li class="devsite-nav-item"> <a href="https://www.tensorflow.org/versions" track-type="nav" track-metadata-eventdetail="https://www.tensorflow.org/versions" track-metadata-position="nav - api" track-metadata-module="tertiary nav" tooltip > <div class="devsite-nav-item-title"> Versions… </div> </a> </li> </ul> </div> <div class="devsite-tabs-dropdown-column "> <ul class="devsite-tabs-dropdown-section "> <li class="devsite-nav-item"> <a href="https://js.tensorflow.org/api/latest/" track-type="nav" track-metadata-eventdetail="https://js.tensorflow.org/api/latest/" track-metadata-position="nav - api" track-metadata-module="tertiary nav" tooltip > <div class="devsite-nav-item-title"> TensorFlow.js </div> </a> </li> <li class="devsite-nav-item"> <a href="https://www.tensorflow.org/lite/api_docs" track-type="nav" track-metadata-eventdetail="https://www.tensorflow.org/lite/api_docs" track-metadata-position="nav - api" track-metadata-module="tertiary nav" tooltip > <div class="devsite-nav-item-title"> TensorFlow Lite </div> </a> </li> <li class="devsite-nav-item"> <a href="https://www.tensorflow.org/tfx/api_docs" track-type="nav" track-metadata-eventdetail="https://www.tensorflow.org/tfx/api_docs" track-metadata-position="nav - api" track-metadata-module="tertiary nav" tooltip > <div class="devsite-nav-item-title"> TFX </div> </a> </li> </ul> </div> </div> </div> </tab> <tab class="devsite-dropdown "> <a href="https://www.tensorflow.org/resources/models-datasets" class="devsite-tabs-content gc-analytics-event " track-metadata-eventdetail="https://www.tensorflow.org/resources/models-datasets" track-type="nav" track-metadata-position="nav - ecosystem" track-metadata-module="primary nav" data-category="Site-Wide Custom Events" data-label="Tab: Ecosystem" track-name="ecosystem" > Ecosystem </a> <button aria-haspopup="menu" aria-expanded="false" aria-label="Dropdown menu for Ecosystem" track-type="nav" track-metadata-eventdetail="https://www.tensorflow.org/resources/models-datasets" track-metadata-position="nav - ecosystem" track-metadata-module="primary nav" data-category="Site-Wide Custom Events" data-label="Tab: Ecosystem" track-name="ecosystem" class="devsite-tabs-dropdown-toggle devsite-icon devsite-icon-arrow-drop-down"></button> <div class="devsite-tabs-dropdown" role="menu" aria-label="submenu" hidden> <div class="devsite-tabs-dropdown-content"> <div class="devsite-tabs-dropdown-column "> <ul class="devsite-tabs-dropdown-section "> <li class="devsite-nav-title" role="heading" tooltip>LIBRARIES</li> <li class="devsite-nav-item"> <a href="https://www.tensorflow.org/js" track-type="nav" track-metadata-eventdetail="https://www.tensorflow.org/js" track-metadata-position="nav - ecosystem" track-metadata-module="tertiary nav" track-metadata-module_headline="libraries" tooltip > <div class="devsite-nav-item-title"> TensorFlow.js </div> <div class="devsite-nav-item-description"> Develop web ML applications in JavaScript </div> </a> </li> <li class="devsite-nav-item"> <a href="https://www.tensorflow.org/lite" track-type="nav" track-metadata-eventdetail="https://www.tensorflow.org/lite" track-metadata-position="nav - ecosystem" track-metadata-module="tertiary nav" track-metadata-module_headline="libraries" tooltip > <div class="devsite-nav-item-title"> TensorFlow Lite </div> <div class="devsite-nav-item-description"> Deploy ML on mobile, microcontrollers and other edge devices </div> </a> </li> <li class="devsite-nav-item"> <a href="https://www.tensorflow.org/tfx" track-type="nav" track-metadata-eventdetail="https://www.tensorflow.org/tfx" track-metadata-position="nav - ecosystem" track-metadata-module="tertiary nav" track-metadata-module_headline="libraries" tooltip > <div class="devsite-nav-item-title"> TFX </div> <div class="devsite-nav-item-description"> Build production ML pipelines </div> </a> </li> <li class="devsite-nav-item"> <a href="https://www.tensorflow.org/resources/libraries-extensions" track-type="nav" track-metadata-eventdetail="https://www.tensorflow.org/resources/libraries-extensions" track-metadata-position="nav - ecosystem" track-metadata-module="tertiary nav" track-metadata-module_headline="libraries" tooltip > <div class="devsite-nav-item-title"> All libraries </div> <div class="devsite-nav-item-description"> Create advanced models and extend TensorFlow </div> </a> </li> </ul> </div> <div class="devsite-tabs-dropdown-column "> <ul class="devsite-tabs-dropdown-section "> <li class="devsite-nav-title" role="heading" tooltip>RESOURCES</li> <li class="devsite-nav-item"> <a href="https://www.tensorflow.org/resources/models-datasets" track-type="nav" track-metadata-eventdetail="https://www.tensorflow.org/resources/models-datasets" track-metadata-position="nav - ecosystem" track-metadata-module="tertiary nav" track-metadata-module_headline="resources" tooltip > <div class="devsite-nav-item-title"> Models & datasets </div> <div class="devsite-nav-item-description"> Pre-trained models and datasets built by Google and the community </div> </a> </li> <li class="devsite-nav-item"> <a href="https://www.tensorflow.org/resources/tools" track-type="nav" track-metadata-eventdetail="https://www.tensorflow.org/resources/tools" track-metadata-position="nav - ecosystem" track-metadata-module="tertiary nav" track-metadata-module_headline="resources" tooltip > <div class="devsite-nav-item-title"> Tools </div> <div class="devsite-nav-item-description"> Tools to support and accelerate TensorFlow workflows </div> </a> </li> <li class="devsite-nav-item"> <a href="https://www.tensorflow.org/responsible_ai" track-type="nav" track-metadata-eventdetail="https://www.tensorflow.org/responsible_ai" track-metadata-position="nav - ecosystem" track-metadata-module="tertiary nav" track-metadata-module_headline="resources" tooltip > <div class="devsite-nav-item-title"> Responsible AI </div> <div class="devsite-nav-item-description"> Resources for every stage of the ML workflow </div> </a> </li> <li class="devsite-nav-item"> <a href="https://www.tensorflow.org/resources/recommendation-systems" track-type="nav" track-metadata-eventdetail="https://www.tensorflow.org/resources/recommendation-systems" track-metadata-position="nav - ecosystem" track-metadata-module="tertiary nav" track-metadata-module_headline="resources" tooltip > <div class="devsite-nav-item-title"> Recommendation systems </div> <div class="devsite-nav-item-description"> Build recommendation systems with open source tools </div> </a> </li> </ul> </div> </div> </div> </tab> <tab class="devsite-dropdown "> <a href="https://www.tensorflow.org/community" class="devsite-tabs-content gc-analytics-event " track-metadata-eventdetail="https://www.tensorflow.org/community" track-type="nav" track-metadata-position="nav - community" track-metadata-module="primary nav" data-category="Site-Wide Custom Events" data-label="Tab: Community" track-name="community" > Community </a> <button aria-haspopup="menu" aria-expanded="false" aria-label="Dropdown menu for Community" track-type="nav" track-metadata-eventdetail="https://www.tensorflow.org/community" track-metadata-position="nav - community" track-metadata-module="primary nav" data-category="Site-Wide Custom Events" data-label="Tab: Community" track-name="community" class="devsite-tabs-dropdown-toggle devsite-icon devsite-icon-arrow-drop-down"></button> <div class="devsite-tabs-dropdown" role="menu" aria-label="submenu" hidden> <div class="devsite-tabs-dropdown-content"> <div class="devsite-tabs-dropdown-column "> <ul class="devsite-tabs-dropdown-section "> <li class="devsite-nav-item"> <a href="https://www.tensorflow.org/community/groups" track-type="nav" track-metadata-eventdetail="https://www.tensorflow.org/community/groups" track-metadata-position="nav - community" track-metadata-module="tertiary nav" tooltip > <div class="devsite-nav-item-title"> Groups </div> <div class="devsite-nav-item-description"> User groups, interest groups and mailing lists </div> </a> </li> <li class="devsite-nav-item"> <a href="https://www.tensorflow.org/community/contribute" track-type="nav" track-metadata-eventdetail="https://www.tensorflow.org/community/contribute" track-metadata-position="nav - community" track-metadata-module="tertiary nav" tooltip > <div class="devsite-nav-item-title"> Contribute </div> <div class="devsite-nav-item-description"> Guide for contributing to code and documentation </div> </a> </li> <li class="devsite-nav-item"> <a href="https://blog.tensorflow.org/" track-type="nav" track-metadata-eventdetail="https://blog.tensorflow.org/" track-metadata-position="nav - community" track-metadata-module="tertiary nav" tooltip > <div class="devsite-nav-item-title"> Blog </div> <div class="devsite-nav-item-description"> Stay up to date with all things TensorFlow </div> </a> </li> <li class="devsite-nav-item"> <a href="https://discuss.tensorflow.org" track-type="nav" track-metadata-eventdetail="https://discuss.tensorflow.org" track-metadata-position="nav - community" track-metadata-module="tertiary nav" tooltip > <div class="devsite-nav-item-title"> Forum </div> <div class="devsite-nav-item-description"> Discussion platform for the TensorFlow community </div> </a> </li> </ul> </div> </div> </div> </tab> <tab class="devsite-dropdown "> <a href="https://www.tensorflow.org/about" class="devsite-tabs-content gc-analytics-event " track-metadata-eventdetail="https://www.tensorflow.org/about" track-type="nav" track-metadata-position="nav - why tensorflow" track-metadata-module="primary nav" data-category="Site-Wide Custom Events" data-label="Tab: Why TensorFlow" track-name="why tensorflow" > Why TensorFlow </a> <button aria-haspopup="menu" aria-expanded="false" aria-label="Dropdown menu for Why TensorFlow" track-type="nav" track-metadata-eventdetail="https://www.tensorflow.org/about" track-metadata-position="nav - why tensorflow" track-metadata-module="primary nav" data-category="Site-Wide Custom Events" data-label="Tab: Why TensorFlow" track-name="why tensorflow" class="devsite-tabs-dropdown-toggle devsite-icon devsite-icon-arrow-drop-down"></button> <div class="devsite-tabs-dropdown" role="menu" aria-label="submenu" hidden> <div class="devsite-tabs-dropdown-content"> <div class="devsite-tabs-dropdown-column "> <ul class="devsite-tabs-dropdown-section "> <li class="devsite-nav-item"> <a href="https://www.tensorflow.org/about" track-type="nav" track-metadata-eventdetail="https://www.tensorflow.org/about" track-metadata-position="nav - why tensorflow" track-metadata-module="tertiary nav" tooltip > <div class="devsite-nav-item-title"> About </div> </a> </li> <li class="devsite-nav-item"> <a href="https://www.tensorflow.org/about/case-studies" track-type="nav" track-metadata-eventdetail="https://www.tensorflow.org/about/case-studies" track-metadata-position="nav - why tensorflow" track-metadata-module="tertiary nav" tooltip > <div class="devsite-nav-item-title"> Case studies </div> </a> </li> </ul> </div> </div> </div> </tab> </nav> </devsite-tabs> </div> <devsite-search enable-signin enable-search enable-suggestions enable-query-completion project-name="TensorFlow Core" tenant-name="TensorFlow" > <form class="devsite-search-form" action="https://www.tensorflow.org/s/results" method="GET"> <div class="devsite-search-container"> <button type="button" search-open class="devsite-search-button devsite-header-icon-button button-flat material-icons" aria-label="Open search"></button> <div class="devsite-searchbox"> <input aria-activedescendant="" aria-autocomplete="list" aria-label="Search" aria-expanded="false" aria-haspopup="listbox" autocomplete="off" class="devsite-search-field devsite-search-query" name="q" placeholder="Search" role="combobox" type="text" value="" > <div class="devsite-search-image material-icons" aria-hidden="true"> </div> <div class="devsite-search-shortcut-icon-container" aria-hidden="true"> <kbd class="devsite-search-shortcut-icon">/</kbd> </div> </div> </div> </form> <button type="button" search-close class="devsite-search-button devsite-header-icon-button button-flat material-icons" aria-label="Close search"></button> </devsite-search> </div> <devsite-language-selector> <ul role="presentation"> <li role="presentation"> <a role="menuitem" lang="en" >English</a> </li> <li role="presentation"> <a role="menuitem" lang="es_419" >Español – América Latina</a> </li> <li role="presentation"> <a role="menuitem" lang="fr" >Français</a> </li> <li role="presentation"> <a role="menuitem" lang="id" >Indonesia</a> </li> <li role="presentation"> <a role="menuitem" lang="it" >Italiano</a> </li> <li role="presentation"> <a role="menuitem" lang="pl" >Polski</a> </li> <li role="presentation"> <a role="menuitem" lang="pt_br" >Português – Brasil</a> </li> <li role="presentation"> <a role="menuitem" lang="vi" >Tiếng Việt</a> </li> <li role="presentation"> <a role="menuitem" lang="tr" >Türkçe</a> </li> <li role="presentation"> <a role="menuitem" lang="ru" >Русский</a> </li> <li role="presentation"> <a role="menuitem" lang="ar" >العربيّة</a> </li> <li role="presentation"> <a role="menuitem" lang="fa" >فارسی</a> </li> <li role="presentation"> <a role="menuitem" lang="hi" >हिंदी</a> </li> <li role="presentation"> <a role="menuitem" lang="bn" >বাংলা</a> </li> <li role="presentation"> <a role="menuitem" lang="th" >ภาษาไทย</a> </li> <li role="presentation"> <a role="menuitem" lang="zh_cn" >中文 – 简体</a> </li> <li role="presentation"> <a role="menuitem" lang="ja" >日本語</a> </li> <li role="presentation"> <a role="menuitem" lang="ko" >한국어</a> </li> </ul> </devsite-language-selector> <a class="devsite-header-link devsite-top-button button gc-analytics-event" href="//github.com/tensorflow" data-category="Site-Wide Custom Events" data-label="Site header link" > GitHub </a> <devsite-user enable-profiles id="devsite-user"> <span class="button devsite-top-button" aria-hidden="true" visually-hidden>Sign in</span> </devsite-user> </div> </div> </div> <div class="devsite-collapsible-section "> <div class="devsite-header-background"> <div class="devsite-product-id-row" > <div class="devsite-product-description-row"> <ul class="devsite-breadcrumb-list" > <li class="devsite-breadcrumb-item "> <a href="https://www.tensorflow.org/tutorials" class="devsite-breadcrumb-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Lower Header" data-value="1" track-type="globalNav" track-name="breadcrumb" track-metadata-position="1" track-metadata-eventdetail="TensorFlow Core" > TensorFlow Core </a> </li> </ul> </div> </div> <div class="devsite-doc-set-nav-row"> <devsite-tabs class="lower-tabs"> <nav class="devsite-tabs-wrapper" aria-label="Lower tabs"> <tab > <a href="https://www.tensorflow.org/tutorials" class="devsite-tabs-content gc-analytics-event " track-metadata-eventdetail="https://www.tensorflow.org/tutorials" track-type="nav" track-metadata-position="nav - tutorials" track-metadata-module="primary nav" data-category="Site-Wide Custom Events" data-label="Tab: Tutorials" track-name="tutorials" > Tutorials </a> </tab> <tab > <a href="https://www.tensorflow.org/guide" class="devsite-tabs-content gc-analytics-event " track-metadata-eventdetail="https://www.tensorflow.org/guide" track-type="nav" track-metadata-position="nav - guide" track-metadata-module="primary nav" data-category="Site-Wide Custom Events" data-label="Tab: Guide" track-name="guide" > Guide </a> </tab> <tab class="devsite-active"> <a href="https://www.tensorflow.org/guide/migrate" class="devsite-tabs-content gc-analytics-event " track-metadata-eventdetail="https://www.tensorflow.org/guide/migrate" track-type="nav" track-metadata-position="nav - migrate to tf2" track-metadata-module="primary nav" aria-label="Migrate to TF2, selected" data-category="Site-Wide Custom Events" data-label="Tab: Migrate to TF2" track-name="migrate to tf2" > Migrate to TF2 </a> </tab> <tab > <a href="https://github.com/tensorflow/docs/tree/master/site/en/r1" class="devsite-tabs-content gc-analytics-event " track-metadata-eventdetail="https://github.com/tensorflow/docs/tree/master/site/en/r1" track-type="nav" track-metadata-position="nav - tf 1 ↗" track-metadata-module="primary nav" data-category="Site-Wide Custom Events" data-label="Tab: TF 1 ↗" track-name="tf 1 ↗" > TF 1 ↗ </a> </tab> </nav> </devsite-tabs> </div> </div> </div> </div> </devsite-header> <devsite-book-nav scrollbars > <div class="devsite-book-nav-filter" > <span class="filter-list-icon material-icons" aria-hidden="true"></span> <input type="text" placeholder="Filter" aria-label="Type to filter" role="searchbox"> <span class="filter-clear-button hidden" data-title="Clear filter" aria-label="Clear filter" role="button" tabindex="0"></span> </div> <nav class="devsite-book-nav devsite-nav nocontent" aria-label="Side menu"> <div class="devsite-mobile-header"> <button type="button" id="devsite-close-nav" class="devsite-header-icon-button button-flat material-icons gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Close navigation" aria-label="Close navigation"> </button> <div class="devsite-product-name-wrapper"> <a href="/" class="devsite-site-logo-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Site logo" track-type="globalNav" track-name="tensorFlow" track-metadata-position="nav" track-metadata-eventDetail="nav"> <picture> <img src="https://www.gstatic.com/devrel-devsite/prod/vd2dddc2199cd18ccf014281c77515e1e906f6b98324fd2a8b5fa9e92b09e8018/tensorflow/images/lockup.svg" class="devsite-site-logo" alt="TensorFlow"> </picture> </a> <span class="devsite-product-name"> <ul class="devsite-breadcrumb-list" > <li class="devsite-breadcrumb-item "> </li> </ul> </span> </div> </div> <div class="devsite-book-nav-wrapper"> <div class="devsite-mobile-nav-top"> <ul class="devsite-nav-list"> <li class="devsite-nav-item"> <a href="/install" class="devsite-nav-title gc-analytics-event devsite-nav-has-children " data-category="Site-Wide Custom Events" data-label="Tab: Install" track-name="install" data-category="Site-Wide Custom Events" data-label="Responsive Tab: Install" track-type="globalNav" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Install </span> <span class="devsite-nav-icon material-icons" data-icon="forward" > </span> </a> </li> <li class="devsite-nav-item"> <a href="/learn" class="devsite-nav-title gc-analytics-event devsite-nav-active" data-category="Site-Wide Custom Events" data-label="Tab: Learn" track-name="learn" data-category="Site-Wide Custom Events" data-label="Responsive Tab: Learn" track-type="globalNav" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Learn </span> </a> <ul class="devsite-nav-responsive-tabs devsite-nav-has-menu "> <li class="devsite-nav-item"> <span class="devsite-nav-title" tooltip data-category="Site-Wide Custom Events" data-label="Tab: Learn" track-name="learn" > <span class="devsite-nav-text" tooltip menu="Learn"> More </span> <span class="devsite-nav-icon material-icons" data-icon="forward" menu="Learn"> </span> </span> </li> </ul> <ul class="devsite-nav-responsive-tabs"> <li class="devsite-nav-item"> <a href="/tutorials" class="devsite-nav-title gc-analytics-event devsite-nav-has-children " data-category="Site-Wide Custom Events" data-label="Tab: Tutorials" track-name="tutorials" data-category="Site-Wide Custom Events" data-label="Responsive Tab: Tutorials" track-type="globalNav" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Tutorials </span> <span class="devsite-nav-icon material-icons" data-icon="forward" > </span> </a> </li> <li class="devsite-nav-item"> <a href="/guide" class="devsite-nav-title gc-analytics-event devsite-nav-has-children " data-category="Site-Wide Custom Events" data-label="Tab: Guide" track-name="guide" data-category="Site-Wide Custom Events" data-label="Responsive Tab: Guide" track-type="globalNav" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Guide </span> <span class="devsite-nav-icon material-icons" data-icon="forward" > </span> </a> </li> <li class="devsite-nav-item"> <a href="/guide/migrate" class="devsite-nav-title gc-analytics-event devsite-nav-has-children devsite-nav-active" data-category="Site-Wide Custom Events" data-label="Tab: Migrate to TF2" track-name="migrate to tf2" data-category="Site-Wide Custom Events" data-label="Responsive Tab: Migrate to TF2" track-type="globalNav" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip menu="_book"> Migrate to TF2 </span> <span class="devsite-nav-icon material-icons" data-icon="forward" menu="_book"> </span> </a> </li> <li class="devsite-nav-item"> <a href="https://github.com/tensorflow/docs/tree/master/site/en/r1" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Tab: TF 1 ↗" track-name="tf 1 ↗" data-category="Site-Wide Custom Events" data-label="Responsive Tab: TF 1 ↗" track-type="globalNav" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > TF 1 ↗ </span> </a> </li> </ul> </li> <li class="devsite-nav-item"> <a href="/api" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Tab: API" track-name="api" data-category="Site-Wide Custom Events" data-label="Responsive Tab: API" track-type="globalNav" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > API </span> </a> <ul class="devsite-nav-responsive-tabs devsite-nav-has-menu "> <li class="devsite-nav-item"> <span class="devsite-nav-title" tooltip data-category="Site-Wide Custom Events" data-label="Tab: API" track-name="api" > <span class="devsite-nav-text" tooltip menu="API"> More </span> <span class="devsite-nav-icon material-icons" data-icon="forward" menu="API"> </span> </span> </li> </ul> </li> <li class="devsite-nav-item"> <a href="/resources/models-datasets" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Tab: Ecosystem" track-name="ecosystem" data-category="Site-Wide Custom Events" data-label="Responsive Tab: Ecosystem" track-type="globalNav" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Ecosystem </span> </a> <ul class="devsite-nav-responsive-tabs devsite-nav-has-menu "> <li class="devsite-nav-item"> <span class="devsite-nav-title" tooltip data-category="Site-Wide Custom Events" data-label="Tab: Ecosystem" track-name="ecosystem" > <span class="devsite-nav-text" tooltip menu="Ecosystem"> More </span> <span class="devsite-nav-icon material-icons" data-icon="forward" menu="Ecosystem"> </span> </span> </li> </ul> </li> <li class="devsite-nav-item"> <a href="/community" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Tab: Community" track-name="community" data-category="Site-Wide Custom Events" data-label="Responsive Tab: Community" track-type="globalNav" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Community </span> </a> <ul class="devsite-nav-responsive-tabs devsite-nav-has-menu "> <li class="devsite-nav-item"> <span class="devsite-nav-title" tooltip data-category="Site-Wide Custom Events" data-label="Tab: Community" track-name="community" > <span class="devsite-nav-text" tooltip menu="Community"> More </span> <span class="devsite-nav-icon material-icons" data-icon="forward" menu="Community"> </span> </span> </li> </ul> </li> <li class="devsite-nav-item"> <a href="/about" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Tab: Why TensorFlow" track-name="why tensorflow" data-category="Site-Wide Custom Events" data-label="Responsive Tab: Why TensorFlow" track-type="globalNav" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Why TensorFlow </span> </a> <ul class="devsite-nav-responsive-tabs devsite-nav-has-menu "> <li class="devsite-nav-item"> <span class="devsite-nav-title" tooltip data-category="Site-Wide Custom Events" data-label="Tab: Why TensorFlow" track-name="why tensorflow" > <span class="devsite-nav-text" tooltip menu="Why TensorFlow"> More </span> <span class="devsite-nav-icon material-icons" data-icon="forward" menu="Why TensorFlow"> </span> </span> </li> </ul> </li> <li class="devsite-nav-item"> <a href="//github.com/tensorflow" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: GitHub" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > GitHub </span> </a> </li> </ul> </div> <div class="devsite-mobile-nav-bottom"> <ul class="devsite-nav-list" menu="_book"> <li class="devsite-nav-item"><a href="/guide/migrate" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /guide/migrate" track-type="bookNav" track-name="click" track-metadata-eventdetail="/guide/migrate" ><span class="devsite-nav-text" tooltip>Migration guide</span></a></li> <li class="devsite-nav-item devsite-nav-heading"><div class="devsite-nav-title devsite-nav-title-no-path"> <span class="devsite-nav-text" tooltip>Migration overview</span> </div></li> <li class="devsite-nav-item"><a href="/guide/migrate/migrate_tf2" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /guide/migrate/migrate_tf2" track-type="bookNav" track-name="click" track-metadata-eventdetail="/guide/migrate/migrate_tf2" ><span class="devsite-nav-text" tooltip>Migrate to TensorFlow 2</span></a></li> <li class="devsite-nav-item"><a href="/guide/migrate/tf1_vs_tf2" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /guide/migrate/tf1_vs_tf2" track-type="bookNav" track-name="click" track-metadata-eventdetail="/guide/migrate/tf1_vs_tf2" ><span class="devsite-nav-text" tooltip>TF1 vs TF2 behavior comparison</span></a></li> <li class="devsite-nav-item"><a href="/guide/migrate/upgrade" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /guide/migrate/upgrade" track-type="bookNav" track-name="click" track-metadata-eventdetail="/guide/migrate/upgrade" ><span class="devsite-nav-text" tooltip>Convert with the upgrade script</span></a></li> <li class="devsite-nav-item devsite-nav-heading"><div class="devsite-nav-title devsite-nav-title-no-path"> <span class="devsite-nav-text" tooltip>Migrate your models</span> </div></li> <li class="devsite-nav-item"><a href="/guide/migrate/model_mapping" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /guide/migrate/model_mapping" track-type="bookNav" track-name="click" track-metadata-eventdetail="/guide/migrate/model_mapping" ><span class="devsite-nav-text" tooltip>TF2 model mapping</span></a></li> <li class="devsite-nav-item"><a href="/guide/migrate/tflite" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /guide/migrate/tflite" track-type="bookNav" track-name="click" track-metadata-eventdetail="/guide/migrate/tflite" ><span class="devsite-nav-text" tooltip>TF Lite models in TF2</span></a></li> <li class="devsite-nav-item"><a href="/guide/migrate/migrating_checkpoints" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /guide/migrate/migrating_checkpoints" track-type="bookNav" track-name="click" track-metadata-eventdetail="/guide/migrate/migrating_checkpoints" ><span class="devsite-nav-text" tooltip>Migrating checkpoints</span></a></li> <li class="devsite-nav-item"><a href="/guide/migrate/canned_estimators" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /guide/migrate/canned_estimators" track-type="bookNav" track-name="click" track-metadata-eventdetail="/guide/migrate/canned_estimators" ><span class="devsite-nav-text" tooltip>Canned and boosted tree estimators</span></a></li> <li class="devsite-nav-item devsite-nav-heading"><div class="devsite-nav-title devsite-nav-title-no-path"> <span class="devsite-nav-text" tooltip>Migrate training and evaluation pipelines</span> </div></li> <li class="devsite-nav-item"><a href="/guide/migrate/migrating_estimator" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /guide/migrate/migrating_estimator" track-type="bookNav" track-name="click" track-metadata-eventdetail="/guide/migrate/migrating_estimator" ><span class="devsite-nav-text" tooltip>Estimators</span></a></li> <li class="devsite-nav-item devsite-nav-external"><a href="https://www.tensorflow.org/tensorboard/migrate" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: https://www.tensorflow.org/tensorboard/migrate" track-type="bookNav" track-name="click" track-metadata-eventdetail="https://www.tensorflow.org/tensorboard/migrate" ><span class="devsite-nav-text" tooltip>Summary APIs</span><span class="devsite-nav-icon material-icons" data-icon="external" data-title="External" aria-hidden="true"></span></a></li> <li class="devsite-nav-item"><a href="/guide/migrate/logging_stop_hook" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /guide/migrate/logging_stop_hook" track-type="bookNav" track-name="click" track-metadata-eventdetail="/guide/migrate/logging_stop_hook" ><span class="devsite-nav-text" tooltip>Estimator logging and stop hooks</span></a></li> <li class="devsite-nav-item"><a href="/guide/migrate/sessionrunhook_callback" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /guide/migrate/sessionrunhook_callback" track-type="bookNav" track-name="click" track-metadata-eventdetail="/guide/migrate/sessionrunhook_callback" ><span class="devsite-nav-text" tooltip>tf.estimator.SessionRunHook API</span></a></li> <li class="devsite-nav-item"><a href="/guide/migrate/early_stopping" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /guide/migrate/early_stopping" track-type="bookNav" track-name="click" track-metadata-eventdetail="/guide/migrate/early_stopping" ><span class="devsite-nav-text" tooltip>Early stopping</span></a></li> <li class="devsite-nav-item"><a href="/guide/migrate/migrating_feature_columns" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /guide/migrate/migrating_feature_columns" track-type="bookNav" track-name="click" track-metadata-eventdetail="/guide/migrate/migrating_feature_columns" ><span class="devsite-nav-text" tooltip>Feature columns to Keras preprocessing layers</span></a></li> <li class="devsite-nav-item"><a href="/guide/migrate/metrics_optimizers" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /guide/migrate/metrics_optimizers" track-type="bookNav" track-name="click" track-metadata-eventdetail="/guide/migrate/metrics_optimizers" ><span class="devsite-nav-text" tooltip>Metrics and optimizers</span></a></li> <li class="devsite-nav-item"><a href="/guide/migrate/fault_tolerance" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /guide/migrate/fault_tolerance" track-type="bookNav" track-name="click" track-metadata-eventdetail="/guide/migrate/fault_tolerance" ><span class="devsite-nav-text" tooltip>Incorporate fault tolerance in training</span></a></li> <li class="devsite-nav-item"><a href="/guide/migrate/evaluator" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /guide/migrate/evaluator" track-type="bookNav" track-name="click" track-metadata-eventdetail="/guide/migrate/evaluator" ><span class="devsite-nav-text" tooltip>Evaluate training metrics with SidecarEvaluator</span></a></li> <li class="devsite-nav-item"><a href="/guide/migrate/tensorboard" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /guide/migrate/tensorboard" track-type="bookNav" track-name="click" track-metadata-eventdetail="/guide/migrate/tensorboard" ><span class="devsite-nav-text" tooltip>TensorBoard metric displays</span></a></li> <li class="devsite-nav-item devsite-nav-heading"><div class="devsite-nav-title devsite-nav-title-no-path"> <span class="devsite-nav-text" tooltip>Migrate saving and export workflows</span> </div></li> <li class="devsite-nav-item"><a href="/guide/migrate/saved_model" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /guide/migrate/saved_model" track-type="bookNav" track-name="click" track-metadata-eventdetail="/guide/migrate/saved_model" ><span class="devsite-nav-text" tooltip>Export models to SavedModel</span></a></li> <li class="devsite-nav-item"><a href="/guide/migrate/checkpoint_saver" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /guide/migrate/checkpoint_saver" track-type="bookNav" track-name="click" track-metadata-eventdetail="/guide/migrate/checkpoint_saver" ><span class="devsite-nav-text" tooltip>Save checkpoints</span></a></li> <li class="devsite-nav-item devsite-nav-heading"><div class="devsite-nav-title devsite-nav-title-no-path"> <span class="devsite-nav-text" tooltip>Migrate distributed training workflows</span> </div></li> <li class="devsite-nav-item"><a href="/guide/migrate/mirrored_strategy" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /guide/migrate/mirrored_strategy" track-type="bookNav" track-name="click" track-metadata-eventdetail="/guide/migrate/mirrored_strategy" ><span class="devsite-nav-text" tooltip>Multi-GPU training</span></a></li> <li class="devsite-nav-item"><a href="/guide/migrate/multi_worker_cpu_gpu_training" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /guide/migrate/multi_worker_cpu_gpu_training" track-type="bookNav" track-name="click" track-metadata-eventdetail="/guide/migrate/multi_worker_cpu_gpu_training" ><span class="devsite-nav-text" tooltip>Multi-worker training on CPU and GPU</span></a></li> <li class="devsite-nav-item"><a href="/guide/migrate/tpu_estimator" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /guide/migrate/tpu_estimator" track-type="bookNav" track-name="click" track-metadata-eventdetail="/guide/migrate/tpu_estimator" ><span class="devsite-nav-text" tooltip>Multi-worker training on TPU</span></a></li> <li class="devsite-nav-item"><a href="/guide/migrate/tpu_embedding" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /guide/migrate/tpu_embedding" track-type="bookNav" track-name="click" track-metadata-eventdetail="/guide/migrate/tpu_embedding" ><span class="devsite-nav-text" tooltip>TPU embedding_columns to TPUEmbedding layer</span></a></li> <li class="devsite-nav-item devsite-nav-heading"><div class="devsite-nav-title devsite-nav-title-no-path"> <span class="devsite-nav-text" tooltip>Validate model quality and performance</span> </div></li> <li class="devsite-nav-item"><a href="/guide/migrate/validate_correctness" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /guide/migrate/validate_correctness" track-type="bookNav" track-name="click" track-metadata-eventdetail="/guide/migrate/validate_correctness" ><span class="devsite-nav-text" tooltip>Validate correctness and numerical equivalence</span></a></li> <li class="devsite-nav-item"><a href="/guide/migrate/migration_debugging" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /guide/migrate/migration_debugging" track-type="bookNav" track-name="click" track-metadata-eventdetail="/guide/migrate/migration_debugging" ><span class="devsite-nav-text" tooltip>Debug TF2 Migrated Training Pipeline</span></a></li> </ul> <ul class="devsite-nav-list" menu="Learn" aria-label="Side menu" hidden> <li class="devsite-nav-item"> <a href="/learn" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Introduction" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Introduction </span> </a> </li> <li class="devsite-nav-item"> <a href="/tutorials" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Tutorials" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Tutorials </span> </a> </li> <li class="devsite-nav-item"> <a href="/guide" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Guide" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Guide </span> </a> </li> <li class="devsite-nav-item"> <a href="/resources/learn-ml" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Learn ML" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Learn ML </span> </a> </li> </ul> <ul class="devsite-nav-list" menu="API" aria-label="Side menu" hidden> <li class="devsite-nav-item"> <a href="/api/stable" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: TensorFlow (v2.16.1)" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > TensorFlow (v2.16.1) </span> </a> </li> <li class="devsite-nav-item"> <a href="/versions" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Versions…" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Versions… </span> </a> </li> <li class="devsite-nav-item"> <a href="https://js.tensorflow.org/api/latest/" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: TensorFlow.js" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > TensorFlow.js </span> </a> </li> <li class="devsite-nav-item"> <a href="/lite/api_docs" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: TensorFlow Lite" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > TensorFlow Lite </span> </a> </li> <li class="devsite-nav-item"> <a href="/tfx/api_docs" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: TFX" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > TFX </span> </a> </li> </ul> <ul class="devsite-nav-list" menu="Ecosystem" aria-label="Side menu" hidden> <li class="devsite-nav-item devsite-nav-heading"> <span class="devsite-nav-title" tooltip > <span class="devsite-nav-text" tooltip > LIBRARIES </span> </span> </li> <li class="devsite-nav-item"> <a href="/js" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: TensorFlow.js" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > TensorFlow.js </span> </a> </li> <li class="devsite-nav-item"> <a href="/lite" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: TensorFlow Lite" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > TensorFlow Lite </span> </a> </li> <li class="devsite-nav-item"> <a href="/tfx" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: TFX" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > TFX </span> </a> </li> <li class="devsite-nav-item"> <a href="/resources/libraries-extensions" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: All libraries" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > All libraries </span> </a> </li> <li class="devsite-nav-item devsite-nav-heading"> <span class="devsite-nav-title" tooltip > <span class="devsite-nav-text" tooltip > RESOURCES </span> </span> </li> <li class="devsite-nav-item"> <a href="/resources/models-datasets" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Models & datasets" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Models & datasets </span> </a> </li> <li class="devsite-nav-item"> <a href="/resources/tools" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Tools" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Tools </span> </a> </li> <li class="devsite-nav-item"> <a href="/responsible_ai" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Responsible AI" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Responsible AI </span> </a> </li> <li class="devsite-nav-item"> <a href="/resources/recommendation-systems" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Recommendation systems" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Recommendation systems </span> </a> </li> </ul> <ul class="devsite-nav-list" menu="Community" aria-label="Side menu" hidden> <li class="devsite-nav-item"> <a href="/community/groups" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Groups" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Groups </span> </a> </li> <li class="devsite-nav-item"> <a href="/community/contribute" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Contribute" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Contribute </span> </a> </li> <li class="devsite-nav-item"> <a href="https://blog.tensorflow.org/" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Blog" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Blog </span> </a> </li> <li class="devsite-nav-item"> <a href="https://discuss.tensorflow.org" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Forum" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Forum </span> </a> </li> </ul> <ul class="devsite-nav-list" menu="Why TensorFlow" aria-label="Side menu" hidden> <li class="devsite-nav-item"> <a href="/about" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: About" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > About </span> </a> </li> <li class="devsite-nav-item"> <a href="/about/case-studies" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Case studies" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Case studies </span> </a> </li> </ul> </div> </div> </nav> </devsite-book-nav> <section id="gc-wrapper"> <main role="main" id="main-content" class="devsite-main-content" has-book-nav has-sidebar > <div class="devsite-sidebar"> <div class="devsite-sidebar-content"> <devsite-toc class="devsite-nav" role="navigation" aria-label="On this page" depth="2" scrollbars ></devsite-toc> <devsite-recommendations-sidebar class="nocontent devsite-nav"> </devsite-recommendations-sidebar> </div> </div> <devsite-content> <article class="devsite-article"><style> /* Styles inlined from /site-assets/css/style.css */ /* override theme */ table img { max-width: 100%; } /* .devsite-terminal virtualenv prompt */ .tfo-terminal-venv::before { content: "(venv) $ " !important; } /* .devsite-terminal root prompt */ .tfo-terminal-root::before { content: "# " !important; } /* Used in links for type annotations in function/method signatures */ .tfo-signature-link a, .tfo-signature-link a:visited, .tfo-signature-link a:hover, .tfo-signature-link a:focus, .tfo-signature-link a:hover *, .tfo-signature-link a:focus * { text-decoration: none !important; } .tfo-signature-link a, .tfo-signature-link a:visited { border-bottom: 1px dotted #1a73e8; } .tfo-signature-link a:focus { border-bottom-style: solid; } /* .devsite-terminal Windows prompt */ .tfo-terminal-windows::before { content: "C:\\> " !important; } /* .devsite-terminal Windows prompt w/ virtualenv */ .tfo-terminal-windows-venv::before { content: "(venv) C:\\> " !important; } .tfo-diff-green-one-level + * { background: rgba(175, 245, 162, .6) !important; } .tfo-diff-green + * > * { background: rgba(175, 245, 162, .6) !important; } .tfo-diff-green-list + ul > li:first-of-type { background: rgba(175, 245, 162, .6) !important; } .tfo-diff-red-one-level + * { background: rgba(255, 230, 230, .6) !important; text-decoration: line-through !important; } .tfo-diff-red + * > * { background: rgba(255, 230, 230, .6) !important; text-decoration: line-through !important; } .tfo-diff-red-list + ul > li:first-of-type { background: rgba(255, 230, 230, .6) !important; text-decoration: line-through !important; } devsite-code .tfo-notebook-code-cell-output { max-height: 300px; overflow: auto; background: rgba(255, 247, 237, 1); /* orange bg to distinguish from input code cells */ } devsite-code .tfo-notebook-code-cell-output + .devsite-code-buttons-container button { background: rgba(255, 247, 237, .7); /* orange bg to distinguish from input code cells */ } devsite-code[dark-code] .tfo-notebook-code-cell-output { background: rgba(64, 78, 103, 1); /* medium slate */ } devsite-code[dark-code] .tfo-notebook-code-cell-output + .devsite-code-buttons-container button { background: rgba(64, 78, 103, .7); /* medium slate */ } /* override default table styles for notebook buttons */ .devsite-table-wrapper .tfo-notebook-buttons { display: inline-block; margin-left: 3px; width: auto; } .tfo-notebook-buttons td { padding-left: 0; padding-right: 20px; } .tfo-notebook-buttons a, .tfo-notebook-buttons :link, .tfo-notebook-buttons :visited { border-radius: 8px; box-shadow: 0 1px 2px 0 rgba(60, 64, 67, .3), 0 1px 3px 1px rgba(60, 64, 67, .15); color: #202124; padding: 12px 17px; transition: box-shadow 0.2s; } .tfo-notebook-buttons a:hover, .tfo-notebook-buttons a:focus { box-shadow: 0 1px 2px 0 rgba(60, 64, 67, .3), 0 2px 6px 2px rgba(60, 64, 67, .15); } .tfo-notebook-buttons tr { background: 0; border: 0; } /* on rendered notebook page, remove link to webpage since we're already here */ .tfo-notebook-buttons:not(.tfo-api) td:first-child { display: none; } .tfo-notebook-buttons td > a { -webkit-box-align: center; -ms-flex-align: center; align-items: center; display: -webkit-box; display: -ms-flexbox; display: flex; } .tfo-notebook-buttons td > a > img { margin-right: 8px; } /* landing pages */ .tfo-landing-row-item-inset-white { background-color: #fff; padding: 32px; } .tfo-landing-row-item-inset-white ol, .tfo-landing-row-item-inset-white ul { padding-left: 20px; } /* colab callout button */ .colab-callout-row devsite-code { border-radius: 8px 8px 0 0; box-shadow: none; } .colab-callout-footer { background: #e3e4e7; border-radius: 0 0 8px 8px; color: #37474f; padding: 20px; } .colab-callout-row devsite-code[dark-code] + .colab-callout-footer { background: #3f4f66; } .colab-callout-footer > .button { margin-top: 4px; color: #ff5c00; } .colab-callout-footer > a > span { vertical-align: middle; color: #37474f; padding-left: 10px; font-size: 14px; } .colab-callout-row devsite-code[dark-code] + .colab-callout-footer > a > span { color: #fff; } a.colab-button { background: rgba(255, 255, 255, .75); border: solid 1px rgba(0, 0, 0, .08); border-bottom-color: rgba(0, 0, 0, .15); border-radius: 4px; color: #aaa; display: inline-block; font-size: 11px !important; font-weight: 300; line-height: 16px; padding: 4px 8px; text-decoration: none; text-transform: uppercase; } a.colab-button:hover { background: white; border-color: rgba(0, 0, 0, .2); color: #666; } a.colab-button span { background: url(/images/colab_logo_button.svg) no-repeat 1px 1px / 20px; border-radius: 4px; display: inline-block; padding-left: 24px; text-decoration: none; } @media screen and (max-width: 600px) { .tfo-notebook-buttons td { display: block; } } /* guide and tutorials landing page cards and sections */ .tfo-landing-page-card { padding: 16px; box-shadow: 0 0 36px rgba(0,0,0,0.1); border-radius: 10px; } /* Page section headings */ .tfo-landing-page-heading h2, h2.tfo-landing-page-heading { font-family: "Google Sans", sans-serif; color: #425066; font-size: 30px; font-weight: 700; line-height: 40px; } /* Item title headings */ .tfo-landing-page-heading h3, h3.tfo-landing-page-heading, .tfo-landing-page-card h3, h3.tfo-landing-page-card { font-family: "Google Sans", sans-serif; color: #425066; font-size: 20px; font-weight: 500; line-height: 26px; } /* List of tutorials notebooks for subsites */ .tfo-landing-page-resources-ul { padding-left: 15px } .tfo-landing-page-resources-ul > li { margin: 6px 0; } /* Temporary fix to hide product description in header on landing pages */ devsite-header .devsite-product-description { display: none; } </style> <div class="devsite-article-meta nocontent" role="navigation"> <ul class="devsite-breadcrumb-list" aria-label="Breadcrumb"> <li class="devsite-breadcrumb-item "> <a href="https://www.tensorflow.org/" class="devsite-breadcrumb-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Breadcrumbs" data-value="1" track-type="globalNav" track-name="breadcrumb" track-metadata-position="1" track-metadata-eventdetail="TensorFlow" > TensorFlow </a> </li> <li class="devsite-breadcrumb-item "> <div class="devsite-breadcrumb-guillemet material-icons" aria-hidden="true"></div> <a href="https://www.tensorflow.org/learn" class="devsite-breadcrumb-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Breadcrumbs" data-value="2" track-type="globalNav" track-name="breadcrumb" track-metadata-position="2" track-metadata-eventdetail="" > Learn </a> </li> <li class="devsite-breadcrumb-item "> <div class="devsite-breadcrumb-guillemet material-icons" aria-hidden="true"></div> <a href="https://www.tensorflow.org/tutorials" class="devsite-breadcrumb-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Breadcrumbs" data-value="3" track-type="globalNav" track-name="breadcrumb" track-metadata-position="3" track-metadata-eventdetail="TensorFlow Core" > TensorFlow Core </a> </li> <li class="devsite-breadcrumb-item "> <div class="devsite-breadcrumb-guillemet material-icons" aria-hidden="true"></div> <a href="https://www.tensorflow.org/guide/migrate" class="devsite-breadcrumb-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Breadcrumbs" data-value="4" track-type="globalNav" track-name="breadcrumb" track-metadata-position="4" track-metadata-eventdetail="" > Migrate to TF2 </a> </li> </ul> <devsite-thumb-rating position="header"> </devsite-thumb-rating> </div> <h1 class="devsite-page-title" tabindex="-1"> Migrate the SavedModel workflow </h1> <devsite-feature-tooltip ack-key="AckCollectionsBookmarkTooltipDismiss" analytics-category="Site-Wide Custom Events" analytics-action-show="Callout Profile displayed" analytics-action-close="Callout Profile dismissed" analytics-label="Create Collection Callout" class="devsite-page-bookmark-tooltip nocontent" dismiss-button="true" id="devsite-collections-dropdown" dismiss-button-text="Dismiss" close-button-text="Got it"> <devsite-bookmark></devsite-bookmark> <span slot="popout-heading"> Stay organized with collections </span> <span slot="popout-contents"> Save and categorize content based on your preferences. </span> </devsite-feature-tooltip> <div class="devsite-page-title-meta"><devsite-view-release-notes></devsite-view-release-notes></div> <devsite-toc class="devsite-nav" depth="2" devsite-toc-embedded > </devsite-toc> <div class="devsite-article-body clearfix "> <p></p> <!-- DO NOT EDIT! Automatically generated file. --> <div itemscope itemtype="http://developers.google.com/ReferenceObject"> <meta itemprop="name" content="Migrate the SavedModel workflow" /> <meta itemprop="path" content="Guide & Tutorials" /> <meta itemprop="property" content="tf.Graph"/> <meta itemprop="property" content="tf.Module"/> <meta itemprop="property" content="tf.TensorSpec"/> <meta itemprop="property" content="tf.Variable"/> <meta itemprop="property" content="tf.compat.v1.Session"/> <meta itemprop="property" content="tf.compat.v1.placeholder"/> <meta itemprop="property" content="tf.compat.v1.saved_model.Builder"/> <meta itemprop="property" content="tf.compat.v1.saved_model.load"/> <meta itemprop="property" content="tf.compat.v1.saved_model.predict_signature_def"/> <meta itemprop="property" content="tf.compat.v1.saved_model.simple_save"/> <meta itemprop="property" content="tf.compat.v1.train.Saver"/> <meta itemprop="property" content="tf.compat.v1.train.get_global_step"/> <meta itemprop="property" content="tf.compat.v1.train.import_meta_graph"/> <meta itemprop="property" content="tf.compat.v1.wrap_function"/> <meta itemprop="property" content="tf.constant"/> <meta itemprop="property" content="tf.data.Dataset"/> <meta itemprop="property" content="tf.function"/> <meta itemprop="property" content="tf.keras.Input"/> <meta itemprop="property" content="tf.keras.Model"/> <meta itemprop="property" content="tf.keras.models.load_model"/> <meta itemprop="property" content="tf.math.multiply"/> <meta itemprop="property" content="tf.saved_model.load"/> <meta itemprop="property" content="tf.saved_model.save"/> </div> <table class="tfo-notebook-buttons" align="left"> <td> <a target="_blank" href="https://www.tensorflow.org/guide/migrate/saved_model"> <img src="https://www.tensorflow.org/images/tf_logo_32px.png"> View on TensorFlow.org</a> </td> <td> <a target="_blank" href="https://colab.research.google.com/github/tensorflow/docs/blob/master/site/en/guide/migrate/saved_model.ipynb"> <img src="https://www.tensorflow.org/images/colab_logo_32px.png"> Run in Google Colab</a> </td> <td> <a target="_blank" href="https://github.com/tensorflow/docs/blob/master/site/en/guide/migrate/saved_model.ipynb"> <img src="https://www.tensorflow.org/images/GitHub-Mark-32px.png"> View source on GitHub</a> </td> <td> <a href="https://storage.googleapis.com/tensorflow_docs/docs/site/en/guide/migrate/saved_model.ipynb"><img src="https://www.tensorflow.org/images/download_logo_32px.png">Download notebook</a> </td> </table> <p>Once you have migrated your model from TensorFlow 1's graphs and sessions to TensorFlow 2 APIs, such as <a href="https://www.tensorflow.org/api_docs/python/tf/function"><code translate="no" dir="ltr">tf.function</code></a>, <a href="https://www.tensorflow.org/api_docs/python/tf/Module"><code translate="no" dir="ltr">tf.Module</code></a>, and <a href="https://www.tensorflow.org/api_docs/python/tf/keras/Model"><code translate="no" dir="ltr">tf.keras.Model</code></a>, you can migrate the model saving and loading code. This notebook provides examples of how you can save and load in the SavedModel format in TensorFlow 1 and TensorFlow 2. Here is a quick overview of the related API changes for migration from TensorFlow 1 to TensorFlow 2:</p> <table> <thead> <tr> <th></th> <th>TensorFlow 1</th> <th>Migration to TensorFlow 2</th> </tr> </thead> <tbody> <tr> <td><strong>Saving</strong></td> <td><a href="https://www.tensorflow.org/api_docs/python/tf/compat/v1/saved_model/Builder"><code translate="no" dir="ltr">tf.compat.v1.saved_model.Builder</code></a><br><a href="https://www.tensorflow.org/api_docs/python/tf/compat/v1/saved_model/simple_save"><code translate="no" dir="ltr">tf.compat.v1.saved_model.simple_save</code></a></td> <td><a href="https://www.tensorflow.org/api_docs/python/tf/saved_model/save"><code translate="no" dir="ltr">tf.saved_model.save</code></a><br>Keras: <a href="https://www.tensorflow.org/api_docs/python/tf/keras/models/save_model"><code translate="no" dir="ltr">tf.keras.models.save_model</code></a></td> </tr> <tr> <td><strong>Loading</strong></td> <td><a href="https://www.tensorflow.org/api_docs/python/tf/compat/v1/saved_model/load"><code translate="no" dir="ltr">tf.compat.v1.saved_model.load</code></a></td> <td><a href="https://www.tensorflow.org/api_docs/python/tf/saved_model/load"><code translate="no" dir="ltr">tf.saved_model.load</code></a><br>Keras: <a href="https://www.tensorflow.org/api_docs/python/tf/keras/models/load_model"><code translate="no" dir="ltr">tf.keras.models.load_model</code></a></td> </tr> <tr> <td><strong>Signatures</strong>: a set of input<br>and output tensors that<br>can be used to run the<br></td> <td>Generated using the <code translate="no" dir="ltr">*.signature_def</code> utils<br>(e.g. <a href="https://www.tensorflow.org/api_docs/python/tf/compat/v1/saved_model/predict_signature_def"><code translate="no" dir="ltr">tf.compat.v1.saved_model.predict_signature_def</code></a>)</td> <td>Write a <a href="https://www.tensorflow.org/api_docs/python/tf/function"><code translate="no" dir="ltr">tf.function</code></a> and export it using the <code translate="no" dir="ltr">signatures</code> argument<br>in <a href="https://www.tensorflow.org/api_docs/python/tf/saved_model/save"><code translate="no" dir="ltr">tf.saved_model.save</code></a>.</td> </tr> <tr> <td><strong>Classification<br>and regression</strong>:<br>special types of signatures</td> <td>Generated with<br><a href="https://www.tensorflow.org/api_docs/python/tf/compat/v1/saved_model/classification_signature_def"><code translate="no" dir="ltr">tf.compat.v1.saved_model.classification_signature_def</code></a>,<br><a href="https://www.tensorflow.org/api_docs/python/tf/compat/v1/saved_model/regression_signature_def"><code translate="no" dir="ltr">tf.compat.v1.saved_model.regression_signature_def</code></a>,<br>and certain Estimator exports.</td> <td>These two signature types have been removed from TensorFlow 2.<br>If the serving library requires these method names,<br><a href="https://www.tensorflow.org/api_docs/python/tf/compat/v1/saved_model/signature_def_utils/MethodNameUpdater"><code translate="no" dir="ltr">tf.compat.v1.saved_model.signature_def_utils.MethodNameUpdater</code></a>.</td> </tr> </tbody> </table> <p>For a more in-depth explanation of the mapping, refer to the <a href="#changes_from_tf1_to_tf2">Changes from TensorFlow 1 to TensorFlow 2</a> section below.</p> <h2 id="setup" data-text="Setup" tabindex="-1">Setup</h2> <p>The examples below show how to export and load the same dummy TensorFlow model (defined as <code translate="no" dir="ltr">add_two</code> below) to a SavedModel format using the TensorFlow 1 and TensorFlow 2 APIs. Start by setting up the imports and utility functions:</p> <div></div><devsite-code><pre class="devsite-click-to-copy" translate="no" dir="ltr" is-upgraded syntax="Python"><code translate="no" dir="ltr"><span class="devsite-syntax-kn">import</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nn">tensorflow</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-k">as</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nn">tf</span> <span class="devsite-syntax-kn">import</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nn">tensorflow.compat.v1</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-k">as</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nn">tf1</span> <span class="devsite-syntax-kn">import</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nn">shutil</span> <span class="devsite-syntax-k">def</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nf">remove_dir</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-n">path</span><span class="devsite-syntax-p">):</span> <span class="devsite-syntax-k">try</span><span class="devsite-syntax-p">:</span> <span class="devsite-syntax-n">shutil</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">rmtree</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-n">path</span><span class="devsite-syntax-p">)</span> <span class="devsite-syntax-k">except</span><span class="devsite-syntax-p">:</span> <span class="devsite-syntax-k">pass</span> <span class="devsite-syntax-k">def</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nf">add_two</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-nb">input</span><span class="devsite-syntax-p">):</span> <span class="devsite-syntax-k">return</span> <span class="devsite-syntax-nb">input</span> <span class="devsite-syntax-o">+</span> <span class="devsite-syntax-mi">2</span> </code></pre></devsite-code> <h2 id="tensorflow_1_save_and_export_a_savedmodel" data-text="TensorFlow 1: Save and export a SavedModel" tabindex="-1">TensorFlow 1: Save and export a SavedModel</h2> <p>In TensorFlow 1, you use the <a href="https://www.tensorflow.org/api_docs/python/tf/compat/v1/saved_model/Builder"><code translate="no" dir="ltr">tf.compat.v1.saved_model.Builder</code></a>, <a href="https://www.tensorflow.org/api_docs/python/tf/compat/v1/saved_model/simple_save"><code translate="no" dir="ltr">tf.compat.v1.saved_model.simple_save</code></a>, and <code translate="no" dir="ltr">tf.estimator.Estimator.export_saved_model</code> APIs to build, save, and export the TensorFlow graph and session:</p> <h3 id="1_save_the_graph_as_a_savedmodel_with_savedmodelbuilder" data-text="1. Save the graph as a SavedModel with SavedModelBuilder" tabindex="-1">1. Save the graph as a SavedModel with SavedModelBuilder</h3> <div></div><devsite-code><pre class="devsite-click-to-copy" translate="no" dir="ltr" is-upgraded syntax="GDScript"><code translate="no" dir="ltr"><span class="devsite-syntax-n">remove_dir</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s2">"saved-model-builder"</span><span class="devsite-syntax-p">)</span> <span class="devsite-syntax-n">with</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">tf</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">Graph</span><span class="devsite-syntax-p">()</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">as_default</span><span class="devsite-syntax-p">()</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-k">as</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">g</span><span class="devsite-syntax-p">:</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">with</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">tf1</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">Session</span><span class="devsite-syntax-p">()</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-k">as</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">sess</span><span class="devsite-syntax-p">:</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">input</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">tf1</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">placeholder</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-n">tf</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">float32</span><span class="devsite-syntax-p">,</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">shape</span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-p">[])</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">output</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">add_two</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-n">input</span><span class="devsite-syntax-p">)</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-nb">print</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s2">"add two output: "</span><span class="devsite-syntax-p">,</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">sess</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">run</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-n">output</span><span class="devsite-syntax-p">,</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">{</span><span class="devsite-syntax-n">input</span><span class="devsite-syntax-p">:</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-mf">3.</span><span class="devsite-syntax-p">}))</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-c1"># Save with SavedModelBuilder</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">builder</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">tf1</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">saved_model</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">Builder</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s1">'saved-model-builder'</span><span class="devsite-syntax-p">)</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">sig_def</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">tf1</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">saved_model</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">predict_signature_def</span><span class="devsite-syntax-p">(</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">inputs</span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-p">{</span><span class="devsite-syntax-s1">'input'</span><span class="devsite-syntax-p">:</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">input</span><span class="devsite-syntax-p">},</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">outputs</span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-p">{</span><span class="devsite-syntax-s1">'output'</span><span class="devsite-syntax-p">:</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">output</span><span class="devsite-syntax-p">})</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">builder</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">add_meta_graph_and_variables</span><span class="devsite-syntax-p">(</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">sess</span><span class="devsite-syntax-p">,</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">tags</span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-p">[</span><span class="devsite-syntax-s2">"serve"</span><span class="devsite-syntax-p">],</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">signature_def_map</span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-p">{</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">tf</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">saved_model</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">DEFAULT_SERVING_SIGNATURE_DEF_KEY</span><span class="devsite-syntax-p">:</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">sig_def</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">})</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">builder</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">save</span><span class="devsite-syntax-p">()</span> </code></pre></devsite-code><div></div><devsite-code><pre class="devsite-click-to-copy" translate="no" dir="ltr" is-upgraded syntax="Matlab"><code translate="no" dir="ltr"><span class="devsite-syntax-sx">!saved_model_cli run --dir saved-model-builder --tag_set serve \</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">--</span><span class="devsite-syntax-n">signature_def</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">serving_default</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">--</span><span class="devsite-syntax-n">input_exprs</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nb">input</span><span class="devsite-syntax-p">=</span><span class="devsite-syntax-mi">10</span> </code></pre></devsite-code> <h3 id="2_build_a_savedmodel_for_serving" data-text="2. Build a SavedModel for serving" tabindex="-1">2. Build a SavedModel for serving</h3> <div></div><devsite-code><pre class="devsite-click-to-copy" translate="no" dir="ltr" is-upgraded syntax="Carbon"><code translate="no" dir="ltr"><span class="devsite-syntax-nx">remove_dir</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s">"simple-save"</span><span class="devsite-syntax-p">)</span> <span class="devsite-syntax-nx">with</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">tf</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-nx">Graph</span><span class="devsite-syntax-p">().</span><span class="devsite-syntax-nx">as_default</span><span class="devsite-syntax-p">()</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-k">as</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">g</span><span class="devsite-syntax-p">:</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">with</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">tf1</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-nx">Session</span><span class="devsite-syntax-p">()</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-k">as</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">sess</span><span class="devsite-syntax-p">:</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">input</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">=</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">tf1</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-nx">placeholder</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-nx">tf</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-nx">float32</span><span class="devsite-syntax-p">,</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">shape</span><span class="devsite-syntax-p">=[])</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">output</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">=</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">add_two</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-nx">input</span><span class="devsite-syntax-p">)</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">print</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s">"add_two output: "</span><span class="devsite-syntax-p">,</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">sess</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-nx">run</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-nx">output</span><span class="devsite-syntax-p">,</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">{</span><span class="devsite-syntax-nx">input</span><span class="devsite-syntax-p">:</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-mi">3</span><span class="devsite-syntax-p">.}))</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">tf1</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-nx">saved_model</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-nx">simple_save</span><span class="devsite-syntax-p">(</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">sess</span><span class="devsite-syntax-p">,</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-err">'</span><span class="devsite-syntax-nx">simple</span><span class="devsite-syntax-o">-</span><span class="devsite-syntax-nx">save</span><span class="devsite-syntax-err">'</span><span class="devsite-syntax-p">,</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">inputs</span><span class="devsite-syntax-p">={</span><span class="devsite-syntax-err">'</span><span class="devsite-syntax-nx">input</span><span class="devsite-syntax-err">'</span><span class="devsite-syntax-p">:</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">input</span><span class="devsite-syntax-p">},</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">outputs</span><span class="devsite-syntax-p">={</span><span class="devsite-syntax-err">'</span><span class="devsite-syntax-nx">output</span><span class="devsite-syntax-err">'</span><span class="devsite-syntax-p">:</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">output</span><span class="devsite-syntax-p">})</span> </code></pre></devsite-code><div></div><devsite-code><pre class="devsite-click-to-copy" translate="no" dir="ltr" is-upgraded syntax="Matlab"><code translate="no" dir="ltr"><span class="devsite-syntax-sx">!saved_model_cli run --dir simple-save --tag_set serve \</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">--</span><span class="devsite-syntax-n">signature_def</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">serving_default</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">--</span><span class="devsite-syntax-n">input_exprs</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nb">input</span><span class="devsite-syntax-p">=</span><span class="devsite-syntax-mi">10</span> </code></pre></devsite-code> <h3 id="3_export_the_estimator_inference_graph_as_a_savedmodel" data-text="3. Export the Estimator inference graph as a SavedModel" tabindex="-1">3. Export the Estimator inference graph as a SavedModel</h3> <p>In the definition of the Estimator <code translate="no" dir="ltr">model_fn</code> (defined below), you can define signatures in your model by returning <code translate="no" dir="ltr">export_outputs</code> in the <code translate="no" dir="ltr">tf.estimator.EstimatorSpec</code>. There are different types of outputs:</p> <ul> <li><code translate="no" dir="ltr">tf.estimator.export.ClassificationOutput</code></li> <li><code translate="no" dir="ltr">tf.estimator.export.RegressionOutput</code></li> <li><code translate="no" dir="ltr">tf.estimator.export.PredictOutput</code></li> </ul> <p>These will produce classification, regression, and prediction signature types, respectively.</p> <p>When the estimator is exported with <code translate="no" dir="ltr">tf.estimator.Estimator.export_saved_model</code>, these signatures will be saved with the model.</p> <div></div><devsite-code><pre class="devsite-click-to-copy" translate="no" dir="ltr" is-upgraded syntax="MySQL"><code translate="no" dir="ltr"><span class="devsite-syntax-n">def</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">model_fn</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-n">features</span><span class="devsite-syntax-p">,</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">labels</span><span class="devsite-syntax-p">,</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-k">mode</span><span class="devsite-syntax-p">)</span><span class="devsite-syntax-o">:</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">output</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">add_two</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-n">features</span><span class="devsite-syntax-err">[</span><span class="devsite-syntax-s1">'input'</span><span class="devsite-syntax-err">]</span><span class="devsite-syntax-p">)</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">step</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">tf1</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-n">train</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-n">get_global_step</span><span class="devsite-syntax-p">()</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-k">return</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">tf</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-n">estimator</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-n">EstimatorSpec</span><span class="devsite-syntax-p">(</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-k">mode</span><span class="devsite-syntax-p">,</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">predictions</span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-n">output</span><span class="devsite-syntax-p">,</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">train_op</span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-n">step</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-n">assign_add</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-mi">1</span><span class="devsite-syntax-p">),</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">loss</span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-n">tf</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-n">constant</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-mf">0.</span><span class="devsite-syntax-p">),</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">export_outputs</span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-err">{</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">tf</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-n">saved_model</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-n">DEFAULT_SERVING_SIGNATURE_DEF_KEY</span><span class="devsite-syntax-o">:</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-err">\</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">tf</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-n">estimator</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-k">export</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-n">PredictOutput</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-err">{</span><span class="devsite-syntax-s1">'output'</span><span class="devsite-syntax-o">:</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">output</span><span class="devsite-syntax-err">}</span><span class="devsite-syntax-p">)</span><span class="devsite-syntax-err">}</span><span class="devsite-syntax-p">)</span> <span class="devsite-syntax-n">est</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">tf</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-n">estimator</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-n">Estimator</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-n">model_fn</span><span class="devsite-syntax-p">,</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-s1">'estimator-checkpoints'</span><span class="devsite-syntax-p">)</span> <span class="devsite-syntax-c1"># Train for one step to create a checkpoint.</span> <span class="devsite-syntax-n">def</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">train_fn</span><span class="devsite-syntax-p">()</span><span class="devsite-syntax-o">:</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-k">return</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">tf</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-k">data</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-n">Dataset</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-n">from_tensors</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-err">{</span><span class="devsite-syntax-s1">'input'</span><span class="devsite-syntax-o">:</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-mf">3.</span><span class="devsite-syntax-err">}</span><span class="devsite-syntax-p">)</span> <span class="devsite-syntax-n">est</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-n">train</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-n">train_fn</span><span class="devsite-syntax-p">,</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">steps</span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-mi">1</span><span class="devsite-syntax-p">)</span> <span class="devsite-syntax-c1"># This utility function `build_raw_serving_input_receiver_fn` takes in raw</span> <span class="devsite-syntax-c1"># tensor features and builds an "input serving receiver function", which</span> <span class="devsite-syntax-c1"># creates placeholder inputs to the model.</span> <span class="devsite-syntax-n">serving_input_fn</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">tf</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-n">estimator</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-k">export</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-n">build_raw_serving_input_receiver_fn</span><span class="devsite-syntax-p">(</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-err">{</span><span class="devsite-syntax-s1">'input'</span><span class="devsite-syntax-o">:</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">tf</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-n">constant</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-mf">3.</span><span class="devsite-syntax-p">)</span><span class="devsite-syntax-err">}</span><span class="devsite-syntax-p">)</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-c1"># Pass in a dummy input batch.</span> <span class="devsite-syntax-n">estimator_path</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">est</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-n">export_saved_model</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s1">'exported-estimator'</span><span class="devsite-syntax-p">,</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">serving_input_fn</span><span class="devsite-syntax-p">)</span> <span class="devsite-syntax-c1"># Estimator's export_saved_model creates a time stamped directory. Move this</span> <span class="devsite-syntax-c1"># to a set path so it can be inspected with `saved_model_cli` in the cell below.</span> <span class="devsite-syntax-o">!</span><span class="devsite-syntax-n">rm</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">-</span><span class="devsite-syntax-n">rf</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">estimator</span><span class="devsite-syntax-o">-</span><span class="devsite-syntax-n">model</span> <span class="devsite-syntax-k">import</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">shutil</span> <span class="devsite-syntax-n">shutil</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-n">move</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-n">estimator_path</span><span class="devsite-syntax-p">,</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-s1">'estimator-model'</span><span class="devsite-syntax-p">)</span> </code></pre></devsite-code><div></div><devsite-code><pre class="devsite-click-to-copy" translate="no" dir="ltr" is-upgraded syntax="Matlab"><code translate="no" dir="ltr"><span class="devsite-syntax-sx">!saved_model_cli run --dir estimator-model --tag_set serve \</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">--</span><span class="devsite-syntax-n">signature_def</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">serving_default</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">--</span><span class="devsite-syntax-n">input_exprs</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nb">input</span><span class="devsite-syntax-p">=[</span><span class="devsite-syntax-mi">10</span><span class="devsite-syntax-p">]</span> </code></pre></devsite-code> <h2 id="tensorflow_2_save_and_export_a_savedmodel" data-text="TensorFlow 2: Save and export a SavedModel" tabindex="-1">TensorFlow 2: Save and export a SavedModel</h2> <h3 id="save_and_export_a_savedmodel_defined_with_tfmodule" data-text="Save and export a SavedModel defined with tf.Module" tabindex="-1">Save and export a SavedModel defined with tf.Module</h3> <p>To export your model in TensorFlow 2, you must define a <a href="https://www.tensorflow.org/api_docs/python/tf/Module"><code translate="no" dir="ltr">tf.Module</code></a> or a <a href="https://www.tensorflow.org/api_docs/python/tf/keras/Model"><code translate="no" dir="ltr">tf.keras.Model</code></a> to hold all of your model's variables and functions. Then, you can call <a href="https://www.tensorflow.org/api_docs/python/tf/saved_model/save"><code translate="no" dir="ltr">tf.saved_model.save</code></a> to create a SavedModel. Refer to the <em>Saving a custom model</em> section in the <a href="https://www.tensorflow.org/guide/saved_model">Using the SavedModel format</a> guide to learn more.</p> <div></div><devsite-code><pre class="devsite-click-to-copy" translate="no" dir="ltr" is-upgraded syntax="Carbon"><code translate="no" dir="ltr"><span class="devsite-syntax-kd">class</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">MyModel</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-nx">tf</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-nx">Module</span><span class="devsite-syntax-p">):</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-err">@</span><span class="devsite-syntax-nx">tf</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-nx">function</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">def</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">__call__</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-kp">self</span><span class="devsite-syntax-p">,</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">input</span><span class="devsite-syntax-p">):</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-k">return</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">add_two</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-nx">input</span><span class="devsite-syntax-p">)</span> <span class="devsite-syntax-nx">model</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">=</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">MyModel</span><span class="devsite-syntax-p">()</span> <span class="devsite-syntax-err">@</span><span class="devsite-syntax-nx">tf</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-nx">function</span> <span class="devsite-syntax-nx">def</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">serving_default</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-nx">input</span><span class="devsite-syntax-p">):</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-k">return</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">{</span><span class="devsite-syntax-err">'</span><span class="devsite-syntax-nx">output</span><span class="devsite-syntax-err">'</span><span class="devsite-syntax-p">:</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">model</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-nx">input</span><span class="devsite-syntax-p">)}</span> <span class="devsite-syntax-nx">signature_function</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">=</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">serving_default</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-nx">get_concrete_function</span><span class="devsite-syntax-p">(</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">tf</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-nx">TensorSpec</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-nx">shape</span><span class="devsite-syntax-p">=[],</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">dtype</span><span class="devsite-syntax-p">=</span><span class="devsite-syntax-nx">tf</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-nx">float32</span><span class="devsite-syntax-p">))</span> <span class="devsite-syntax-nx">tf</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-nx">saved_model</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-nx">save</span><span class="devsite-syntax-p">(</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">model</span><span class="devsite-syntax-p">,</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-err">'</span><span class="devsite-syntax-nx">tf2</span><span class="devsite-syntax-o">-</span><span class="devsite-syntax-nx">save</span><span class="devsite-syntax-err">'</span><span class="devsite-syntax-p">,</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">signatures</span><span class="devsite-syntax-p">={</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">tf</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-nx">saved_model</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-nx">DEFAULT_SERVING_SIGNATURE_DEF_KEY</span><span class="devsite-syntax-p">:</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">signature_function</span><span class="devsite-syntax-p">})</span> </code></pre></devsite-code><div></div><devsite-code><pre class="devsite-click-to-copy" translate="no" dir="ltr" is-upgraded syntax="Matlab"><code translate="no" dir="ltr"><span class="devsite-syntax-sx">!saved_model_cli run --dir tf2-save --tag_set serve \</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">--</span><span class="devsite-syntax-n">signature_def</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">serving_default</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">--</span><span class="devsite-syntax-n">input_exprs</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nb">input</span><span class="devsite-syntax-p">=</span><span class="devsite-syntax-mi">10</span> </code></pre></devsite-code> <h3 id="save_and_export_a_savedmodel_defined_with_keras" data-text="Save and export a SavedModel defined with Keras" tabindex="-1">Save and export a SavedModel defined with Keras</h3> <aside class="deprecated"><strong>Deprecated:</strong><span> For Keras objects, it's recommended to use the new high-level <code translate="no" dir="ltr">.keras</code> format and <a href="https://www.tensorflow.org/api_docs/python/tf/keras/Model#export"><code translate="no" dir="ltr">tf.keras.Model.export</code></a>, as demonstrated in the guide <a href="https://www.tensorflow.org/guide/keras/save_and_serialize">here</a>. The low-level SavedModel format continues to be supported for existing code.</span></aside> <p>The Keras APIs for saving and exporting—<a href="https://www.tensorflow.org/api_docs/python/tf/keras/Model#save"><code translate="no" dir="ltr">Model.save</code></a> or <a href="https://www.tensorflow.org/api_docs/python/tf/keras/models/save_model"><code translate="no" dir="ltr">tf.keras.models.save_model</code></a>—can export a SavedModel from a <a href="https://www.tensorflow.org/api_docs/python/tf/keras/Model"><code translate="no" dir="ltr">tf.keras.Model</code></a>. Check out the <a href="https://www.tensorflow.org/guide/..guide/keras/save_and_serialize">Save and load Keras models</a> for more details.</p> <div></div><devsite-code><pre class="devsite-click-to-copy" translate="no" dir="ltr" is-upgraded syntax="scdoc"><code translate="no" dir="ltr">inp = tf.keras.Input(3) out = add_two(inp) model = tf.keras.Model(inputs=inp, outputs=out) @tf.function(input_signature=[tf.TensorSpec(shape=[], dtype=tf.float32)]) def serving_default(input): return {'output': model(input)} model.save('keras-model', save_format='tf', signatures={ tf.saved_model.DEFAULT_SERVING_SIGNATURE_DEF_KEY: serving_default}) </code></pre></devsite-code><div></div><devsite-code><pre class="devsite-click-to-copy" translate="no" dir="ltr" is-upgraded syntax="Matlab"><code translate="no" dir="ltr"><span class="devsite-syntax-sx">!saved_model_cli run --dir keras-model --tag_set serve \</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">--</span><span class="devsite-syntax-n">signature_def</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">serving_default</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">--</span><span class="devsite-syntax-n">input_exprs</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nb">input</span><span class="devsite-syntax-p">=</span><span class="devsite-syntax-mi">10</span> </code></pre></devsite-code> <h2 id="loading_a_savedmodel" data-text="Loading a SavedModel" tabindex="-1">Loading a SavedModel</h2> <p>A SavedModel saved with any of the above APIs can be loaded using either TensorFlow 1 or TensorFlow 2 APIs.</p> <p>A TensorFlow 1 SavedModel can generally be used for inference when loaded into TensorFlow 2, but training (generating gradients) is only possible if the SavedModel contains <em>resource variables</em>. You can check the dtype of the variables—if the variable dtype contains "_ref", then it is a reference variable.</p> <p>A TensorFlow 2 SavedModel can be loaded and executed from TensorFlow 1 as long as the SavedModel is saved with signatures.</p> <p>The sections below contain code samples showing how to load the SavedModels saved in the previous sections, and call the exported signature.</p> <h3 id="tensorflow_1_load_a_savedmodel_with_tfsaved_modelload" data-text="TensorFlow 1: Load a SavedModel with tf.saved_model.load" tabindex="-1">TensorFlow 1: Load a SavedModel with tf.saved_model.load</h3> <p>In TensorFlow 1, you can import a SavedModel directly into the current graph and session using <a href="https://www.tensorflow.org/api_docs/python/tf/saved_model/load"><code translate="no" dir="ltr">tf.saved_model.load</code></a>. You can call <code translate="no" dir="ltr">Session.run</code> on the tensor input and output names:</p> <div></div><devsite-code><pre class="devsite-click-to-copy" translate="no" dir="ltr" is-upgraded syntax="GDScript"><code translate="no" dir="ltr"><span class="devsite-syntax-n">def</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">load_tf1</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-n">path</span><span class="devsite-syntax-p">,</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">input</span><span class="devsite-syntax-p">):</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-nb">print</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s1">'Loading from'</span><span class="devsite-syntax-p">,</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">path</span><span class="devsite-syntax-p">)</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">with</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">tf</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">Graph</span><span class="devsite-syntax-p">()</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">as_default</span><span class="devsite-syntax-p">()</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-k">as</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">g</span><span class="devsite-syntax-p">:</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">with</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">tf1</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">Session</span><span class="devsite-syntax-p">()</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-k">as</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">sess</span><span class="devsite-syntax-p">:</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">meta_graph</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">tf1</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">saved_model</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">load</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-n">sess</span><span class="devsite-syntax-p">,</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">[</span><span class="devsite-syntax-s2">"serve"</span><span class="devsite-syntax-p">],</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">path</span><span class="devsite-syntax-p">)</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">sig_def</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">meta_graph</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">signature_def</span><span class="devsite-syntax-p">[</span><span class="devsite-syntax-n">tf</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">saved_model</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">DEFAULT_SERVING_SIGNATURE_DEF_KEY</span><span class="devsite-syntax-p">]</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">input_name</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">sig_def</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">inputs</span><span class="devsite-syntax-p">[</span><span class="devsite-syntax-s1">'input'</span><span class="devsite-syntax-p">]</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">name</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">output_name</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">sig_def</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">outputs</span><span class="devsite-syntax-p">[</span><span class="devsite-syntax-s1">'output'</span><span class="devsite-syntax-p">]</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">name</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-nb">print</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s1">' Output with input'</span><span class="devsite-syntax-p">,</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">input</span><span class="devsite-syntax-p">,</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-s1">': '</span><span class="devsite-syntax-p">,</span><span class="devsite-syntax-w"> </span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">sess</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">run</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-n">output_name</span><span class="devsite-syntax-p">,</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">feed_dict</span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-p">{</span><span class="devsite-syntax-n">input_name</span><span class="devsite-syntax-p">:</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">input</span><span class="devsite-syntax-p">}))</span> <span class="devsite-syntax-n">load_tf1</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s1">'saved-model-builder'</span><span class="devsite-syntax-p">,</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-mf">5.</span><span class="devsite-syntax-p">)</span> <span class="devsite-syntax-n">load_tf1</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s1">'simple-save'</span><span class="devsite-syntax-p">,</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-mf">5.</span><span class="devsite-syntax-p">)</span> <span class="devsite-syntax-n">load_tf1</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s1">'estimator-model'</span><span class="devsite-syntax-p">,</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">[</span><span class="devsite-syntax-mf">5.</span><span class="devsite-syntax-p">])</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-c1"># Estimator's input must be batched.</span> <span class="devsite-syntax-n">load_tf1</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s1">'tf2-save'</span><span class="devsite-syntax-p">,</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-mf">5.</span><span class="devsite-syntax-p">)</span> <span class="devsite-syntax-n">load_tf1</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s1">'keras-model'</span><span class="devsite-syntax-p">,</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-mf">5.</span><span class="devsite-syntax-p">)</span> </code></pre></devsite-code> <h3 id="tensorflow_2_load_a_model_saved_with_tfsaved_model" data-text="TensorFlow 2: Load a model saved with tf.saved_model" tabindex="-1">TensorFlow 2: Load a model saved with tf.saved_model</h3> <p>In TensorFlow 2, objects are loaded into a Python object that stores the variables and functions. This is compatible with models saved from TensorFlow 1.</p> <p>Check out the <a href="https://www.tensorflow.org/api_docs/python/tf/saved_model/load"><code translate="no" dir="ltr">tf.saved_model.load</code></a> API docs and <a href="https://www.tensorflow.org/guide/saved_model#loading_and_using_a_custom_model">Loading and using a custom model</a> section from the <a href="https://www.tensorflow.org/guide/..guide/saved_model">Using the SavedModel format</a> guide for details.</p> <div></div><devsite-code><pre class="devsite-click-to-copy" translate="no" dir="ltr" is-upgraded syntax="GDScript"><code translate="no" dir="ltr"><span class="devsite-syntax-n">def</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">load_tf2</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-n">path</span><span class="devsite-syntax-p">,</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">input</span><span class="devsite-syntax-p">):</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-nb">print</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s1">'Loading from'</span><span class="devsite-syntax-p">,</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">path</span><span class="devsite-syntax-p">)</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">loaded</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">tf</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">saved_model</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">load</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-n">path</span><span class="devsite-syntax-p">)</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">out</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">loaded</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">signatures</span><span class="devsite-syntax-p">[</span><span class="devsite-syntax-n">tf</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">saved_model</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">DEFAULT_SERVING_SIGNATURE_DEF_KEY</span><span class="devsite-syntax-p">](</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">tf</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">constant</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-n">input</span><span class="devsite-syntax-p">))[</span><span class="devsite-syntax-s1">'output'</span><span class="devsite-syntax-p">]</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-nb">print</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s1">' Output with input'</span><span class="devsite-syntax-p">,</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">input</span><span class="devsite-syntax-p">,</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-s1">': '</span><span class="devsite-syntax-p">,</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">out</span><span class="devsite-syntax-p">)</span> <span class="devsite-syntax-n">load_tf2</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s1">'saved-model-builder'</span><span class="devsite-syntax-p">,</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-mf">5.</span><span class="devsite-syntax-p">)</span> <span class="devsite-syntax-n">load_tf2</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s1">'simple-save'</span><span class="devsite-syntax-p">,</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-mf">5.</span><span class="devsite-syntax-p">)</span> <span class="devsite-syntax-n">load_tf2</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s1">'estimator-model'</span><span class="devsite-syntax-p">,</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">[</span><span class="devsite-syntax-mf">5.</span><span class="devsite-syntax-p">])</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-c1"># Estimator's input must be batched.</span> <span class="devsite-syntax-n">load_tf2</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s1">'tf2-save'</span><span class="devsite-syntax-p">,</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-mf">5.</span><span class="devsite-syntax-p">)</span> <span class="devsite-syntax-n">load_tf2</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s1">'keras-model'</span><span class="devsite-syntax-p">,</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-mf">5.</span><span class="devsite-syntax-p">)</span> </code></pre></devsite-code> <p>Models saved with the TensorFlow 2 API can also access <a href="https://www.tensorflow.org/api_docs/python/tf/function"><code translate="no" dir="ltr">tf.function</code></a>s and variables that are attached to the model (instead of those exported as signatures). For example:</p> <div></div><devsite-code><pre class="devsite-click-to-copy" translate="no" dir="ltr" is-upgraded syntax="GDScript"><code translate="no" dir="ltr"><span class="devsite-syntax-n">loaded</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">tf</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">saved_model</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">load</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s1">'tf2-save'</span><span class="devsite-syntax-p">)</span> <span class="devsite-syntax-nb">print</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s1">'restored __call__:'</span><span class="devsite-syntax-p">,</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">loaded</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">__call__</span><span class="devsite-syntax-p">)</span> <span class="devsite-syntax-nb">print</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s1">'output with input 5.'</span><span class="devsite-syntax-p">,</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">loaded</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-mi">5</span><span class="devsite-syntax-p">))</span> </code></pre></devsite-code> <h3 id="tensorflow_2_load_a_model_saved_with_keras" data-text="TensorFlow 2: Load a model saved with Keras" tabindex="-1">TensorFlow 2: Load a model saved with Keras</h3> <aside class="deprecated"><strong>Deprecated:</strong><span> For Keras objects, it's recommended to use the new high-level <code translate="no" dir="ltr">.keras</code> format and <a href="https://www.tensorflow.org/api_docs/python/tf/keras/Model#export"><code translate="no" dir="ltr">tf.keras.Model.export</code></a>, as demonstrated in the guide <a href="https://www.tensorflow.org/guide/keras/save_and_serialize">here</a>. The low-level SavedModel format continues to be supported for existing code.</span></aside> <p>The Keras loading API—<a href="https://www.tensorflow.org/api_docs/python/tf/keras/models/load_model"><code translate="no" dir="ltr">tf.keras.models.load_model</code></a>—allows you to reload a saved model back into a Keras Model object. Note that this only allows you to load SavedModels saved with Keras (<a href="https://www.tensorflow.org/api_docs/python/tf/keras/Model#save"><code translate="no" dir="ltr">Model.save</code></a> or <a href="https://www.tensorflow.org/api_docs/python/tf/keras/models/save_model"><code translate="no" dir="ltr">tf.keras.models.save_model</code></a>).</p> <p>Models saved with <a href="https://www.tensorflow.org/api_docs/python/tf/saved_model/save"><code translate="no" dir="ltr">tf.saved_model.save</code></a> should be loaded with <a href="https://www.tensorflow.org/api_docs/python/tf/saved_model/load"><code translate="no" dir="ltr">tf.saved_model.load</code></a>. You can load a Keras model saved with <a href="https://www.tensorflow.org/api_docs/python/tf/keras/Model#save"><code translate="no" dir="ltr">Model.save</code></a> using <a href="https://www.tensorflow.org/api_docs/python/tf/saved_model/load"><code translate="no" dir="ltr">tf.saved_model.load</code></a> but you will only get the TensorFlow graph. Refer to the <a href="https://www.tensorflow.org/api_docs/python/tf/keras/models/load_model"><code translate="no" dir="ltr">tf.keras.models.load_model</code></a> API docs and <a href="https://www.tensorflow.org/guide/keras/save_and_serialize#savedmodel_format">Save and load Keras models</a> guide for details.</p> <div></div><devsite-code><pre class="devsite-click-to-copy" translate="no" dir="ltr" is-upgraded syntax="GDScript"><code translate="no" dir="ltr"><span class="devsite-syntax-n">loaded_model</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">tf</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">keras</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">models</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">load_model</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s1">'keras-model'</span><span class="devsite-syntax-p">)</span> <span class="devsite-syntax-n">loaded_model</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">predict_on_batch</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-n">tf</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">constant</span><span class="devsite-syntax-p">([</span><span class="devsite-syntax-mi">1</span><span class="devsite-syntax-p">,</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-mi">3</span><span class="devsite-syntax-p">,</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-mi">4</span><span class="devsite-syntax-p">]))</span> </code></pre></devsite-code> <h2 id="graphdef_and_metagraphdef" data-text="GraphDef and MetaGraphDef" tabindex="-1">GraphDef and MetaGraphDef</h2> <p><a name=\"graphdef_and_metagraphdef\"> </a></p> <p>There is no straightforward way to load a raw <code translate="no" dir="ltr">GraphDef</code> or <code translate="no" dir="ltr">MetaGraphDef</code> to TF2. However, you can convert the TF1 code that imports the graph into a TF2 <a href="https://tensorflow.org/guide/concrete_function"><code translate="no" dir="ltr">concrete_function</code></a> using <a href="https://www.tensorflow.org/api_docs/python/tf/compat/v1/wrap_function"><code translate="no" dir="ltr">v1.wrap_function</code></a>.</p> <p>First, save a MetaGraphDef:</p> <div></div><devsite-code><pre class="devsite-click-to-copy" translate="no" dir="ltr" is-upgraded syntax="GDScript"><code translate="no" dir="ltr"><span class="devsite-syntax-c1"># Save a simple multiplication computation:</span> <span class="devsite-syntax-n">with</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">tf</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">Graph</span><span class="devsite-syntax-p">()</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">as_default</span><span class="devsite-syntax-p">()</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-k">as</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">g</span><span class="devsite-syntax-p">:</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">x</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">tf1</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">placeholder</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-n">tf</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">float32</span><span class="devsite-syntax-p">,</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">shape</span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-p">[],</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">name</span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-s1">'x'</span><span class="devsite-syntax-p">)</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">v</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">tf</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">Variable</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-mf">3.0</span><span class="devsite-syntax-p">,</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">name</span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-s1">'v'</span><span class="devsite-syntax-p">)</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">y</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">tf</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">multiply</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-n">x</span><span class="devsite-syntax-p">,</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">v</span><span class="devsite-syntax-p">,</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">name</span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-s1">'y'</span><span class="devsite-syntax-p">)</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">with</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">tf1</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">Session</span><span class="devsite-syntax-p">()</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-k">as</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">sess</span><span class="devsite-syntax-p">:</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">sess</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">run</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-n">v</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">initializer</span><span class="devsite-syntax-p">)</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-nb">print</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-n">sess</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">run</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-n">y</span><span class="devsite-syntax-p">,</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">feed_dict</span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-p">{</span><span class="devsite-syntax-n">x</span><span class="devsite-syntax-p">:</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-mi">5</span><span class="devsite-syntax-p">}))</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">s</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">tf1</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">train</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">Saver</span><span class="devsite-syntax-p">()</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">s</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">export_meta_graph</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s1">'multiply.pb'</span><span class="devsite-syntax-p">,</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">as_text</span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-n">True</span><span class="devsite-syntax-p">)</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">s</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">save</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-n">sess</span><span class="devsite-syntax-p">,</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-s1">'multiply_values.ckpt'</span><span class="devsite-syntax-p">)</span> </code></pre></devsite-code> <p>Using TF1 APIs, you can use <code translate="no" dir="ltr">tf1.train.import_meta_graph</code> to import the graph and restore the values:</p> <div></div><devsite-code><pre class="devsite-click-to-copy" translate="no" dir="ltr" is-upgraded syntax="scdoc"><code translate="no" dir="ltr">with tf.Graph().as_default() as g: meta = tf1.train.import_meta_graph('multiply.pb') x = g.get_tensor_by_name('x:0') y = g.get_tensor_by_name('y:0') with tf1.Session() as sess: meta.restore(sess, 'multiply_values.ckpt') print(sess.run(y, feed_dict={x: 5})) </code></pre></devsite-code> <p>There are no TF2 APIs for loading the graph, but you can still import it into a concrete function that can be executed in eager mode:</p> <div></div><devsite-code><pre class="devsite-click-to-copy" translate="no" dir="ltr" is-upgraded syntax="Python"><code translate="no" dir="ltr"><span class="devsite-syntax-k">def</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nf">import_multiply</span><span class="devsite-syntax-p">():</span> <span class="devsite-syntax-c1"># Any graph-building code is allowed here.</span> <span class="devsite-syntax-n">tf1</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">train</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">import_meta_graph</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s1">'multiply.pb'</span><span class="devsite-syntax-p">)</span> <span class="devsite-syntax-c1"># Creates a tf.function with all the imported elements in the function graph.</span> <span class="devsite-syntax-n">wrapped_import</span> <span class="devsite-syntax-o">=</span> <span class="devsite-syntax-n">tf1</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">wrap_function</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-n">import_multiply</span><span class="devsite-syntax-p">,</span> <span class="devsite-syntax-p">[])</span> <span class="devsite-syntax-n">import_graph</span> <span class="devsite-syntax-o">=</span> <span class="devsite-syntax-n">wrapped_import</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">graph</span> <span class="devsite-syntax-n">x</span> <span class="devsite-syntax-o">=</span> <span class="devsite-syntax-n">import_graph</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">get_tensor_by_name</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s1">'x:0'</span><span class="devsite-syntax-p">)</span> <span class="devsite-syntax-n">y</span> <span class="devsite-syntax-o">=</span> <span class="devsite-syntax-n">import_graph</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">get_tensor_by_name</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s1">'y:0'</span><span class="devsite-syntax-p">)</span> <span class="devsite-syntax-c1"># Restore the variable values.</span> <span class="devsite-syntax-n">tf1</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">train</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">Saver</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-n">wrapped_import</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">variables</span><span class="devsite-syntax-p">)</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">restore</span><span class="devsite-syntax-p">(</span> <span class="devsite-syntax-n">sess</span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-kc">None</span><span class="devsite-syntax-p">,</span> <span class="devsite-syntax-n">save_path</span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-s1">'multiply_values.ckpt'</span><span class="devsite-syntax-p">)</span> <span class="devsite-syntax-c1"># Create a concrete function by pruning the wrap_function (similar to sess.run).</span> <span class="devsite-syntax-n">multiply_fn</span> <span class="devsite-syntax-o">=</span> <span class="devsite-syntax-n">wrapped_import</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">prune</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-n">feeds</span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-n">x</span><span class="devsite-syntax-p">,</span> <span class="devsite-syntax-n">fetches</span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-n">y</span><span class="devsite-syntax-p">)</span> <span class="devsite-syntax-c1"># Run this function</span> <span class="devsite-syntax-n">multiply_fn</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-n">tf</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">constant</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-mf">5.</span><span class="devsite-syntax-p">))</span> <span class="devsite-syntax-c1"># inputs to concrete functions must be Tensors.</span> </code></pre></devsite-code> <h2 id="changes_from_tensorflow_1_to_tensorflow_2" data-text="Changes from TensorFlow 1 to TensorFlow 2" tabindex="-1">Changes from TensorFlow 1 to TensorFlow 2</h2> <p><a id=\"changes_from_tf1_to_tf2\"> </a></p> <p>This section lists out key saving and loading terms from TensorFlow 1, their TensorFlow 2 equivalents, and what has changed.</p> <h3 id="savedmodel" data-text="SavedModel" tabindex="-1">SavedModel</h3> <p><a href="https://www.tensorflow.org/guide/saved_model">SavedModel</a> is a format that stores a complete TensorFlow program with parameters and computation. It contains signatures used by serving platforms to run the model.</p> <p>The file format itself has not changed significantly, so SavedModels can be loaded and served using either TensorFlow 1 or TensorFlow 2 APIs.</p> <p><strong>Differences between TensorFlow 1 and TensorFlow 2</strong></p> <p>The <em>serving</em> and <em>inference</em> use cases have not been updated in TensorFlow 2, aside from the API changes—the improvement was introduced in the ability to <em>reuse</em> and <em>compose models</em> loaded from SavedModel.</p> <p>In TensorFlow 2, the program is represented by objects like <a href="https://www.tensorflow.org/api_docs/python/tf/Variable"><code translate="no" dir="ltr">tf.Variable</code></a>, <a href="https://www.tensorflow.org/api_docs/python/tf/Module"><code translate="no" dir="ltr">tf.Module</code></a>, or higher-level Keras models (<a href="https://www.tensorflow.org/api_docs/python/tf/keras/Model"><code translate="no" dir="ltr">tf.keras.Model</code></a>) and layers (<a href="https://www.tensorflow.org/api_docs/python/tf/keras/layers"><code translate="no" dir="ltr">tf.keras.layers</code></a>). There are no more global variables that have values stored in a session, and the graph now exists in different <a href="https://www.tensorflow.org/api_docs/python/tf/function"><code translate="no" dir="ltr">tf.function</code></a>s. Consequently, during a model export, SavedModel saves each component and function graphs separately.</p> <p>When you write a TensorFlow program with the TensorFlow Python APIs, you must build an object to manage the variables, functions, and other resources. Generally, this is accomplished by using the Keras APIs, but you can also build the object by creating or subclassing <a href="https://www.tensorflow.org/api_docs/python/tf/Module"><code translate="no" dir="ltr">tf.Module</code></a>.</p> <p>Keras models (<a href="https://www.tensorflow.org/api_docs/python/tf/keras/Model"><code translate="no" dir="ltr">tf.keras.Model</code></a>) and <a href="https://www.tensorflow.org/api_docs/python/tf/Module"><code translate="no" dir="ltr">tf.Module</code></a> automatically track variables and functions attached to them. SavedModel saves these connections between modules, variables, and functions, so that they can be restored when loading.</p> <h3 id="signatures" data-text="Signatures" tabindex="-1">Signatures</h3> <p>Signatures are the endpoints of a SavedModel—they tell the user how to run the model and what inputs are needed.</p> <p>In TensorFlow 1, signatures are created by listing the input and output tensors. In TensorFlow 2, signatures are generated by passing in <em>concrete functions</em>. (Read more about TensorFlow functions in the <a href="https://www.tensorflow.org/guide/intro_to_graphs">Introduction to graphs and tf.function</a> guide, particularly the <em>Polymorphism: one Function, many graphs</em> section.) In short, a concrete function is generated from a <a href="https://www.tensorflow.org/api_docs/python/tf/function"><code translate="no" dir="ltr">tf.function</code></a>:</p> <div></div><devsite-code><pre class="devsite-click-to-copy" translate="no" dir="ltr" is-upgraded syntax="Python"><code translate="no" dir="ltr"><span class="devsite-syntax-c1"># Option 1: Specify an input signature.</span> <span class="devsite-syntax-nd">@tf</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">function</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-n">input_signature</span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-p">[</span><span class="devsite-syntax-o">...</span><span class="devsite-syntax-p">])</span> <span class="devsite-syntax-k">def</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nf">fn</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-o">...</span><span class="devsite-syntax-p">):</span> <span class="devsite-syntax-o">...</span> <span class="devsite-syntax-k">return</span> <span class="devsite-syntax-n">outputs</span> <span class="devsite-syntax-n">tf</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">saved_model</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">save</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-n">model</span><span class="devsite-syntax-p">,</span> <span class="devsite-syntax-n">path</span><span class="devsite-syntax-p">,</span> <span class="devsite-syntax-n">signatures</span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-p">{</span> <span class="devsite-syntax-s1">'name'</span><span class="devsite-syntax-p">:</span> <span class="devsite-syntax-n">fn</span> <span class="devsite-syntax-p">})</span> </code></pre></devsite-code><div></div><devsite-code><pre class="devsite-click-to-copy" translate="no" dir="ltr" is-upgraded syntax="Python"><code translate="no" dir="ltr"><span class="devsite-syntax-c1"># Option 2: Call `get_concrete_function`</span> <span class="devsite-syntax-nd">@tf</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">function</span> <span class="devsite-syntax-k">def</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nf">fn</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-o">...</span><span class="devsite-syntax-p">):</span> <span class="devsite-syntax-o">...</span> <span class="devsite-syntax-k">return</span> <span class="devsite-syntax-n">outputs</span> <span class="devsite-syntax-n">tf</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">saved_model</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">save</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-n">model</span><span class="devsite-syntax-p">,</span> <span class="devsite-syntax-n">path</span><span class="devsite-syntax-p">,</span> <span class="devsite-syntax-n">signatures</span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-p">{</span> <span class="devsite-syntax-s1">'name'</span><span class="devsite-syntax-p">:</span> <span class="devsite-syntax-n">fn</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">get_concrete_function</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-o">...</span><span class="devsite-syntax-p">)</span> <span class="devsite-syntax-p">})</span> </code></pre></devsite-code> <h3 id="sessionrun" data-text="Session.run" tabindex="-1"><code translate="no" dir="ltr">Session.run</code></h3> <p>In TensorFlow 1, you could call <code translate="no" dir="ltr">Session.run</code> with the imported graph as long as you already know the tensor names. This allows you to retrieve the restored variable values, or run parts of the model that were not exported in the signatures.</p> <p>In TensorFlow 2, you can directly access a variable, such as a weights matrix (<code translate="no" dir="ltr">kernel</code>):</p> <div></div><devsite-code><pre class="devsite-click-to-copy" translate="no" dir="ltr" is-upgraded syntax="Python"><code translate="no" dir="ltr"><span class="devsite-syntax-n">model</span> <span class="devsite-syntax-o">=</span> <span class="devsite-syntax-n">tf</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">Module</span><span class="devsite-syntax-p">()</span> <span class="devsite-syntax-n">model</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">dense_layer</span> <span class="devsite-syntax-o">=</span> <span class="devsite-syntax-n">tf</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">keras</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">layers</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">Dense</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-o">...</span><span class="devsite-syntax-p">)</span> <span class="devsite-syntax-n">tf</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">saved_model</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">save</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s1">'my_saved_model'</span><span class="devsite-syntax-p">)</span> <span class="devsite-syntax-n">loaded</span> <span class="devsite-syntax-o">=</span> <span class="devsite-syntax-n">tf</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">saved_model</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">load</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s1">'my_saved_model'</span><span class="devsite-syntax-p">)</span> <span class="devsite-syntax-n">loaded</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">dense_layer</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">kernel</span> </code></pre></devsite-code> <p>or call <a href="https://www.tensorflow.org/api_docs/python/tf/function"><code translate="no" dir="ltr">tf.function</code></a>s attached to the model object: for example, <code translate="no" dir="ltr">loaded.__call__</code>.</p> <p>Unlike TF1, there is no way to extract parts of a function and access intermediate values. You <em>must</em> export all of the needed functionality in the saved object.</p> <h2 id="tensorflow_serving_migration_notes" data-text="TensorFlow Serving migration notes" tabindex="-1">TensorFlow Serving migration notes</h2> <p>SavedModel was originally created to work with <a href="https://www.tensorflow.org/tfx/guide/serving">TensorFlow Serving</a>. This platform offers different types of prediction requests: classify, regress, and predict.</p> <p>The <strong>TensorFlow 1</strong> API allows you to create these types of signatures with the utils:</p> <ul> <li><a href="https://www.tensorflow.org/api_docs/python/tf/compat/v1/saved_model/classification_signature_def"><code translate="no" dir="ltr">tf.compat.v1.saved_model.classification_signature_def</code></a></li> <li><a href="https://www.tensorflow.org/api_docs/python/tf/compat/v1/saved_model/regression_signature_def"><code translate="no" dir="ltr">tf.compat.v1.saved_model.regression_signature_def</code></a></li> <li><a href="https://www.tensorflow.org/api_docs/python/tf/compat/v1/saved_model/predict_signature_def"><code translate="no" dir="ltr">tf.compat.v1.saved_model.predict_signature_def</code></a></li> </ul> <p><a href="https://www.tensorflow.org/tfx/serving/signature_defs#classification_signaturedef">Classification</a> (<code translate="no" dir="ltr">classification_signature_def</code>) and <a href="https://www.tensorflow.org/tfx/serving/signature_defs#regression_signaturedef">regression</a> (<code translate="no" dir="ltr">regression_signature_def</code>) restrict the inputs and outputs, so the inputs must be a <code translate="no" dir="ltr">tf.Example</code>, and the outputs must be <code translate="no" dir="ltr">classes</code>, <code translate="no" dir="ltr">scores</code> or <code translate="no" dir="ltr">prediction</code>. Meanwhile, <a href="https://www.tensorflow.org/tfx/serving/signature_defs#predict_signaturedef">the predict signature</a> (<code translate="no" dir="ltr">predict_signature_def</code>) has no restrictions.</p> <p>SavedModels exported with the <strong>TensorFlow 2</strong> API are compatible with TensorFlow Serving, but will only contain prediction signatures. The classification and regression signatures have been removed.</p> <p>If you require the use of the classification and regression signatures, you may modify the exported SavedModel using <a href="https://www.tensorflow.org/api_docs/python/tf/compat/v1/saved_model/signature_def_utils/MethodNameUpdater"><code translate="no" dir="ltr">tf.compat.v1.saved_model.signature_def_utils.MethodNameUpdater</code></a>.</p> <h2 id="next_steps" data-text="Next steps" tabindex="-1">Next steps</h2> <p>To learn more about SavedModels in TensorFlow 2, check out the following guides:</p> <ul> <li><a href="https://www.tensorflow.org/guide/saved_model">Using the SavedModel format</a></li> <li><a href="https://www.tensorflow.org/guide/keras/save_and_serialize">Save and load Keras models</a></li> </ul> <p>If you are using TensorFlow Hub, you may find these guides useful:</p> <ul> <li><a href="https://www.tensorflow.org/hub/model_compatibility">TensorFlow Hub: Model compatibility for TensorFlow 1/TensorFlow 2</a></li> <li><a href="https://www.tensorflow.org/hub/migration_tf2">Migrating from TensorFlow 1 to TensorFlow 2 with TensorFlow Hub</a></li> </ul> </div> <devsite-thumb-rating position="footer"> </devsite-thumb-rating> <div class="devsite-floating-action-buttons"> </div> </article> <devsite-content-footer class="nocontent"> <p>Except as otherwise noted, the content of this page is licensed under the <a href="https://creativecommons.org/licenses/by/4.0/">Creative Commons Attribution 4.0 License</a>, and code samples are licensed under the <a href="https://www.apache.org/licenses/LICENSE-2.0">Apache 2.0 License</a>. For details, see the <a href="https://developers.google.com/site-policies">Google Developers Site Policies</a>. Java is a registered trademark of Oracle and/or its affiliates.</p> <p>Last updated 2024-03-23 UTC.</p> </devsite-content-footer> <devsite-notification > </devsite-notification> <div class="devsite-content-data"> <template class="devsite-content-data-template"> [[["Easy to understand","easyToUnderstand","thumb-up"],["Solved my problem","solvedMyProblem","thumb-up"],["Other","otherUp","thumb-up"]],[["Missing the information I need","missingTheInformationINeed","thumb-down"],["Too complicated / too many steps","tooComplicatedTooManySteps","thumb-down"],["Out of date","outOfDate","thumb-down"],["Samples / code issue","samplesCodeIssue","thumb-down"],["Other","otherDown","thumb-down"]],["Last updated 2024-03-23 UTC."],[],[]] </template> </div> </devsite-content> </main> <devsite-footer-promos class="devsite-footer"> </devsite-footer-promos> <devsite-footer-linkboxes class="devsite-footer"> <nav class="devsite-footer-linkboxes nocontent" aria-label="Footer links"> <ul class="devsite-footer-linkboxes-list"> <li class="devsite-footer-linkbox "> <h3 class="devsite-footer-linkbox-heading no-link">Stay connected</h3> <ul class="devsite-footer-linkbox-list"> <li class="devsite-footer-linkbox-item"> <a href="//blog.tensorflow.org" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 1)" > Blog </a> </li> <li class="devsite-footer-linkbox-item"> <a href="//discuss.tensorflow.org" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 2)" > Forum </a> </li> <li class="devsite-footer-linkbox-item"> <a href="//github.com/tensorflow/" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 3)" > GitHub </a> </li> <li class="devsite-footer-linkbox-item"> <a href="//twitter.com/tensorflow" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 4)" > Twitter </a> </li> <li class="devsite-footer-linkbox-item"> <a href="//youtube.com/tensorflow" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 5)" > YouTube </a> </li> </ul> </li> <li class="devsite-footer-linkbox "> <h3 class="devsite-footer-linkbox-heading no-link">Support</h3> <ul class="devsite-footer-linkbox-list"> <li class="devsite-footer-linkbox-item"> <a href="//github.com/tensorflow/tensorflow/issues" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 1)" > Issue tracker </a> </li> <li class="devsite-footer-linkbox-item"> <a href="//github.com/tensorflow/tensorflow/blob/master/RELEASE.md" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 2)" > Release notes </a> </li> <li class="devsite-footer-linkbox-item"> <a href="//stackoverflow.com/questions/tagged/tensorflow" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 3)" > Stack Overflow </a> </li> <li class="devsite-footer-linkbox-item"> <a href="/extras/tensorflow_brand_guidelines.pdf" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 4)" > Brand guidelines </a> </li> <li class="devsite-footer-linkbox-item"> <a href="/about/bib" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 5)" > Cite TensorFlow </a> </li> </ul> </li> </ul> </nav> </devsite-footer-linkboxes> <devsite-footer-utility class="devsite-footer"> <div class="devsite-footer-utility nocontent"> <nav class="devsite-footer-utility-links" aria-label="Utility links"> <ul class="devsite-footer-utility-list"> <li class="devsite-footer-utility-item "> <a class="devsite-footer-utility-link gc-analytics-event" href="//policies.google.com/terms" data-category="Site-Wide Custom Events" data-label="Footer Terms link" > Terms </a> </li> <li class="devsite-footer-utility-item "> <a class="devsite-footer-utility-link gc-analytics-event" href="//policies.google.com/privacy" data-category="Site-Wide Custom Events" data-label="Footer Privacy link" > Privacy </a> </li> <li class="devsite-footer-utility-item glue-cookie-notification-bar-control"> <a class="devsite-footer-utility-link gc-analytics-event" href="#" data-category="Site-Wide Custom Events" data-label="Footer Manage cookies link" aria-hidden="true" > Manage cookies </a> </li> <li class="devsite-footer-utility-item devsite-footer-utility-button"> <span class="devsite-footer-utility-description">Sign up for the TensorFlow newsletter</span> <a class="devsite-footer-utility-link gc-analytics-event" href="//www.tensorflow.org/subscribe" data-category="Site-Wide Custom Events" data-label="Footer Subscribe link" > Subscribe </a> </li> </ul> <devsite-language-selector> <ul role="presentation"> <li role="presentation"> <a role="menuitem" lang="en" >English</a> </li> <li role="presentation"> <a role="menuitem" lang="es_419" >Español – América Latina</a> </li> <li role="presentation"> <a role="menuitem" lang="fr" >Français</a> </li> <li role="presentation"> <a role="menuitem" lang="id" >Indonesia</a> </li> <li role="presentation"> <a role="menuitem" lang="it" >Italiano</a> </li> <li role="presentation"> <a role="menuitem" lang="pl" >Polski</a> </li> <li role="presentation"> <a role="menuitem" lang="pt_br" >Português – Brasil</a> </li> <li role="presentation"> <a role="menuitem" lang="vi" >Tiếng Việt</a> </li> <li role="presentation"> <a role="menuitem" lang="tr" >Türkçe</a> </li> <li role="presentation"> <a role="menuitem" lang="ru" >Русский</a> </li> <li role="presentation"> <a role="menuitem" lang="ar" >العربيّة</a> </li> <li role="presentation"> <a role="menuitem" lang="fa" >فارسی</a> </li> <li role="presentation"> <a role="menuitem" lang="hi" >हिंदी</a> </li> <li role="presentation"> <a role="menuitem" lang="bn" >বাংলা</a> </li> <li role="presentation"> <a role="menuitem" lang="th" >ภาษาไทย</a> </li> <li role="presentation"> <a role="menuitem" lang="zh_cn" >中文 – 简体</a> </li> <li role="presentation"> <a role="menuitem" lang="ja" >日本語</a> </li> <li role="presentation"> <a role="menuitem" lang="ko" >한국어</a> </li> </ul> </devsite-language-selector> </nav> </div> </devsite-footer-utility> <devsite-panel></devsite-panel> </section></section> <devsite-sitemask></devsite-sitemask> <devsite-snackbar></devsite-snackbar> <devsite-tooltip ></devsite-tooltip> <devsite-heading-link></devsite-heading-link> <devsite-analytics> <script type="application/json" analytics>[{"dimensions": {"dimension5": "en", "dimension12": false, "dimension3": false, "dimension4": "TensorFlow Core", "dimension1": "Signed out", "dimension6": "en"}, "gaid": "UA-69864048-1", "metrics": {"ratings_count": "metric2", "ratings_value": "metric1"}, "purpose": 0}]</script> <script type="application/json" tag-management>{"at": "True", "ga4": [], "ga4p": [], "gtm": [{"id": "GTM-MXSL34P", "purpose": 0}], "parameters": {"internalUser": "False", "language": {"machineTranslated": "False", "requested": "en", "served": "en"}, "pageType": "article", "projectName": "TensorFlow Core", "signedIn": "False", "tenant": "tensorflow", "recommendations": {"sourcePage": "", "sourceType": 0, "sourceRank": 0, "sourceIdenticalDescriptions": 0, "sourceTitleWords": 0, "sourceDescriptionWords": 0, "experiment": ""}, "experiment": {"ids": ""}}}</script> </devsite-analytics> <devsite-badger></devsite-badger> <script nonce="HUzL2rzVL9VrMIGvIif2rxRtyYlqlY"> (function(d,e,v,s,i,t,E){d['GoogleDevelopersObject']=i; t=e.createElement(v);t.async=1;t.src=s;E=e.getElementsByTagName(v)[0]; E.parentNode.insertBefore(t,E);})(window, document, 'script', 'https://www.gstatic.com/devrel-devsite/prod/vd2dddc2199cd18ccf014281c77515e1e906f6b98324fd2a8b5fa9e92b09e8018/tensorflow/js/app_loader.js', '[15,"en",null,"/js/devsite_app_module.js","https://www.gstatic.com/devrel-devsite/prod/vd2dddc2199cd18ccf014281c77515e1e906f6b98324fd2a8b5fa9e92b09e8018","https://www.gstatic.com/devrel-devsite/prod/vd2dddc2199cd18ccf014281c77515e1e906f6b98324fd2a8b5fa9e92b09e8018/tensorflow","https://tensorflow-dot-devsite-v2-prod-3p.appspot.com",null,null,["/_pwa/tensorflow/manifest.json","https://www.gstatic.com/devrel-devsite/prod/vd2dddc2199cd18ccf014281c77515e1e906f6b98324fd2a8b5fa9e92b09e8018/images/video-placeholder.svg","https://www.gstatic.com/devrel-devsite/prod/vd2dddc2199cd18ccf014281c77515e1e906f6b98324fd2a8b5fa9e92b09e8018/tensorflow/images/favicon.png","https://www.gstatic.com/devrel-devsite/prod/vd2dddc2199cd18ccf014281c77515e1e906f6b98324fd2a8b5fa9e92b09e8018/tensorflow/images/lockup.svg","https://fonts.googleapis.com/css?family=Google+Sans:400,500|Roboto:400,400italic,500,500italic,700,700italic|Roboto+Mono:400,500,700&display=swap"],1,null,[1,6,8,12,14,17,21,25,50,52,63,70,75,76,80,87,91,92,93,97,98,100,101,102,103,104,105,107,108,109,110,112,113,116,117,118,120,122,124,125,126,127,129,130,131,132,133,134,135,136,138,140,141,147,148,149,151,152,156,157,158,159,161,163,164,168,169,170,179,180,182,183,186,191,193,196],"AIzaSyCNm9YxQumEXwGJgTDjxoxXK6m1F-9720Q","AIzaSyCc76DZePGtoyUjqKrLdsMGk_ry7sljLbY","www.tensorflow.org","AIzaSyB9bqgQ2t11WJsOX8qNsCQ6U-w91mmqF-I","AIzaSyAdYnStPdzjcJJtQ0mvIaeaMKj7_t6J_Fg",null,null,null,["MiscFeatureFlags__enable_project_variables","TpcFeatures__enable_unmirrored_page_left_nav","Cloud__enable_cloud_dlp_service","MiscFeatureFlags__enable_view_transitions","Cloud__enable_legacy_calculator_redirect","Profiles__enable_public_developer_profiles","Profiles__enable_page_saving","Cloud__enable_cloud_shell","Profiles__enable_join_program_group_endpoint","Cloud__enable_cloud_facet_chat","Search__enable_dynamic_content_confidential_banner","MiscFeatureFlags__enable_explain_this_code","MiscFeatureFlags__developers_footer_dark_image","DevPro__enable_developer_subscriptions","MiscFeatureFlags__developers_footer_image","MiscFeatureFlags__emergency_css","Profiles__enable_release_notes_notifications","Profiles__enable_profile_collections","Profiles__enable_developer_profiles_callout","CloudShell__cloud_code_overflow_menu","Search__enable_page_map","Profiles__enable_stripe_subscription_management","DevPro__enable_cloud_innovators_plus","Concierge__enable_pushui","Analytics__enable_clearcut_logging","CloudShell__cloud_shell_button","Profiles__enable_dashboard_curated_recommendations","SignIn__enable_refresh_access_tokens","MiscFeatureFlags__enable_firebase_utm","Profiles__require_profile_eligibility_for_signin","Cloud__enable_cloudx_ping","TpcFeatures__enable_mirror_tenant_redirects","Search__enable_suggestions_from_borg","Experiments__reqs_query_experiments","EngEduTelemetry__enable_engedu_telemetry","Profiles__enable_awarding_url","Profiles__enable_complete_playlist_endpoint","Profiles__enable_completequiz_endpoint","Cloud__enable_cloud_shell_fte_user_flow","Profiles__enable_completecodelab_endpoint","Cloud__enable_llm_concierge_chat","Cloud__enable_cloudx_experiment_ids","MiscFeatureFlags__enable_variable_operator","BookNav__enable_tenant_cache_key","Cloud__enable_free_trial_server_call","Profiles__enable_recognition_badges","Search__enable_ai_eligibility_checks"],null,null,"AIzaSyA58TaKli1DculwmAmbpzLVGuWc8eCQgQc","https://developerscontentserving-pa.googleapis.com","AIzaSyDWBU60w0P9hEkr29kkksYs8Z7gvZ8u_wc","https://developerscontentsearch-pa.googleapis.com",2,4,null,"https://developerprofiles-pa.googleapis.com",[15,"tensorflow","TensorFlow","www.tensorflow.org",null,"tensorflow-dot-devsite-v2-prod-3p.appspot.com",null,null,[null,1,null,null,null,null,null,null,null,null,null,[1],null,null,null,null,null,null,[1],[1,null,null,[1]],null,null,null,[1,null,1],[1,1,null,1,1]],null,[25,null,null,null,null,null,"/images/lockup.svg","/images/logo.png",null,null,null,1,1,null,null,null,null,null,null,null,null,1,null,null,null,null,[]],[],null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,[6,1],null,[[],[1,1]],[[["UA-69864048-1"],["UA-69864048-4"],null,null,["UA-69864048-5"],["GTM-MXSL34P"],null,null,[["UA-69864048-1",1]],null,[["UA-69864048-5",1]],[["GTM-MXSL34P",1]],1],[[4,3],[12,8],[5,4],[3,2],[6,5],[1,1]],[[1,1],[2,2]]],null,4],null,null,1]') </script> <devsite-a11y-announce></devsite-a11y-announce> </body> </html>