TensorFlow学习笔记_Lecture 1 Overview of Tensorflow

本博客中根据斯坦福大学的一门 tensorflow 课程的课件整理。这是课程地址 CS 20: Tensorflow for Deep Learning Research。1 前言什么是 TensorFlow? “Open source software library for numerical computation using data flow graphs”...
摘要由CSDN通过智能技术生成

本博客是根据斯坦福大学的一门 tensorflow 课程的课件整理。这是课程地址 CS 20: Tensorflow for Deep Learning Research

1 前言

  • 什么是 TensorFlow?

    “Open source software library for numerical computation using data flow graphs”

  • 为什么用 TensorFlow?

    • 有许多机器学习库;
    • 具有灵活性和扩展性;
    • 许多人已经在用了,现今很流行,许多闻名的大公司也在用 TensorFlow;
    • ………..
  • 上面这些都不重要,让我们进入正题。

2 Graphs and Sessions(图和会话)

  • 什么是 张量(Tensor)

    所谓的 TensorFlow 中的 TensorFlow 是什么呢?这个问题其实比较复杂,我们这里就不细讲,就给出一个非常简单的概念:

    • 0 维张量:标量(scalar)。也就是我们一般意义上的 数字(number)

    • 1 维张量:向量(vector)

    • 2 维张量:矩阵(matrix)

  • TensorFlow separates definition of computations from their execution.

    TensorFlow 将计算的定义和执行分开了。所以我们使用 TensorFlow 计算的步骤应该是:

    1. 定义一张 计算图(Graphs)
    2. 使用一个 会话(session) 去执行图中的操作。
  • 假如你在终端输入下面两行代码:

    import tensorflow as tf
    a = tf.add(3, 5)

    上面两行代码定义的其实就是:

    1527163941084

    如果你学过神经网络,会发现这东西很眼熟。就像神经网络是由很多神经元组成的一样,TensorFlow 中的计算图也将由许多如上的结构组成。其中,

    • 节点(Nodes):表示操作,变量或者常亮;
    • 边(Edges):表示张量(tensors)。
  • 现在我们试着将上面定义的东西打印出来看一下:

    import tensorflow as tf
    a = tf.add(3, 5)
    print(a)

    输出:

    >> Tensor("Add:0", shape=(), dtype=int32)

    没有输出我们期待的 8 ,要怎么样能计算出 a 的值呢?答案就是 session.

  • 我们来创建一个 session 试试:

    import tensorflow as tf
    a = tf.add(3, 5)
    sess = tf.Session()
    print(sess.run(a))
    sess.close()

    输出:

    >> 8

    有了 session,我们就能计算出 a 的值了 。

    但是以防我们忘记关闭 session,所以官方推荐我们这么写:

    import tensorflow as tf
    a = tf.add(3, 5)
    with tf.Session() as sess:
          print(sess.run(a))
  • 所以 session 的作用是什么呢?

    A Session object encapsulates the environment in which Operation objects are executed, and Tensor objects are evaluated.

    Session will also allocate memory to store the current values of variables .

    因为英语比较渣,所以一直翻译不通顺这两句话,大概意思就是 session 封装了一个环境,在这个环境里,就可以去执行图中各种操作了,同时 session 还会去分配变量的内存。

  • 我们还可以定义更多节点的图:

    x = 2
    y = 3
    op1 = tf.add(x, y)
    op2 = tf.multiply(x, y)
    op3 = tf.pow(op2, op1)
    with tf.Session() as sess:
    op3 = sess.run(op3)

    上述代码定义了如下的图:

    1527165520644

    需要指出的一点是,TensorFlow 并不会自动的去计算图中所有节点的值,只有这个节点需要被计算出来的时候(比如其他节点的输出依赖此节点的输出。或者用户想要计算这个节点的值),TensorFlow 才会去计算,因为并不是每一次计算都需要所有节点的值。

3 分布式计算

  • tensorFlow 之所以强大,有一个原因是因为它可以将一张图分成多个部分并行计算,比如在你的 4 张 GTX 1080Ti 上并行计算。

    1527165872840

    可以自行指定要在哪个CPU 或者 GPU 上执行:

    
    # Creates a graph.
    
    with tf.device('/gpu:2'):
       a = tf.constant([1.0, 2.0, 3.0, 4.0, 5.0, 6.0], name='a')
       b = tf.constant([1.0, 2.0, 3.0, 4.0, 5.0, 6.0], name='b')
       c = tf.multiply(a, b)
    
    
    # Creates a session with log_device_placement set to True.
    
    sess = tf.Session(config=tf.ConfigProto(log_device_placement=True))
    
    
    # Runs the op.
    
    print(sess.run(c))

4 创建多张图

  • 建议你不要这么做,因为

    • 因为多张图意味着要多个 session ,而每个 session 都会努力的抢占你计算机上的所有资源;
    • 不能在不通过 numpy 的情况下传递数据,不然就不能分布式计算了;
    • 可以通过分开一张图变成多张子图来满足你想要多张图的需求。

    所以你应该不再想创建多张图了。

  • 如果你还是坚持的话………….那你自己去找其他资料吧,里面有很多坑。

5 Why graphs?

  1. 节省计算。只去计算那些你想要求值的子图。
  2. 分解计算,以便可以实现自动微分。
  3. 促进分布式计算,将计算过程分布在 CPUGPUTPU或者你想要的其他设备。
  4. 许多常见的机器学习模型都是可以看成有向图结构的。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值