TensorFlow入门基础:变量的创建和输出

目录


关于TensorFlow

TensorFlow是目前最流行的深度学习框架。它基于Python语言,是集合了神经网络各个算法函数组成的一个工具箱。

2017年2月,TensorFlow的首届开发者峰会在美国加利福尼亚州举行。在会上,谷歌公司正式宣布发布TensorFlow 1.0版本。


TensorFlow的编程模式

编程的模式通常分为命令式编程(imperative style programing)和符号式编程(symbolic style programing)。命令式编程就是直接以命令的形式编写程序,运行后计算机逐条执行。符号式编程则先定义各个变量及它们之间的计算关系,但此时没有任何实际数据,只有把需要运算的输入放进去后,才能在模型中形成数据流,从而形成输出值。TensorFlow采用的就是符号式编程模式。

举个栗子:如果走在路上有人问我食堂怎么走,那我可以直接告诉他:先往前走100米,再左转走50米,再…,然后就到了。
偶尔几个人问那ok,但要是有一个接一个的人来问路,那我选择狗带。这种情况下,最有效率的办法就是在各个路口处设置指示牌。人流从入口进去后,根据自身需要选择下一步怎么走。
如果人群是数据的话,那第一种指路方式就是命令式编程,第二种就是符号式编程。


变量的创建和输出

创建变量

明白了TensorFlow的编程模式后,就可以编写一个简单的程序体会一下这种编程模式了。最后,本文会提供完整的代码,方便有兴趣的朋友自己调试运行。

首先,使用tf.Variable()创建变量:

import tensorflow as tf

# 创建变量
var1 = tf.Variable(2, name="a",dtype=tf.float16)
var2 = tf.Variable(3, name="b",dtype=tf.float16)

创建了两个变量,a=2b=3

定义计算关系

这一步需要确定这两个变量在数据流中的走向,也就是给人群设置指示牌。

# 对变量进行乘运算
y = tf.multiply(var1,var2)

# 对变量进行加运算
z = tf.add(var1,var2)

# 对变量进行减法运算
x = tf.subtract(y,z)

# 改变变量的值
var3 = var1.assign(tf.add(var1,1.0))
var4 = var2.assign_add(1.0)

这一步先定义了变量的加减乘运算关系,最后用assign()assign_add()改变变量的值。

创建会话并输出

之前所做的工作只是建立了一个数据流图,而数据并没有开始流动。好比各个路口的指示牌都竖好了,人群还在门口排队。创建会话(Session)后,数据开始流动,并从而形成输出值。创建会话sess,使用sess.run()输出各个运算节点处的数据值。

with tf.Session() as sess:
    # 变量初始化
    sess.run(tf.global_variables_initializer())
    print('y=%.0f' % sess.run(y))
    print('z=%.0f' % sess.run(z))
    print('x=%.0f' % sess.run(x))
    print('a=%.0f' % sess.run(var1))
    print('b=%.0f' % sess.run(var2))
    print('var3=%.0f' % sess.run(var3))
    print('var4=%.0f' % sess.run(var4))

    # 根据变量名输出变量值
    for var in tf.global_variables():
        if var.name == 'b:0':
            print('找到的变量b的值为%.0f' % sess.run(var))

整个算法的代码至此编写完毕。最后用到了tf.global_variables(),利用这个API可以遍历各个变量的name,从而使我们可以根据name找到我们指定的变量。

详细的计算流程参照下图:
计算流程图

结果及思考

运行代码后的print结果为:

y=6
z=5
x=1
a=2
b=3
var3=3
var4=4
找到的变量b的值为4

这里可以发现,定义计算关系实际上定义了上图中的节点,而sess.run()其实是输出了某个计算节点处的数据流值。

注意,并不是某个变量的值!从输出结果中可以看到,两个b的值不一样。严格来说b=3这种输出方式并不严谨,而应该是Var2=3!从最后一条输出结果可知,程序执行完毕后,保存在名为b的变量中的值为4。

完整代码如下:


import tensorflow as tf

# 创建变量
var1 = tf.Variable(2, name="a",dtype=tf.float16)
var2 = tf.Variable(3, name="b",dtype=tf.float16)

# 对变量进行乘法运算
y = tf.multiply(var1,var2)

# 对变量进行加法运算
z = tf.add(var1,var2)

# 对变量进行减法运算
x = tf.subtract(y,z)

# 改变变量的值
var3 = var1.assign(tf.add(var1,1.0))
var4 = var2.assign_add(1.0)

# 创建会话
with tf.Session() as sess:

    # 变量初始化
    sess.run(tf.global_variables_initializer())

    # 变量输出
    print('y=%.0f' % sess.run(y))
    print('z=%.0f' % sess.run(z))
    print('x=%.0f' % sess.run(x))
    print('a=%.0f' % sess.run(var1))
    print('b=%.0f' % sess.run(var2))
    print('var3=%.0f' % sess.run(var3))
    print('var4=%.0f' % sess.run(var4))

    # 根据变量名输出变量值
    for var in tf.global_variables():
        if var.name == 'b:0':
            print('找到的变量b的值为%.0f' % sess.run(var))

参考资料

  1. https://www.tensorflow.org/api_docs/
  2. https://www.w3cschool.cn/tensorflow_python/tensorflow_python-bm7y28si.html
  3. 《TensorFlow技术解析与实战》——李嘉璇
  4. 其它零碎互联网内容

猜你喜欢

转载自blog.csdn.net/u011317780/article/details/80642745
今日推荐