对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

 

猜你喜欢

转载自blog.csdn.net/Strive_For_Future/article/details/82463923