教程| TF官方博客:基於TensorFlow.js框架的瀏覽器實時姿態估計

2021-01-07 網易

  選自TensorFlow Blog

  機器之心編譯

  參與:王淑婷、路

  

TensorFlow 近日發布 TensorFlow.js 版本 PoseNet,該版本 PoseNet 只要電腦或手機配備了適當的網絡攝像頭,就可以直接在網頁瀏覽器中進行體驗。該模型原始碼已開放,Javascript 開發者只需幾行代碼就可以修補和使用該技術。

  通過與谷歌創意實驗室合作,TensorFlow 近日發布了 TensorFlow.js 版的 PoseNet。這是一款機器學習模型,可以在瀏覽器中實時估計人體姿態。

  模型 Demo:https://storage.googleapis.com/tfjs-models/demos/posenet/camera.html

  

  PoseNet 可以利用單姿態或多姿態算法檢測圖像和視頻中的人物,而所有這些都可以在瀏覽器中實現。

  那麼姿態估計到底是什麼呢?該計算機視覺技術檢測圖像和視頻中人物,以確定諸如某人的肘部在圖像中的位置。要明確的是,這種技術不會識別圖像中的人——沒有與姿態檢測相關聯的個人可識別信息,而只是簡單地估計關鍵身體部位的位置。

  它為什麼如此振奮人心?姿態估計有很多用途,從對身體作出反應的交互式裝置到增強現實、動畫、健身等。TensorFlow 希望該模型的可訪問性能夠鼓勵更多的開發者和製造者在自己獨特的項目中進行姿態檢測實驗和應用。雖然很多其他的姿態檢測系統已經開源,但這些系統都需要專門的硬體和/或攝像頭,以及相當多的系統設置。而基於 TensorFlow.js 框架運行的 PoseNet,只要電腦或手機配備了適當的網絡攝像頭,你就可以直接在網頁瀏覽器中體驗這一技術。TensorFlow 已經開放了該模型的原始碼,因此 Javascript 開發者只需幾行代碼就可以修補和使用該技術。此外,這項技術實際上有助於保護用戶隱私。自從基於 TensorFlow.js 的 PoseNet 在瀏覽器中運行以來,沒有用戶的姿態數據洩露。

  PoseNet 了解一下

  PoseNet 可用於估計單個姿態或多個姿態,這意味著有兩種算法,一種僅能檢測圖像/視頻中的一個人,而另一種可以檢測圖像/視頻中的多個人。為什麼要有兩個版本?單人姿態檢測器更快、更簡單,但要求圖像中只能出現一個目標。我們先討論單姿態,因為它更容易理解。

  簡單而言,姿態估計分兩個階段進行:

  

  將 RGB 圖像作為輸入饋送到卷積神經網絡中。

  

  利用單姿態或多姿態解碼算法解碼來解碼模型輸出中的姿態、姿態置信度得分、關鍵點位置和關鍵點置信度得分。

  

  但這些關鍵詞是什麼意思呢?我們來看幾個最重要的詞:

  

  

  PoseNet 返回檢測到的每個人和每個姿態關鍵點的置信度值。圖像來源:《Microsoft Coco: Common Objects in Context Dataset》(https://cocodataset.org )

  

  

  PoseNet 檢測到的 17 個姿態關鍵點。

  

  第一步:導入 TensorFlow.js 框架和 PoseNet 庫

  TensorFlow 團隊進行了大量工作來降低模型的複雜度,封裝功能使之易於使用。接下來將介紹設置 PoseNet 項目的基礎知識。

  PoseNet 庫可以使用 npm 安裝:

  

  npm install @tensorflow-models/posenet

  

  使用 es6 模塊導入:

  

  import * as posenet from '@tensorflow-models/posenet';

  

  const net = await posenet.load();

  

  或通過頁面中的 bundle 文件導入:

  

  <html>

  

   <body>

  

   <!-- Load TensorFlow.js -->

  

   <script src="https://unpkg.com/@tensorflow/tfjs"></script>

  

   <!-- Load Posenet -->

  

   <script src="https://unpkg.com/@tensorflow-models/posenet">

  

   </script>

  

   <script type="text/javascript">

  

   posenet.load().then(function(net) {

  

   // posenet model loaded

  

   });

  

   </script>

  

   </body>

  

  </html>

  

  第二步(上):單人姿態估計

  

  應用於圖像的單人姿態估計算法示例。圖像來源:《Microsoft Coco: Common Objects in Context Dataset》(https://cocodataset.org)

  如前所述,單姿態估計算法是兩者中較簡單也較快速的。理想的使用場景是當輸入的圖像或視頻中只有一個人時使用這種算法。其缺點在於,如果圖像中有多個人,則來自兩個人的關鍵點可能被估計為同一個姿態的一部分——這意味著,A 的左臂和 B 的右膝可能被該算法歸為同一姿態。因此,如果輸入的圖像可能包含多人,則應當使用多姿態估計算法。

  讓我們看一下單姿態估計算法的輸入:

  

  輸入圖像元素——一種 html 元素,包含要為諸如視頻或圖像標籤預測姿態的圖像。重點是,輸入的圖像或視頻元素應為正方形。

  

  圖像比例因子——介於 0.2~1 的數字,默認值為 0.50。用於在向網絡輸送圖像之前,對圖像進行縮放。將此數字設置得較低,以縮小圖像,提高輸送至網絡的速度,不過這是以準確率為代價的。

  

  水平翻轉——默認值為 false,在姿態需要水平翻轉/鏡像的情況下。而對於默認情況為水平翻轉的視頻(即網絡攝像頭),且你希望姿態以正確方向返回,應將水平翻轉設置為 true。

  

  輸出步幅——必須為 32、16 或 8。默認值為 16。從內部來看,該參數影響神經網絡中層的高度和寬度。在較高層次上,它會影響姿態估計的準確率和速度。輸出步幅的值越低,準確率越高,但速度越慢;輸出步幅值越高,速度越快,但準確率越低。查看輸出步幅對輸出質量影響的最佳方法是使用單姿態估計算法 demo:https://storage.googleapis.com/tfjs-models/demos/posenet/camera.html。

  

  現在,我們看一下單姿態估計算法的輸出:

  

  以下簡短的代碼塊展示了如何使用單姿態估計算法:

  

  const imageScaleFactor = 0.50;

  

  const flipHorizontal = false;

  

  const outputStride = 16;

  

  const imageElement = document.getElementById('cat');

  

  // load the posenet model

  

  const net = await posenet.load();

  

  const pose = await net.estimateSinglePose(imageElement, scaleFactor, flipHorizontal, outputStride);

  

  輸出姿態示例如下所示:

  

  {

  

   "score": 0.32371445304906,

  

   "keypoints": [

  

   { // nose

  

   "position": {

  

   "x": 301.42237830162,

  

   "y": 177.69162777066

  

   },

  

   "score": 0.99799561500549

  

   },

  

   { // left eye

  

   "position": {

  

   "x": 326.05302262306,

  

   "y": 122.9596464932

  

   },

  

   "score": 0.99766051769257

  

   },

  

   { // right eye

  

   "position": {

  

   "x": 258.72196650505,

  

   "y": 127.51624706388

  

   },

  

   "score": 0.99926537275314

  

   },

  

   ...

  

   ]

  

  }

  

  第二步(下):多人姿態估計

  

  應用於圖像的多人姿態估計算法示例。圖像來源:「Microsoft Coco: Common Objects in Context Dataset」(https://cocodataset.org)

  多人姿態估計算法可以估計一個圖像中的多個人/姿態。它比單姿態算法更複雜更慢,但其優點是,如果一張圖像中出現多個人物,則檢測到的關鍵點不太可能關聯至不匹配的姿態。因此,即使是用來檢測一個人的姿態,該算法可能也更理想。

  此外,該算法還有一個不錯的特性——其性能不受輸入圖像中人數的影響。無論有 15 個還是 5 個人要檢測,它的計算時間都一樣。

  我們來看一下輸入:

  

  輸入圖像元素——與單姿態估計相同。

  

  圖像比例因子——與單姿態估計相同。

  

  水平翻轉——與單姿態估計相同。

  

  輸出步幅——與單姿態估計相同。

  

  最大姿態檢測——整數,默認值為 5。表示可檢測的最大姿態數量。

  

  姿態置信度得分閾值——0.0~1.0,默認值為 0.5。在較高層次上,它控制返回姿態的最小置信度得分。

  

  非極大值抑制(NMS)半徑——以像素為單位。在較高水平上,它控制返回姿態之間的最小距離。默認值為 20,適用於大多數情況。只有在調整姿態置信度得分不夠好的情況下,應該增加/減少其數值,以過濾不太精確的姿態。

  

  查看這些參數影響的最佳方法是使用多姿態估計 demo(https://storage.googleapis.com/tfjs-models/demos/posenet/camera.html)。

  讓我們查看一下輸出:

  

  解決多姿態估計問題。

  

  每個姿態包含與單人姿態估計算法相同的信息。

  

  以下簡短的代碼塊展示了如何使用多姿態估計算法:

  

  const imageScaleFactor = 0.50;

  

  const flipHorizontal = false;

  

  const outputStride = 16;

  

  // get up to 5 poses

  

  const maxPoseDetections = 5;

  

  // minimum confidence of the root part of a pose

  

  const scoreThreshold = 0.5;

  

  // minimum distance in pixels between the root parts of poses

  

  const nmsRadius = 20;

  

  const imageElement = document.getElementById('cat');

  

  // load posenet

  

  const net = await posenet.load();

  

  const poses = await net.estimateMultiplePoses(

  

   imageElement, imageScaleFactor, flipHorizontal, outputStride,

  

   maxPoseDetections, scoreThreshold, nmsRadius);

  

  多姿態輸出示例如下:

  

  // array of poses/persons

  

  [

  

   { // pose #1

  

   "score": 0.42985695206067,

  

   "keypoints": [

  

   { // nose

  

   "position": {

  

   "x": 126.09371757507,

  

   "y": 97.861720561981

  

   },

  

   "score": 0.99710708856583

  

   },

  

   ...

  

   ]

  

   },

  

   { // pose #2

  

   "score": 0.13461434583673,

  

   "keypositions": [

  

   { // nose

  

   "position": {

  

   "x": 116.58444058895,

  

   "y": 99.772533416748

  

   },

  

   "score": 0.9978438615799

  

   },

  

   ...

  

   ]

  

   },

  

   ...

  

  ]

  

  讀完以上內容,你對 PoseNet demo 已經有了足夠的了解,閱讀止於此處也是一個不錯的選擇。但如果想進一步了解模型和實現的技術細節,可繼續閱讀以下內容。

  對於好奇的大腦來說,這是一次技術深潛

  本節將深入討論單姿態估計算法的更多技術細節。在較高層次上,其流程如下所示:

  

  使用 PoseNet 的單人姿態檢測器流程

  需要注意的一個重要細節是,研究人員同時訓練了 PoseNet 的 ResNet 模型和 MobileNet 模型。雖然 ResNet 模型具有較高的準確率,但其龐大體積和多層結構使得頁面加載時間和推斷時間對於任何實時應用來說都不太理想。TensorFlow 採用了 MobileNet 模型,因為它是為行動裝置運行而設計的。

  再回到單姿態估計算法

  處理模型輸入:對輸出步幅的解釋

  首先,我們將通過討論輸出步幅來了解 PoseNet 模型輸出(主要是熱圖和偏移向量)。

  方便的一點是,PoseNet 模型要求圖像尺寸不變,這意味著它可以預測與原始圖像相同比例的姿態位置,而不管圖像是否被縮小。這也意味著 PoseNet 可以通過在運行時設置輸出步幅,以性能為代價獲取更高的準確率。

  輸出步幅決定了輸出比輸入圖像縮小的程度,它會影響層的大小和模型輸出。輸出步幅越高,網絡中層的解析度和輸出及其準確率就越小。在此實現中,輸出步幅的值可以是 8、16 或 32。換句話說,32 的輸出步幅將造成最快的性能、最低的準確率,而 8 將導致最高的準確率、最慢的性能。我們建議從 16 開始。

  

  輸出步幅決定了輸出比輸入圖像縮小的程度。輸出步幅越高,速度越快,但準確率越低。

  實現過程中,當輸出步幅被設置為 8 或 16 時,各層中的輸入步幅將減少,以創建更大的輸出解析度。然後使用用空洞卷積(atrous convolution)使後續層中的卷積濾波器具有更寬的視野(當輸出步幅為 32 時,不使用空洞卷積)。雖然 TensorFlow 支持空洞卷積,但 TensorFlow.js 並不支持,因此我們添加了一個 PR 來彌補這一點。

  模型輸出:熱圖和偏移向量(Offset Vector)

  當 PoseNet 處理圖像時,實際上返回的是熱圖和偏移向量,我們可對其進行解碼,以在圖像中找到對應姿態關鍵點的高置信度區域。下圖展示了在較高層次,每個姿態關鍵點與熱圖張量和偏移向量張量的關聯。

  

  PoseNet 返回的 17 個姿態關鍵點中每一個都與用於確定關鍵點確切位置的熱圖張量和偏移向量張量相關聯。

  這兩個輸出都是三維張量,其高度和寬度稱為解析度。根據以下公式,解析度由輸入圖像大小和輸出步幅確定:

  

  Resolution = ((InputImageSize - 1) / OutputStride) + 1

  

  // Example: an input image with a width of 225 pixels and an output

  

  // stride of 16 results in an output resolution of 15

  

  // 15 = ((225 - 1) / 16) + 1

  

  熱圖

  每個熱圖是尺寸為解析度 x 解析度 x 17 的 3D 張量,17 是 PoseNet 檢測到的關鍵點的數量。例如,對於 225 的圖像大小和 16 的輸出步幅,熱圖大小將是 15 x15x 17。(17 個中)第三維的每個切片圖對應特定關鍵點的熱圖。熱圖中每個位置具有置信度得分,即該關鍵點類型的一部分存在於該位置中的概率。我們可以將其看作是把原始圖像分割成 15x 15 網格,其中熱圖得分提供了每個關鍵點在每個網格正方形中存在可能性的分類。

  偏移向量

  每個偏移向量是尺寸為解析度 x 解析度 x 34 的 3D 張量,34 是關鍵點數量*2 得出的數字。如果圖像大小為 225,輸出步幅為 16,則該值為 15x15x34。由於熱圖是關鍵點所在位置的近似,因此偏移向量在位置上對應熱圖點,並且用於預測關鍵點的確切位置,如通過從相應熱圖點沿著向量行進。偏移向量的前 17 個切片圖包含向量的 x,後 17 個切片包含 y。偏移向量大小與原始圖像的比例相同。

  根據模型的輸出估計姿態

  在圖像輸入到模型後,我們執行一些計算以從輸出估計姿態。例如,單姿態估計算法返回姿態置信度得分,該得分本身包含多個關鍵點(由 part ID 索引),每個關鍵點具有置信度得分和 xy 位置。

  要獲取姿態的關鍵點:

   1. 在熱圖上進行 sigmoid 激活函數操作,獲得得分。

  

  scores = heatmap.sigmoid()

  

   2. 對關鍵點置信度得分執行 argmax2d,獲得熱圖中的 x 和 y 索引以及每個部分的最高得分,這基本上是該部分最可能存在的位置。這將產生大小為 17x2 的張量,每行是熱圖中的 y 和 x 索引以及每個部分的最高得分。

  

  heatmapPositions = scores.argmax(y, x)

  

   3. 從某部分熱圖中的 x 和 y 索引的偏移中獲取 x 和 y,得到每個部分的偏移向量。這產生大小為 17x2 的張量,其中每行都是對應關鍵點的偏移向量。例如,對於索引 k 處的部分,當熱圖位置為 y 和 d 時,偏移向量為:

  

  offsetVector = [offsets.get(y, x, k), offsets.get(y, x, 17 + k)]

  

   4. 為獲得關鍵點,每個部分的熱圖 x 和 y 乘以輸出步幅,然後再加與原始圖像比例相同的相應偏移向量。

  

  keypointPositions = heatmapPositions * outputStride + offsetVectors

  

   5. 最後,每個關鍵點置信度得分是其熱圖位置的置信度得分。姿態置信度得分是關鍵點得分的平均值。

  多人姿態估計

  多姿態估計算法的細節不在本文的討論範圍之內。該算法的主要不同之處在於,它使用貪婪過程通過沿著基於部分的圖跟隨位移向量來將關鍵點分組。具體而言,它採用了研究論文《PersonLab: Person Pose Estimation and Instance Segmentation with a Bottom-Up, Part-Based, Geometric Embedding Model》中的快速貪婪解碼算法(fast greedy decoding algorithm)。有關多姿態算法的更多信息,請閱讀完整論文或查看代碼。代碼地址:https://github.com/tensorflow/tfjs-models/tree/master/posenet/src。

  原文連結:https://medium.com/tensorflow/real-time-human-pose-estimation-in-the-browser-with-tensorflow-js-7dd0bc881cd5

  本文為機器之心編譯,轉載請聯繫本公眾號獲得授權

  ---

  加入機器之心(全職記者/實習生):hr@jiqizhixin.com

  投稿或尋求報導:content@jiqizhixin.com

  廣告&商務合作:bd@jiqizhixin.com

特別聲明:以上內容(如有圖片或視頻亦包括在內)為自媒體平臺「網易號」用戶上傳並發布,本平臺僅提供信息存儲服務。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相關焦點

  • TensorFlow發布JavaScript開發者的機器學習框架TensorFlow.js
    發布新的 TensorFlow 官方博客(http://blog.tensorflow.org/)與 TensorFlow YouTube 頻道;2. 面向 JavaScript 開發者的全新機器學習框架 TensorFlow.js;3.
  • 瀏覽器上跑:TensorFlow發布實時人物分割模型,秒速25幀24個部位
    第一部分:導入用npm install @tensorflow-models/body-pix安裝,然後用es6模塊來導入:1import * as bodyPix from '@tensorflow-models/
  • TensorFlow 1.9 新增 tf.keras 官方入門教程(Keras與TF的深度集成)
    好消息是Keras的許多核心功能已經融入了原生的TensorFlow(tf.keras),TensorFlow 1.9新增tf.keras官方入門文檔,介紹了tf.keras的使用。這幾天打開TensorFlow的官方教程頁(https://www.tensorflow.org/tutorials/),會發現教程頁中給出的DEMO變成了基於tf.keras的教程。
  • 從TensorFlow.js入手了解機器學習
    在trainModel方法裡我們將定義層 (只需要使用一個,這對於線性回歸問題來說足夠了):import * as tf from '@tensorflow/tfjs';/*** Linear model class*/export default class LinearModel {  /**  * Train model  */  async trainModel
  • TensorFlow.js 進行模型訓練
    TensorFlow.js使用tf.layers API創建模型的語法。如何使用tfjs-vis庫監控瀏覽器內培訓。你需要什麼最新版本的Chrome或其他現代瀏覽器。一個文本編輯器,可以在您的機器上本地運行,也可以通過Codepen或Glitch等在Web上運行。了解HTML,CSS,JavaScript和Chrome DevTools(或您首選的瀏覽器開發工具)。
  • TensorFlow 2.0正式版官宣!深度集成Keras
    這允許用戶使用TensorFlow運行模型,使用TensorFlow服務部署模型,使用TensorFlow Lite在移動和嵌入式系統上使用模型,使用TensorFlow.js在瀏覽器或Node.js上訓練和運行模型。
  • 如何利用TensorFlow.js部署簡單的AI版「你畫我猜」圖像識別應用
    部分圖像類別流程我們將使用 Keras 框架在谷歌 Colab 免費提供的 GPU 上訓練模型,然後使用 TensorFlow.js 直接在瀏覽器上運行模型。我在 TensorFlow.js 上創建了一個教程(https://medium.com/tensorflow/a-gentle-introduction-to-tensorflow-js-dba2e5257702)。在繼續下面的工作之前,請務必先閱讀一下這個教程。
  • Tensorflow 2.0 到底好在哪裡?
    /article/3250165/tensorflow-review-the-best-deep-learning-library-gets-better.html 這些年來,TensorFlow 逐漸發展為基於數據流圖的機器學習和神經網絡庫,擁有較高的學習曲線和一個底層 API。
  • 大數據下基於Tensorflow框架的深度學習示例教程
    在當今大數據時代的產業界,商業決策日益基於數據的分析作出。當數據膨脹到一定規模時,基於機器學習對海量複雜數據的分析更能產生較好的價值,而深度學習在大數據場景下更能揭示數據內部的邏輯關係。本文就以大數據作為場景,通過自底向上的教程詳述在大數據架構體系中如何應用深度學習這一技術。
  • 瀏覽器中實現深度學習?有人分析了7個基於JS語言的DL框架,發現還有...
    3.1 基於預訓練模型的推理作者使用 Keras 官方提供的預訓練模型來衡量 TensorFlow.js 和原生 TensorFlow 在這些經典模型上完成推理任務時的性能。3.1.1 TensorFlow.js 的局限性和瀏覽器約束Keras 官方提供了 11 個預訓練模型。
  • 瀏覽器中實現深度學習?有人分析了7個基於JS語言的DL框架
    3.1 基於預訓練模型的推理作者使用 Keras 官方提供的預訓練模型來衡量 TensorFlow.js 和原生 TensorFlow 在這些經典模型上完成推理任務時的性能。對於 DNN、CNN 和 RNN,作者從 Tensorflow.js 官方樣本示例中選取模型。DNN 和 CNN 模型用於識別 MNIST 數據集上的手寫數字,RNN 模型用於從尼採的著作中生成文本。根據 Tensorflow.js 官方樣本的數值集合確定深度和寬度的範圍。表 5.
  • tensorflow安裝教程
    建立成功進入tf2.0環境conda activate tf2.0安裝tensorflow2.0 pip install tensorflow==2.0.0-beta1下載的東西挺多,多等一會,最後成功如下命令行運行python,執行import
  • 基於TensorFlow的深度學習實戰
    為了將環境建在 ~/tensorflow 目錄下, 執行:$ virtualenv --system-site-packages ~/tensorflow接下來激活virtualenv:$ source ~/tensorflow/bin/activate #  with bash $ source ~/tensorflow/bin/activate.csh
  • 基於OpenCV與tensorflow實現實時手勢識別
    公眾號【OpenCV學堂】,致力於計算機視覺開發技術傳播,原創技術文章200+的,涉及OpenCV開發、tensorflow開發、模型解析與訓練、傳統圖像處理算法解析,對圖像與視覺感興趣的強烈推薦關注!
  • TensorFlow 2.0 發布以來,又有哪些最新進展?|AI ProCon 2020
    部署部分,包括用於瀏覽器和 Node.js 上部署的 TensorFlow.js,在移動和嵌入式平臺部署的 TensorFlow Lite,和伺服器端部署的TensorFlow Serving。1. 易用性:為了提升易用性,TensorFlow 2 採用了tf.keras 高階 API,只需要數行代碼就可以構建一個複雜的網絡。
  • TensorFlow 中文資源全集,學習路徑推薦
    https://gitee.com/fendouai/Awesome-TensorFlow-Chinese很多內容下面這個英文項目:Inspired by https://github.com/jtoy/awesome-tensorflow官方網站官網:https://www.tensorflow.org/中文:https://tensorflow.google.cn
  • 掌握深度學習,為什麼要用 PyTorch、TensorFlow 框架?
    高效地使用TensorFlow 2.0方法是,使用高級的tf.keras API(而不是舊的低級AP,這樣可以大大減少需要編寫的代碼量。只需要使用一行代碼就可以構建Keras神經網絡中的一層,如果利用循環結構,則可以進一步減少代碼量。TensorFlow.js是一個利用JavaScript開發和訓練機器學習模型,並在瀏覽器或Node.js中部署模型的庫。
  • TensorFlow 2.0 發布以來,又有哪些最新進展?| AI ProCon 2020
    Tensorflow.js 是為 Javascript 而定製的機器學習平臺,可以利用現有的 JS 模型包,對現有模型做遷移學習,或者用 JS從頭訓練模型。我們已經提供了多種多樣的模型,最近發布了手勢識別模型和基於 MobileBERT 的問題回答模型。它可以支持各種瀏覽器,也支持各種框架比如 React Native,還可以在伺服器端使用 Node.js。
  • 玩轉TensorFlow?你需要知道這30功能
    TFHub 模塊使它變得容易,並且可以在 https://tfhub.dev/ 這個開源軟體商店中使用。TF Hub 的地址是:tensorflow.org/hub/9)TensorFlowJS這是一個 JavaScript 庫,用於在瀏覽器和 Node.js 上訓練和部署 ML 模型。
  • 博客 | Tensorflow_01_運算符與張量值
    GPU 或者 CPU 版本其他語言支援包全部流程包含了比較多繁瑣的步驟,點擊 此處 前往官方提供安裝 Tensorflow 的介紹文檔。import tensorflow as tfa = tf.constant(5, name='input_a')b = tf.constant(3, name='input_b')c = tf.multiply(a, b, name='input_c')d = tf.add(a, b, name='add_d')e = tf.add(