30天从入门到精通TensorFlow1.x 第五天,跨计算设备执行计算图-cpu

一、接前一天

前天学习了,数据流图,今天尝试在不同设备上(cpu或者gpu)来执行计算图。
本次使用cpu来执行,但是不涉及gpu。gpu放在后面学习,这里比较重要。

二、示例

1. 先看看自己的设备

from tensorflow.python.client import device_lib

print(device_lib.list_local_devices())

可以通过上面代码实现。

在这里插入图片描述
这个代码执行后,只会显示一个cpu,TensorFlow会隐式的将代码分配到各个CPU上,因此默认情况下 CPU:0表示所有CPU都对TensorFlow有效。

2. 内部逻辑

TensorFlow使用多设备执行代码的原理是通过图分割和设备放置实现的。

  1. 首先,通过图分割将计算图中的操作划分为不同的子图,每个子图表示为一个单独的计算设备。然后,通过设备放置将每个子图映射到对应的物理设备上进行计算。这可以通过手动指定设备放置来完成,也可以使用 TensorFlow 的默认设备放置策略(例如,在具有多个 GPU 的系统中将操作分配到可用的 GPU 上)。

  2. 在执行期间,TensorFlow会自动在各个设备之间传输必要的数据,以便完成整个计算过程。这通常包括从 CPUGPU 的输入数据传输、在更快的设备上执行操作并将结果传回到 CPU 等操作。

  3. 使用多设备执行可以加速模型训练和推断,特别是在大规模深度学习任务中。

3. 通过tf.decice()将计算图放在特定的计算设备上

import tensorflow as tf
from tensorflow.python.client import device_lib

print(device_lib.list_local_devices())




tf.reset_default_graph()
'''
代码是用于重置 TensorFlow 计算图中所有变量和状态的函数。它通
常在重新运行模型之前调用,以确保您使用的是新的、干净的计算
图。这可以帮助避免在多次运行模型时出现命名冲突或其他不必要的
错误。

cpu:个数 一般从 0,1,2,3.。。。代表不同设备
'''

with tf.device("/device:cpu:0"):
    # create w and b init 0.0
    w = tf.Variable(0.0, name='weight')
    b = tf.Variable(0.0, name='bias')

    # create input and out
    x = tf.placeholder(dtype=tf.float32, shape=[None])
    out = tf.placeholder(dtype=tf.float32, shape=[None])

    # create loss and opt
    y = w * x + b



loss = tf.reduce_mean(tf.square(y - out))
optimizer = tf.train.GradientDescentOptimizer(learning_rate=0.01)
train_op = optimizer.minimize(loss)

config = tf.ConfigProto()
config.log_device_placement=True

# train model
with tf.Session(config=config) as sess:
    tf.global_variables_initializer().run(session=sess)
    for i in range(100000):
        _, loss_val, w_val, b_val = sess.run(
            [train_op, loss, w, b],
            feed_dict={x: [1, 23, 4, 5, 7, 5, 7], out: [3, 5, 7, 9, 11, 13, 15]}
        ) #注意 输入的数据 形状要一致,避免输出与预测值得形状不一致问题
        if i % 100 == 0:
            print('Step {}: loss = {}, w = {}, b = {}'.format(i, loss_val, w_val, b_val))

在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

QuietNightThought

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值