创建了各种形式的常量和变量后,但TensorFlow 同样还支持占位符。占位符并没有初始值,它只会分配必要的内存。在会话中,占位符可以使用 feed_dict 馈送数据。

feed_dict是一个字典,在字典中需要给出每一个用到的占位符的取值。在训练神经网络时需要每次提供一个批量的训练样本,如果每次迭代选取的数据要通过常量表示,那么TensorFlow 的计算图会非常大。因为每增加一个常量,TensorFlow 都会在计算图中增加一个结点。所以说拥有几百万次迭代的神经网络会拥有极其庞大的计算图,而占位符却可以解决这一点,它只会拥有占位符这一个结点。

下面一段代码分别展示了使用常量和占位符进行计算:

  1. w1=tf.Variable(tf.random_normal([1,2],stddev=1,seed=1))
  2. #因为需要重复输入x,而每建一个x就会生成一个结点,计算图的效率会低。所以使用占位符
  3. x=tf.placeholder(tf.float32,shape=(1,2))
  4. x1=tf.constant([[0.7,0.9]])
  5. a=x+w1
  6. b=x1+w1
  7. sess=tf.Session()
  8. sess.run(tf.global_variables_initializer())
  9. #运行y时将占位符填上,feed_dict为字典,变量名不可变
  10. y_1=sess.run(a,feed_dict={x:[[0.7,0.9]]})
  11. y_2=sess.run(b)
  12. print(y_1)
  13. print(y_2)
  14. sess.close

其中 y_1 的计算过程使用占位符,而 y_2 的计算过程使用常量。

下面是使用占位符的案例(计算两点之间的距离):

  1. list_of_points1_ = [[1,2], [3,4], [5,6], [7,8]]
  2. list_of_points2_ = [[15,16], [13,14], [11,12], [9,10]]
  3. list_of_points1 = np.array([np.array(elem).reshape(1,2) for elem in list_of_points1_])
  4. list_of_points2 = np.array([np.array(elem).reshape(1,2) for elem in list_of_points2_])
  5. graph = tf.Graph()
  6. with graph.as_default():
  7. #我们使用 tf.placeholder() 创建占位符 ,在 session.run() 过程中再投递数据
  8. point1 = tf.placeholder(tf.float32, shape=(1, 2))
  9. point2 = tf.placeholder(tf.float32, shape=(1, 2))
  10. def calculate_eucledian_distance(point1, point2):
  11. difference = tf.subtract(point1, point2)
  12. power2 = tf.pow(difference, tf.constant(2.0, shape=(1,2)))
  13. add = tf.reduce_sum(power2)
  14. eucledian_distance = tf.sqrt(add)
  15. return eucledian_distance
  16. dist = calculate_eucledian_distance(point1, point2)
  17. with tf.Session(graph=graph) as session:
  18. tf.global_variables_initializer().run()
  19. for ii in range(len(list_of_points1)):
  20. point1_ = list_of_points1[ii]
  21. point2_ = list_of_points2[ii]
  22. #使用feed_dict将数据投入到[dist]中
  23. feed_dict = {point1 : point1_, point2 : point2_}
  24. distance = session.run([dist], feed_dict=feed_dict)
  25. print("the distance between {} and {} -> {}".format(point1_, point2_, distance))
  26. #输出:
  27. >>> the distance between [[1 2]] and [[15 16]] -> [19.79899]
  28. >>> the distance between [[3 4]] and [[13 14]] -> [14.142136]
  29. >>> the distance between [[5 6]] and [[11 12]] -> [8.485281]
  30. >>> the distance between [[7 8]] and [[ 9 10]] -> [2.8284271]

Tensorflow学习笔记——占位符和feed_dict(二)的更多相关文章

  1. TensorFlow学习笔记(三)-- feed_dict 使用

    个人理解:就是TF的一种输入语法. 跟C语言的scanf(),C++的 cin>> 意思差不多,只是长相奇怪了点而已. 做完下面几个例子,基本也就适应了. 首先占位符申请空间:使用的时候, ...

  2. TensorFlow学习笔记3——Placeholders and feed_dict

    1. Placeholders placeholders,顾名思义,就是占位的意思,举个例子:我们定义了一个关于x,y的函数 f(x,y)=2x+y,但是我们并不知道x,y的值,那么x,y就是等待确定 ...

  3. tensorflow学习笔记二:入门基础 好教程 可用

    http://www.cnblogs.com/denny402/p/5852083.html tensorflow学习笔记二:入门基础   TensorFlow用张量这种数据结构来表示所有的数据.用一 ...

  4. TensorFlow学习笔记——LeNet-5(训练自己的数据集)

    在之前的TensorFlow学习笔记——图像识别与卷积神经网络(链接:请点击我)中了解了一下经典的卷积神经网络模型LeNet模型.那其实之前学习了别人的代码实现了LeNet网络对MNIST数据集的训练 ...

  5. tensorflow学习笔记——使用TensorFlow操作MNIST数据(1)

    续集请点击我:tensorflow学习笔记——使用TensorFlow操作MNIST数据(2) 本节开始学习使用tensorflow教程,当然从最简单的MNIST开始.这怎么说呢,就好比编程入门有He ...

  6. Tensorflow学习笔记2019.01.03

    tensorflow学习笔记: 3.2 Tensorflow中定义数据流图 张量知识矩阵的一个超集. 超集:如果一个集合S2中的每一个元素都在集合S1中,且集合S1中可能包含S2中没有的元素,则集合S ...

  7. 深度学习-tensorflow学习笔记(2)-MNIST手写字体识别

    深度学习-tensorflow学习笔记(2)-MNIST手写字体识别超级详细版 这是tf入门的第一个例子.minst应该是内置的数据集. 前置知识在学习笔记(1)里面讲过了 这里直接上代码 # -*- ...

  8. tensorflow学习笔记(1)-基本语法和前向传播

    tensorflow学习笔记(1) (1)tf中的图 图中就是一个计算图,一个计算过程.                                       图中的constant是个常量 计 ...

  9. tensorflow学习笔记——使用TensorFlow操作MNIST数据(2)

    tensorflow学习笔记——使用TensorFlow操作MNIST数据(1) 一:神经网络知识点整理 1.1,多层:使用多层权重,例如多层全连接方式 以下定义了三个隐藏层的全连接方式的神经网络样例 ...

随机推荐

  1. 零基础入门学习Python(23)--递归:这帮小兔崽子

    知识点 我们都知道兔子繁殖能力是惊人的,如下图: 我们可以用数学函数来定义: 假设我们需要求出经历了20个月后,总共有多少对小兔崽子? 迭代实现 def fab(n): n1 = 1 n2 = 1 n ...

  2. 零基础入门学习Python(11)--列表:一个打了激素的数组(2)

    前言 上节课我们介绍一个打了激素的数组,叫做列表.列表我们比作一个大仓库,你所能够具现化的东西,都可以往里面扔,它包罗万象.另外还介绍了三个往列表添加元素的方法,分别是: append(),exten ...

  3. 零基础入门学习Python(9)--了不起的分支和循环3

    前言 本节继续介绍分支和循环 知识点 while循环 Python while循环与if条件分支有点类似,在条件为真的情况下,执行某一段指定的代码.不同的是只要条件为True,while循环就会一直重 ...

  4. Linux内核0.11体系结构 ——《Linux内核完全注释》笔记打卡

    0 总体介绍 一个完整的操作系统主要由4部分组成:硬件.操作系统内核.操作系统服务和用户应用程序,如图0.1所示.操作系统内核程序主要用于对硬件资源的抽象和访问调度. 图0.1 操作系统组成部分 内核 ...

  5. js 技巧 (九)按键JS

    1. 禁止复制(copy),禁用鼠标右键! <SCRIPT> //加入页面保护 function rf() {return false; } document.oncontextmenu ...

  6. LeetCode(63)Unique Paths II

    题目 Follow up for "Unique Paths": Now consider if some obstacles are added to the grids. Ho ...

  7. Android渲染器Shader:LinearGradient(一)

     Android渲染器Shader:LinearGradient(一) LinearGradient是Android的线性渲染器.我写5个LinearGradient渲染器渲染后的View表现结果 ...

  8. 动态规划之最长公共子序列(LCS)

             在字符串S中按照其先后顺序依次取出若干个字符,并讲它们排列成一个新的字符串,这个字符串就被称为原字符串的子串          有两个字符串S1和S2,求一个最长公共子串,即求字符串 ...

  9. Django开发:(3.1)ORM:单表操作

    MVC或者MVC框架中包括一个重要的部分,就是ORM,它实现了数据模型与数据库的解耦,即数据模型的设计不需要依赖于特定的数据库,通过简单的配置就可以轻松更换数据库,这极大的减轻了开发人员的工作量,不需 ...

  10. 通过setContentView设置activity的不同样式

    public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle saved ...