零基础入门机器学习-tensorflow(三)

上一篇《零基础入门机器学习-tensorflow(二)》介绍了Python的基本使用,现在就用Python来实际操作学习一下tensorflow吧。

什么是tensorflow?

TensorFlow™ 是一个采用数据流图(data flow graphs),用于数值计算的开源软件库。其用途不仅限于机器学习,只是这种结构非常适合用于机器学习,所以我们现在说到机器学习,大概第一个就会提到tensorflow。

第一个tensorflow程序 — Hello world!

先看下代码:

# 引入tensorflow库
import tensorflow as tf

# 创建一个操作(常量)
a = tf.constant('Hello world!')

# 启动会话(Session)
sess = tf.Session()

# 运行Graph
print(sess.run(a))

# 关闭会话
sess.close()

代码头部先引入tensorflow库,然后创建了一个常量a,稍后我会介绍在tensorflow中创建常量或变量的方法。

与传统编程方式不同的是,在tensorflow中真正运行代码的部分放置在会话(Session)中,虽然在会话前定义了常量a,但是并没有真正去运行,所以需要在Session中显式的通过Session.run去运行一下,比如上述代码的print(sess.run(a))。会话结束后使用Session.close()关闭。以上是一个完整的tensorflow程序,再复杂的tensorflow程序结构也是如此。

1. 常量定义

# 引入tensorflow库
import tensorflow as tf

# 创建常量
a = tf.constant("这是字符串")
b = tf.constant(4, dtype=tf.int32)
c = tf.constant(0.12, dtype=tf.float32)
d = tf.constant([1, 2, 3, 4], dtype=tf.int32)

with tf.Session() as sess:
    print(sess.run(a))
    print(sess.run(b))
    print(sess.run(c))
    print(sess.run(d))

上面的例子中,创建了4个常量,第一个常量a是字符串,在定义时没有定义类型,系统会自动分配为字符串类型;第2、3个常量分别是整型和浮点型,在tensorflow中使用dtype定义类型时最好统一使用tensorflow的数据类型;第4种常量是一个一维数组,也称为张量。

在这个例子中,还看到了使用会话的另一种方法,使用效果是完全一样的。

2. 变量定义

# 引入tensorflow库
import tensorflow as tf

# 创建变量
a = tf.Variable("这是一个变量")
b = tf.Variable(6, tf.int32)

# 初始化变量
init = tf.initialize_all_variables()

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

创建变量的方法和常量类似,区别在于,使用变量前需要初始化,上例中的init即初始化过程。

3. placeholder

# 引入tensorflow库
import tensorflow as tf

# 创建placeholer
a=tf.placeholder(tf.float32)
b=tf.placeholder(tf.float32)

c=tf.add(a,b)

with tf.Session() as sess:
    print(sess.run(c, feed_dict={a:10, b:5}))

这个例子计算a+b的结果,其中a和b是2个placeholder,在定义时仅指定了数据类型,并没有赋值,placeholder在计算时才会赋值,未计算前只是占位。

feed_dict={a:10, b:5} 是为placeholder赋值的方法,因为c是a+b的结果,为了打印c,需要先为a和b赋值,这种使用方法在tensorflow中非常常见。

图与会话

《零基础入门机器学习-tensorflow(三)》 《零基础入门机器学习-tensorflow(三)》

这是一张简化的数据流图,可以看到,其中蓝色圆点是数据,好比上例中的a和b,蓝色带箭头的线是数据流动的方向,绿色部分是运算处理,所有这些数据、流和运算模块组成了一张类似流程图的图形,对应上例,就是在会话前的所有定义工作,在定义过程中,所有数据均不参与运算,仅仅是把图画好,为后续会话提供计算素材。

现在来看会话就比较好理解了,会话就是让图运行起来,以得到最后的结果。下面是一张真实的tensorflow数据流图:

《零基础入门机器学习-tensorflow(三)》 《零基础入门机器学习-tensorflow(三)》

什么是tensor?

张量(tensor)是所有深度学习框架中最核心的组件,因为tensorflow中几乎所有的所有运算和优化算法都是基于张量进行的。

1. 张量的阶

在TensorFlow中,张量的维数来被描述为阶,但是张量的阶和矩阵的阶并不是同一个概念.张量的阶(有时是关于如顺序或度数或者是n维)是张量维数的一个数量描述。

《零基础入门机器学习-tensorflow(三)》 《零基础入门机器学习-tensorflow(三)》

经常用到的矩阵就是一种2阶张量,也是tensorflow中运用最多的一种张量,下面就是一个2阶张量的定义:

M = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]

2. 张量的形状

张量可以用我们所说的形状来描述:用列表(或元祖)来描述我们的张量的每个维度的大小,例如:

  • 一个 n 维度的张量可以表示为:(D_0, D_1, D_2, …, D_n-1)
  • 一个 * W x H * 大小的张量(一般我们成为矩阵):(W, H)
  • 一个尺度是 W 的张量(一般我们称之为向量):(W, )
  • 一个简单的标量(或者与之等价的):()或者(1, )
# 引入tensorflow库
import tensorflow as tf

# 创建张量
my_tensor = tf.constant(0., shape=[2,3,5])

with tf.Session() as sess:
    print(sess.run(my_tensor))

这个例子中定义了一个3阶张量,3个维度包含的元素分别是2、3、5,最后打印出来如下:

[[[0. 0. 0. 0. 0.]
 [0. 0. 0. 0. 0.]
 [0. 0. 0. 0. 0.]]

[[0. 0. 0. 0. 0.]
 [0. 0. 0. 0. 0.]
 [0. 0. 0. 0. 0.]]]

数字极客-学知识,做最酷的事!www.digeek.tech《零基础入门机器学习-tensorflow(三)》

    原文作者:Bruce
    原文地址: https://zhuanlan.zhihu.com/p/35502589
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞