1. 程式人生 > >TensorFlow: 薛定諤的管道

TensorFlow: 薛定諤的管道

640?wx_fmt=jpeg

要說史上最著名的貓,大概就是薛定諤的那隻了。它被關在裝有少量鐳和氰化物的密閉容器裡,當鐳發生衰變時,就會觸發機關打碎裝有氰化物的瓶子,貓就會死亡;如果鐳不發生衰變,貓就會存活下來。在量子力學理論中,由於放射性的鐳處於衰變和沒有衰變兩種狀態的疊加,這隻貓也處於生死疊加態,只有對其進行觀測,才能決定這隻貓的生死。

所以,哈姆雷特說:

生存還是死亡,這是一個問題!

今天我們從貓說起,來討論一個管道,一個蘊含著某些不確定性的管道:TensorFlow。我們從TensorFlow中的一個計算例項出發,在這個例子中的一個計算節點像薛定諤的貓一樣具備不確定性的輸出結果:如下圖所示的例子,同時計算節點assign和節點c

時,c的計算結果out_c是不確定的,這是因為TensorFlow會盡可能的對計算過程並行化,所以out_c的結果依賴assignc誰先執行。

640?wx_fmt=png

那麼面對這樣一個可能會產生“薛定諤現象”的框架,我們如何利用它來實現模型呢?

我們在使用TensorFlow這個軟體庫構建模型時,實際上是在TensorFlow提供的這套api系統裡編寫TF程式,這裡可以把TensorFlow看成是一門進行數值計算的“程式語言”。那麼為了更好的掌握TF這麼“語言”,我們可以從三個層次來學習:

  • 理解TensorFlow的基本概念和基本元件

  • 基於對基本概念的理解,利用基本元件來構建模型

  • 除錯模型,優化模型速度,優化模型精度

這裡我們從理解基本概念以及一個除錯模型的例子出發,來介紹其實現模型計算的過程。

640?wx_fmt=gif

TensorFlow的核心是通過資料流圖的方式來實現數值計算,這裡最核心的概念就是資料流圖,TensorFlow是以靜態圖(這裡不強調其動態圖的特性)的方式來表達計算,那麼一旦計算模型以圖的方式表達完成,就要通過Session來驅動計算,整體示意如上圖所示,節點和邊構成了你的計算模型,而實際計算時資料(Tensor)沿著圖的邊被驅動著進行計算從而流動起來,這也形象的表示了TensorFlow=Tensor+Flow。因此TensorFlow程式就可以分為兩個階段:

  • 階段一:組裝一個計算圖,這裡只是用TFapi來表達計算模型,生成的是一個靜態圖,圖由計算的節點以及節點之間的連線表示,這個階段只是靜態的表示了計算,因此得不到任何實際的計算值。

  • 階段二:通過一個Session(會話)來執行計算,這裡可以計算某個節點,而這個節點所依賴的父節點都會被驅動先行執行。

比如我們想從下圖所示的資料(X,Y)中學習一個線性關係y=w*x+b

640?wx_fmt=png

對於這樣一個機器學習任務,一般分為測試過程和訓練過程,測試過程一般比較簡單,這裡我們介紹如何使用TensorFlow來實現訓練過程,對於機器學習模型的訓練過程的一般可以如下面流程圖所示:

640?wx_fmt=png

具體步驟為:

1.    定義輸入和輸出標籤

2.    定義模型引數

3.    初始化模型引數

4.    基於輸入和模型引數,由模型的推理過程計算模型的預測結果

5.    基於模型的預測結果和標籤值,由損失函式來計算loss

6.    優化器通過更新引數來最小化loss

7.    不斷重複4-6直到迭代次數達到或者loss低於設定的閾值

使用TensorFlow來完成以上計算時,我們需要:

1)  使用靜態圖的方式表達上面的計算過程(對應階段一)

2)  使用Session(會話)來驅動上面的計算(對應階段二)

可以如下面程式碼所示,

640?wx_fmt=png

640?wx_fmt=png

所有我們想要進行的計算都需要在階段一進行表達,如我們需要進行模型初始化這樣一個計算過程,那麼我們需要在階段一構造一個init操作節點,我們需要最小化loss,更新模型引數,我們可以構造一個train_op操作節點,每個計算對應計算圖中的一個計算節點,一旦計算圖構建完成,我們就可以在階段二過程通過執行這個節點來進行實際的計算如sess.run(init),sess.run(train_op)。由此通過階段一階段二兩部分程式完成我們想要的計算邏輯,學習到的線性模型如下圖所示。

640?wx_fmt=png

正是因為TF這種graphsession兩階段的劃分,導致我們在除錯TF的時候也會分為兩個階段:

1.    錯誤發生在組裝圖部分。這裡TF會進行型別檢測,以及shape推理,所以一般dtypeshape相關的錯誤會與這一部分程式碼相關。

2.    錯誤發生在執行圖部分。這裡TF會進行執行時的計算,所以NaN等問題會發生在這個階段。

如果想更多的瞭解如何使用TensorFlow構建機器學習模型,可以點選閱讀原文,關注深度學習大講堂推出的Tensorflow實戰課程。

往期精彩回顧

相關推薦

的貓,把妹法。用科學的辦法把妹,解決程式設計師終身大事

標題 薛定諤把妹法 “薛定諤把妹法”其靈感來自著名的物理學假設“薛定諤的貓”。“薛定諤把妹法”中心思想是:事件在被觀察以前,一直處在一個所謂“概率雲”的狀態下,一旦受到觀察,則坍縮為實體。通俗一些,就是要給女生神祕感。 中文名 薛定諤把妹法 外文名 Chase girls with Sc

的貓跳進了生物學界 化學家:沒有我可能辦不到

“90後”女大學生放棄北大保送復旦!她到底有多厲害?  東北網12月6日訊(記者 姜姍姍) 在東北農業大學有這樣一個自強不息的女大學生,她放棄北大直博被保送到復旦大學藥學院。她本科期間獲得國家獎學金、國家勵志獎學金、新東方自強獎學金、第一屆全國大學生生命聯賽國家二等獎……被評為黑龍江省“三好學生”。她就是生命

神經網路與方程

定態薛定諤方程是 如果是定態的自由粒子,這個方程的解是 因為是定態的波函式與時間無關,這個粒子的能量E不隨時間變化 假設E=1,讓t→0 所以波函式變成 讓A和都等於1   讓神經網路裡的節點都是在位形空間中  

書接上文:的貓是如何誕生的?

編輯手記:注重細節,是DBA必要的基本素質要求。 上一篇文章討論了非空欄位中如果存在空值對於查詢的影響,這裡描述一下導致問題的原因。 書接上文(參考:空與非空 – 資料庫中也有薛定諤的貓?),其實CBO的判斷本身是沒有問題的,問題在於,為什麼一個空值會存在非空約束的欄位中。 SQL> sel

MIT量子力學公開課第6講:方程筆記

Youtube視訊 https://www.youtube.com/watch?v=TWpyhsPAK14 幾個基本假設 粒子的運動軌跡由波動函式\(\psi(x,t)\)完全描述,其中\(|\psi(x,t)|^2\)表示\(t\)時刻,粒子出現在\(x\)的概率 任意一種測量都對應一個

Matlab方程工具箱系列——GUI初步美化

function h1 = main_gui_export() % This is the machine-generated representation of a Handle Graphics object % and its children. Note that handle values may

從“的貓”聯想到“好奇害死貓”

    喜歡物理學尤其是量子力學的朋友一定對薛定諤的貓不會陌生,至於那些不大懂的小夥伴建議可以網上搜索瞭解下,對你的人生觀、價值觀可能會有所改變(不說笑,真的哦)。     對於量子論從愛因斯坦、波爾時代至今,一直是人們討論的焦點。因為量子論只存在於理論和思維實驗,理論上

物理學四大神獸,除了“的貓”, 你還知道哪幾個?

物理學是一門研究物質運動最一般規律和物質基本結構的學科。分為純物理學和多學科物理學,其中的純物理

當Python中混進一隻的貓……

本文原創並首發於公眾號【Python貓】,未經授權,請勿轉載。 原文地址:https://mp.weixin.qq.com/s/

mybatis偵探實錄:typehandler之謎

1、案件背景 前天,一個涉案人員(同事)提到,在mysql的資料庫中,dba推薦的做法是所有的varchar欄位都設定成不能為

TensorFlow 高效能資料輸入管道設計指南

作者:黑暗星球 原文地址:https://blog.csdn.net/u014061630/article/details/80776975 TensorFlow版本:1.12.0 本篇主要介紹怎麼使用

IO 重管道 命令練習

1、將/etc/issue檔案中的內容轉換為大寫後儲存至/tmp/issue.out檔案中2、將當前系統登入使用者的資訊轉換為大寫後儲存至/tmp/who.out檔案中3、一個linux使用者給root發郵件,要求郵件標題為”help”,郵件正文如下:Hello, I am 使用者名稱,The system

10 張圖幫你搞 TensorFlow 數據讀取機制

小夥伴 圖片 文章 網上 如何 導讀在學習tensorflow的過程中,有很多小夥伴反映讀取數據這一塊很難理解。確實這一塊官方的教程比較簡略,網上也找不到什麽合適的學習材料。今天這篇文章就以圖片的形式,用最簡單的語言,為大家詳細解釋一下tensorflow的數據讀取機制,文章的最後還會給出

Tensorflow實現Mask R-CNN實例分割通用框架,檢測,分割和特征點定位一次搞(多圖)

優點 設計 orf 時間 rcnn 超越 rain 沒有 add Mask R-CNN實例分割通用框架,檢測,分割和特征點定位一次搞定(多圖) 導語:Mask R-CNN是Faster R-CNN的擴展形式,能夠有效地檢測圖像中的目標,同時還能為每個實例生成一個

Angular09 數據綁、響應式編程、管道

blog 變化 width png control 通過 單向 angular css 1 數據綁定的分類   1.1 單向數據綁定     1.1.1 屬性綁定 -> 數據從組件控制類到組件模板       DOM屬性綁定       HTML屬性綁定     1.

Tensorflow快餐教程(1) - 30行代碼搞手寫識別

Python 算法 去年買了幾本講tensorflow的書,結果今年看的時候發現有些樣例代碼所用的API已經過時了。看來自己維護一個保持更新的Tensorflow的教程還是有意義的。這是寫這一系列的初心。快餐教程系列希望能夠盡可能降低門檻,少講,講透。為了讓大家在一開始就看到一個美好的場景,而不是停留

tensorflow實現svm多分類 iris 3分類——本質上在使用梯度下降法求解線性回歸(loss是制的而已)

points near plot asi atm lob put matplot ive # Multi-class (Nonlinear) SVM Example # # This function wll illustrate how to # implement

十分鐘搞macOS tensorflow + opencv配置

jpg bus main 個人 urn hub 打印 就是 學校 隔壁小白都簡單哭了 準備: MacOS(我的系統是10.12.6,比較懶很少更新) python 3.6(忘掉2.7吧~已經是遺留版本啦~下載地址 https://www.python.org/downloa

Linux 第三天 重負、管道符、環境變數

1 輸入輸出重定向簡而言之,輸入重定向是指把檔案匯入到命令中,而輸出重定向則是指把原本要輸出到螢幕的資料資訊寫入到指定檔案中。在日常的學習和工作中,相較於輸入重定向,使用輸出重定向的頻率更高,所以又將輸出重定向分為了標準輸出重定向和錯誤輸出重定向兩種不同的技術,以及清空寫入與追加寫入兩種模式。1.1