zoukankan      html  css  js  c++  java
  • 【TF-2-1】Tensorflow-控制依赖和指定运行设备

    一、TensorFlow控制依赖

    1.1 简介

    我们可以通过Variable和assign完成变量的定义和更新,但是如果在更新变量之前需要更新其它变量,那么会导致一个比较严重的问题:也就是需要多次调用sess.run方法来进行变量的更新。通过这种方式,代码复杂程度上升,同时也没有执行效率。

    解决该问题的方案就是:控制依赖。通过TensorFlow中提供的一组函数来处理不完全依赖的情况下的操作排序问题(即给定哪个操作先执行的问题), 通过tf.control_dependencies API完成。如上一篇【TF-1-1】Tensorflow实验--入门中的最后:

    tmp_sum=sum*i

    assign_op=tf.assign(sum,tmp_sum)

    With tf.control_dependencies([assign_op]):

    #如果需要执行这个代码块中的内容,必须先执行control_dependencies中给定的操作/tensor

    sum=tf.Print(sum,data=[sum,sum.read_value()])

    1.2 示例代码:实现一个求解阶乘

        1 	# 1. 定义一个变量
        2 	sum = tf.Variable(1, dtype=tf.int32)
        3 	# 2. 定义一个占位符
        4 	i = tf.placeholder(dtype=tf.int32)
        5 	# 3. 更新操作
        6 	tmp_sum = sum * i   # 一样的效果 tmp_sum = tf.multiply(sum, i)
        7 	assign_op = tf.assign(sum, tmp_sum)
        8 	with tf.control_dependencies([assign_op]):
        9 	# 如果需要执行这个代码块中的内容,必须先执行control_dependencies中给定的操作/tensor
       10 	    sum = tf.Print(sum, data=[sum, sum.read_value()], message='sum:')
       11 	# 4. 变量初始化操作
       12 	x_init_op = tf.global_variables_initializer()
       13 	# 5. 运行
       14 	with tf.Session(config=tf.ConfigProto(log_device_placement=True, allow_soft_placement=True)) as sess:
       15 	    sess.run(x_init_op)  # 变量初始化
       16 	    # 模拟迭代更新累加器
       17 	    for j in range(1, 6):
       18 	        # 执行更新操作
       19 	        # 通过control_dependencies可以指定依赖关系,这样的话,就不用管内部的更新操作了
       20 	        r = sess.run(sum, feed_dict={i: j})
       21 	    print("5!={}".format(r))
    

      

    二、TensorFlow运行设备指定

    2.1 简介

    设备是指一块可以用来运算并且拥有自己的地址空间的硬件,如CPU和GPU。Tensorflow为了在执行操作的时候,充分利用计算资源,可以明确指定操作在哪个设备上执行。

    一般情况下,不需要显示指定使用CPU还是GPU,TensorFlow会自动检测。如果检测到GPU,TensorFlow会尽可能地利用第一个GPU来执行操作。注意:如果机器上有超过一个可用的GPU,那么除了第一个外其它GPU默认是不参与计算的。所以,在实际TensorFlow编程中,经常需要明确给定使用的CPU和GPU。

    "/cpu:0":表示使用机器CPU运算

    "/gpu:0":表示使用第一个GPU运算,如果有的话

    "/gpu:1":表示使用第二个GPU运算,以此类推

    注意:

    1、如果按照的tensorflow cpu版本,没法指定运行环境的

    2、有一些操作,是不会再GPU上运行的

    3、设置不同设备上运行,是为了能够并行提高效率。

    2.2 实例

        1 	import tensorflow as tf
        2 	with tf.device('/cpu:0'):  # 这个代码块中定义的操作,会在tf.device给定的设备上运行
        3 	    a = tf.Variable([1, 2, 3], dtype=tf.int32, name='a')
        4 	    b = tf.constant(2, dtype=tf.int32, name='b')
        5 	    c = tf.add(a, b, name='ab')
        6 	with tf.device('/gpu:1'):
        7 	    d = tf.Variable([2, 8, 13], dtype=tf.int32, name='d')
        8 	    e = tf.constant(2, dtype=tf.int32, name='e')
        9 	    f = d + e
       10 	g = c + f
       11 	with tf.Session(config=tf.ConfigProto(log_device_placement=True, allow_soft_placement=True)) as sess:
       12 	    tf.global_variables_initializer().run()     # 初始化
       13 	    print(g.eval())

    结果:

  • 相关阅读:
    CSS优化,提高性能的方法有哪些?
    稀疏数组(SparseArray)(Go)
    Go
    Vue 实战-6 rest 重置表单不生效原因
    Go
    Vue 实战-5 批量导出 excel功能
    Vue 实战-4 表格展开行
    Vue 实战-3 vue 中使用watch 监听 el-input属性值
    Vue 实战-2 输入框加搜索图标
    Vue 实战-1 去掉 input [number] 默认增减箭头样式
  • 原文地址:https://www.cnblogs.com/yifanrensheng/p/12507822.html
Copyright © 2011-2022 走看看