Tensorflow中的Placeholder及用法
本次主要介绍Tensorflow中的Placeholder及用法,Placeholder的中文意思就是占位符,用于在会话运行时动态提供输入数据。Placeholder相当于定义了一个位置,在这个位置上的数据在程序运行时再指定。
在以后的编程中我们可能会遇到这样的情况:在训练神经网络时需要每次提供一个批量的训练样本,如果每次迭代选取的数据要通过常量表示,那么TensorFlow 的计算图会非常大。因为每增加一个常量,TensorFlow 都会在计算图中增加一个结点,所以说拥有几百万次迭代的神经网络会拥有极其庞大的计算图,而占位符却可以解决这一点,它只会拥有占位符这一个结点,Placeholder机制的出现就是为了解决这个问题,我们在编程的时候只需要把数据通过placeholder传入tensorflow计算图即可,我们通过下面的代码演示来这个方法:
我们可以看到上面就是两个数组相加的结果。此外我们在定义placeholder时,这个位置上的数据类型(dtype参数)是需要指定的,而且数据类型是不可以改变的,比如有(tf.float16,tf.float32)。Placeholder中shape参数就是数据维度信息;对于不确定的维度,可以填入None。
在昨天的文章中我们定义的a和b是常量和变量,这里把他们定义为一个placeholder,因此我们在运行Session.run()函数时,我们注意到一个feed_dict函数,这个函数的用法是用来提供a和b的取值。feed_dict是一个字典,在字典中需要给出每个用到的占位符的取值,如果参与运算的placeholder没有被指定取值,那么程序就会报错。
Placeholder的目的是为了解决如何在有校的输入节点上实现高效地接受大量数据的问题。在上面的例子中如果把b从长度为2改为大小为n2的矩阵,矩阵的每一行为一个样例数据,这样向量相加之后的结果为n2的矩阵,也就是n个向量相加的结果了,矩阵的每一行就代表了一个向量相加的结果,下面我们展示一下n=3的例子:
从上面的样例中我们可以看到a+b的输出就是一个3x2的矩阵,最后得到的c的大小就是每一 个向量相加的之后的值。
结合昨天的讲的变量、常量和今天的占位符,我们给出了它们之间的区别:
常量:在运行过程中值不会改变的单元,在TensorFlow中无须进行初始化操作,创建语句:constant_ name =tf.constant(value)
变量:在运行过程中值会改变的单元,在TensorFlow中须进行初始化操作;创建语句:name_variable =tf.Variable(value, name)
占位符:TensorFlow中的Variable变量类型,在定义时需要初始化,但有些变量定义时并不知道其数值,只有当真正开始运行程序时,才由外部输入,比如训练数据,这时候需要用到占位符。占位变量是一种TensorFlow用来解决读取大量训练数据问题的机制,它允许你现在不用给它赋值,随着训练的开始,再把训练数据传送给训练网络学习。
其参数为数据的Type和Shape占位符Placeholder的函数接口如下:
tf.placeholder(dtype, shape=None, name=None)
区别:常量不能改变,变量可以改变,且变量比常量增加了一个init初始化变量,并调用会话的run命令对参数进行初始化,使用了Variable变量类型,不进行初始化数值会出现运行错误。另外,常量存储在计算图的定义中,每次加载图时都会加载相关变量。即它们是占用内存的。另一方面,变量又是分开存储的。它们可以存储在参数服务器上。占位符不包含任何数据,因此不需要初始化。
今天的内容就介绍到这里了,希望大家多多关注小鲸,一起来深度学习!
关注小鲸融创,一起学习金融科技!
上一篇: yii框架控制器的创建