Tensorflow 解惑[二]:feed_dict不一定與placeholder捆綁

Tensorflow的設計理念稱之為計算流圖,在編寫程序時,首先構筑整個系統(tǒng)的graph,代碼并不會直接生效,這一點和python的其他數(shù)值計算庫(如Numpy等)不同,graph為靜態(tài)的,類似于docker中的鏡像。然后,在實際的運行時,啟動一個session,程序才會真正的運行。這樣做的好處就是:避免反復地切換底層程序實際運行的上下文,tensorflow幫你優(yōu)化整個系統(tǒng)的代碼。我們知道,很多python程序的底層為C語言或者其他語言,執(zhí)行一行腳本,就要切換一次,是有成本的,tensorflow通過計算流圖的方式,幫你優(yōu)化整個session需要執(zhí)行的代碼,還是很有優(yōu)勢的。
上面扯了許多很虛的東西,接下來引入本文的主角:feed_dict。剛學tensorflow的時候,以為feed_dict是和placeholder配對使用的。比如下面的代碼,說明了feed_dict的基本用法:

import tensorflow as tf

a = tf.placeholder(dtype=tf.float32)
b = tf.placeholder(dtype=tf.float32)
c = tf.add(a, b)

with tf.Session() as sess:
    print sess.run(c, feed_dict = {a: 1.0, b: 2.0})

OK, 其實feed_dict可以喂東西給其他tensor,不止placeholder這一種。例如,下面的代碼:

import tensorflow as tf

a = tf.placeholder(dtype=tf.float32)
b = tf.constant(2.0)
c = tf.add(a, b)

with tf.Session() as sess:
    print sess.run(c, feed_dict = {a: 1.0, b: 3.0})

運行的結果為4,這里利用feed_dict將3.0送給了tensor b。
總結一下,知道了這種原理,對于模型恢復的理解很有幫助。機器學習系統(tǒng)伴隨著tensor的流動(tensorflow的寓意即為此,神經(jīng)網(wǎng)絡等等,其實就是tensor的線性變換和非線性激活),也許,我們只拿到了中間的tensor。舉例而言,你在做圖片分類的工作,訓練過程中,graph的placeholder為任意size的像素矩陣,但當你恢復模型的時候,已經(jīng)有預處理完的圖片像素tensor,這時就可以直接將其導入對應的tensor中即可,前提是知道對應的tensor的name或者符號,此時或許需要用到tf.get_tensor_by_name這個函數(shù)。feed_dict的靈活運用,也能反映出對graph思想理解。

若有不對之處,請大神指教。轉載請注明出處,謝謝。

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • 最是人間留不住,朱顏辭鏡花辭樹
    小昭呀閱讀 279評論 0 0
  • 鄉(xiāng)黨第十(主要記錄孔子言談舉止,衣食住行和生活習慣) 每日《論語》編輯:曹友寶 【原文】 10.21入太廟,每事問...
    曹友寶閱讀 405評論 0 0
  • 誰都有哀傷痛苦和不滿 嘗試挑戰(zhàn)不抱怨 對于聽覺污染 抿嘴微笑相當于阻攔 誰都有缺憾 改變語言與觀念 寬容可以掙得美...
    龍青閱讀 490評論 0 1
  • 上周末去看了芳華,當片尾曲響起的時候,我還陷在那種悲傷的情緒里無法自拔。這不是一部普通的文藝片或愛情片,她講述了一...
    儀琳閱讀 549評論 0 1

友情鏈接更多精彩內容