zoukankan      html  css  js  c++  java
  • Tensorflow 10分钟快速上手

    Tensorflow 快速上手

    系统版本 : Ubuntu 16.04LTS
    Python版本 : 3.6.1
    Tensorflow 版本 : 1.0.1

    本文依据教程 TensorFlow Tutorial: 10 minutes Practical TensorFlow lesson for quick learners的内容编写…
    实现了教程中的所有指令,内容进行了不完整的翻译,仅供参考

    Part 1 Basics of Tensorflow

    Tensorflow 中,数据 通过 图(graph) 流动 (flow) .
    数据 用 n 维数组表示,叫做 Tensors
    图 由 数据(Tensors) 和 数学运算 组成

    • 图的节点(nodes)代表 数学运算
    • 图的边缘(edges)代表 各种数学运算中流动的数据(tensors)
      Tensorflow 与 一般编程语言很大不同的一点是:
    • 在Tensorflow 中,要先将整个程序结构构建出来,也就是将 graph 设计好,在这个过程中,所有变量都没有赋值
    • 完整的 graph 设计好后,需要在 session 中运行,在这个运行过程中,各个变量才会被赋值

    在Python编程环境下,首先,导入 Tensorflow,如下

    import tensorflow as tf

    (i)Graph in Tensorflow

    Graph 是 Tensorflow 的骨干结构,所有的 计算/操作/变量 都离不开 graph.
    Tensorflow 提供的默认 graph 可以通过以下命令获得

    graph = tf.get_default_graph()

    运行以下指令可以 查看并输出所有 图 中的操作(operations)

    for op in graph.get_operations():
        print(op.name)

    会发现输出为空,在之后添加了 操作 内容后,再次运行上述命令,就可以查看到 图 中的所有操作.
    同时创建多个 图 也是可以的,当下暂且不提

    (ii)Tensorflow session

    Graph 用来定义 操作 ,而所有 操作 只有在 session 中才能运行
    Graph 和 session 之间是相互独立的
    如果说 graph 是建筑的设计图, session 就是建筑的施工工地
    设计好的 graph 中没有变量,当我们在 session 中运行 graph 时,才会给予有值的变量
    创建session两种方法:

    • [1]
    sess=tf.Session()
    ... your code ...
    ... your code ...
    sess.close()

    每次 open 一个 session 都一定要有对应的 close

    • [2]
    with tf.Session() as sess:
        sess.run(f)

    使用 with block 更加方便,每次 with clock 运行完后都会自动关闭 session ,推荐这种写法

    (iii)Tensors in Tensorflow

    a)常量

    定义方式如下:

    a = tf.constant(1.0)
    print(a)
    Tensor("Const:0", shape=(), dtype=float32)
    

    显示常量 a ,结果如上.可以发现,与一般语言不同,在 session 外是无法显示出常量的值的.
    在 session 中运行一下显示指令,可以发现常量值就可以直接输出来了

    with tf.Session() as sess:
        print(sess.run(a))
    1.0
    

    b)变量

    变量定义方式如下:

    b = tf.Variable(2.0,name ="test.var")
    b
    <tensorflow.python.ops.variables.Variable at 0x7f1a8189eac8>
    

    变量没有一个固定的取值,需要 初始化 操作.
    每个变量分别初始化效率很低,Tensorflow 提供了同时初始化所有变量的指令
    在version0.12 以后的版本,初始化指令如下:

    init_op = tf.global_variables_initializer()
    with tf.Session() as sess:
        sess.run(init_op)
        print(sess.run(b))
    2.0
    

    session 中运行,初始化并输出变量,可以看到 定义的变量 b ,被赋值为2 .

    c)Placeholders

    Placeholder 是 等待被 初始化 或 fed 的 tensors ,
    只有当 代码 真正在 session 中被运行时,数据才会被 feed 给 placeholders,
    提供给 placeholders 的 数据叫做 feed_dict
    Feed_dict are key value pairs for holding data

    a = tf.placeholder("float")
    b = tf.placeholder("float")
    y = tf.multiply(a,b)
    feed_dict={a:2,b:3}
    with tf.Session() as sess:
        print(sess.run(y,feed_dict))
    6.0
    

    (iv) Device in TensorFlow

    Tensorflow 支持 cpu gpu gpu群 ,我们可以选择代码运行的计算硬件
    整个 Tensorflow 的工作结构如下图所示

    Part 2 Tensorflow tutorial with simple example

    1.创建随机正态分布:

    w = tf.Variable(tf.random_normal([784,10],stddev = 0.01))

    2.均值 reduce_mean

    b = tf.Variable([20,30,40,45,3,5,67],name = 'b')
    with tf.Session() as sess:
        sess.run(tf.global_variables_initializer())
        print(sess.run(tf.reduce_mean(b)))
    
    30
    

    3.Argmax

    a = [[0.1,0.4,0.3],[10,20,30]]
    b = tf.Variable(a,name = 'a')
    with tf.Session() as sess:
        sess.run(tf.global_variables_initializer())
        print(sess.run(tf.argmax(b,1)))
    [1 2]
    

    4.线性回归练习

    import numpy as np      #之前已经导入了tensorflow

    a) 训练数据生成

    trainX 在 -1 到 1 之间取值
    trainY 是 trainX 的三倍 加上一个随机干扰值

    trainX = np.linspace(-1,1,101)
    trainY = 3 * trainX + np.random.randn(*trainX.shape) * 0.33

    b) placeholders 定义

    X = tf.placeholder("float")
    Y = tf.placeholder("float")

    c)建模(Modeling)

    线性回归模型 是 y=wx 我们需要通过模型计算出 w
    初始化 w 为 0
    cost function 定义为 (Y-y_model)的平方
    Tensorflow 提供了很多 optimizer ,在每个循环更新梯度,最小化cost
    我们定义的训练操作是 使用 GradientDescentOptimizer ,以 0.01 的学习率 最小化 cost
    在循环中运行训练操作

    w = tf.Variable(0.0, name="weights")
    y_model = tf.multiply(X, w)
    
    cost = (tf.pow(Y-y_model, 2))
    train_op = tf.train.GradientDescentOptimizer(0.01).minimize(cost)

    d)训练(Training)

    现在,我们定义好了 graph ,但我们没进行任何运算
    在创建 session 前,我们先定义好 初始化所有变量的指令 init
    在 session 中, 首先运行 init ,完成初始化
    然后,进行循环,在循环中,运行 graph 中定义好的训练操作 train_op
    最终,输出得到的 w =3.03938,与预期相符
    注意: session 结束后,所有的变量又会恢复没有值的状态

    init= tf.global_variables_initializer()
    with tf.Session() as sess:
        sess.run(init)
        for i in range(100):
            for (x, y) in zip(trainX, trainY):
                sess.run(train_op, feed_dict={X: x, Y: y})
        print(sess.run(w))
    3.03938
    
  • 相关阅读:
    Named Formats!
    基于vue的自定义日历组件
    vue使用html2canvas实现移动端H5页面截图
    vue使用domtoimage实现移动端H5页面截图
    swiper5切换页面数据动态加载
    H5 jq+canvas实现pc写字板功能
    vue多语言转换的几种方法
    echarts折线图单组数据配置
    H5 canvas的使用(二):移动端手势密码
    svn的仓库设置钩子自动更新
  • 原文地址:https://www.cnblogs.com/blogofnickchen/p/7221637.html
Copyright © 2011-2022 走看看