1. 程式人生 > >對tensorflow中的tensor、placeholder及feed_dict的理解

對tensorflow中的tensor、placeholder及feed_dict的理解

以前不知道tf.placeholder的feed_dict格式要求,以為隨便是什麼格式都可以,直到自己在做測試的時候出現以下錯誤才知道tf.placeholder  的feed_dict填充內容不可以是tensor格式的,對自己來說反而方便很多。

TypeError: The value of a feed cannot be a tf.Tensor object. Acceptable feed values include Python scalars, strings, lists, numpy ndarrays, or TensorHandles.

placeholder的作用:

1)佔位符作用,為待處理資料生成tensor物件,在未來的graph中佔據一席之地,但這些tensor只有格式和shape,沒有實際內容。

                                     2)placeholder與feed_dict結合的另外一個潛在作用是,將numpy等格式的輸入資料轉換成tensor需要的格式,方便在tensorflow中流動。

 

自己對tensorflow的一些理解:

           1)tensorflow中的tensor不是數學意義上的張量,數學意義上的張量是實實在在的資料,tensorflow中的tensor的實際意義是操作(operation,op)或者函式。如:

                                       y = f(x)

                                       z=g(y)

                                     則:z=g(f(x))

          在傳統的數學意義上,張量對應的是實實在在的資料x,y,z,

         在tenforflow中,tensor的意義是操作,是函式,即tf.tensor對應的是 f(),g(),g(f()),是一種對映關係,沒有、也不代表真實資料

        因此,在獲取張量的值的時候需要用sess.run(tensor),因為,tensor僅僅代表對映關係,如果不執行這個對映,就不會有對映的結果輸出。

        2)tensorflow中的graph實際上是一個對映關係樹,graph上的每個節點可以看作是基本對映關係的組合,但仍舊是對映關係。

           可以把tensorflow中的graph比作一個水暖的暖氣系統。

          每個暖氣片可以看作tensor,該tensor的作用是散熱。

          暖氣片下方有個放水的水龍頭,代表tensorflow中的 sess.run()功能,執行sess.run()相當於開啟水龍頭,得到暖氣系統流經該暖氣片之後的水。

          tensorflow的placeholder可以看作暖氣系統的加水處,水是輸入資料。

         如果不加水,整個暖氣系統也是完整的,但不能起到任何作用。

        加水之後,水就可以流到各個可以到達的張量處,但要想得到張量中的資料,需要開啟它的水龍頭,即對該張量執行sess.run()

       tensorflow的每個節點,可以看作一系列暖氣片的串並聯等方式的組合,最後給出一個水龍頭。即,每個暖氣片都有一個自己的水龍頭,每個暖氣片組有再新增一個總的與主幹道接通的水龍頭。

     所以,要想從tensorflow中的某個張量處得到水,首先需要在注水處添上水,然後需要開啟對應暖氣片或暖氣片組的水龍頭。

        3)要想得到對映關係的結果,首先需要填入輸入資料(feed_dict),然後需要驅動該對映的執行(sess.run())

 

 

前程任重而道遠,自己雖然很水,還需腳踏實地力前行。

 

文章原創,如有不當,歡迎拍磚指正,如需轉載,請註明出處!https://blog.csdn.net/Strive_For_Future/article/details/82463923