共计 7063 个字符,预计需要花费 18 分钟才能阅读完成。
Tensorflow 开发环境配置及其基本概念
- 1.1. 安装 Tensorflow 开发环境
- 1.1.1. 安装 pycharm
- 1.1.2. 安装 Python3.6
- 1.1.3. 安装 Tensorflow
- 1.2. Tensorflow 基本概念
- 1.2.1. 声明 Tensor
- 1.2.2. 变量和占位符
- 1.2.2.1. 变量
- 1.2.2.2. 占位符
- 1.2.3. 计算图(The Computational Graph)
- 1.2.4. 矩阵操作
- 1.2.5. 声明运算符
1.1. 安装 Tensorflow 开发环境
1.1.1. 安装 pycharm
Pycharm 目前是机器学习中最普遍,最收欢迎的工具之一,它强大,具有亲和力,正如它的名字一样魅力无穷。Pycharm 官网上有专业版和社区版,社区版是免费的,仅做数据科学方面的研究的话社区版也足够开发使用了,Windows 系统的下载地址为:https://www.jetbrains.com/pycharm/download/#section=windows,下载完成后就可以安装了,安装无需做特别的设置,默认安装就可以了。
1.1.2. 安装 python3.6
tensorflow 需要运行在 python3.4 及以上版本,在这个问题上我就出错过一次。之前我电脑上的 python 版本为 2.7,一开始我没有注意到这种情况,我就直接在 pycharm 中打开 File > Default Setting > Project Interpreter,查找 tensorflow 然后点击安装,结果报错了(如图 1 -1,1- 2 所示),错误的提示信息也让人摸不着头脑,查阅了一些资料猛的才发现是我的 python 版本出了问题,于是毫不犹豫的去下载 python3.6(目前已更新到 3.6.2 版本了),下载地址为官网:https://www.python.org/getit/,注意 python3.6 版本已经不支持 Win32 位的系统了,只有 Win64 位的安装包,下载如图 1 - 3 所示的红色框中的安装包。
图 1 -1
图 1 -2
图 1 -3
下载完成后开始安装,在正式安装之前一定要记得勾选“Add Python 3.6 to PATH”,如图 1 - 4 所示,意思是把 python 的安装路径加入到系统的环境变量中。接着可根据自己需要选择默认安装或自定义安装,不管怎样都要记住安装路径,方便后续相关设置。
图 1 -4
图 1 -5
图 1 - 5 所示的安装成功后,我们再来验证一下是否真正安装成功。打开 cmd,输入 py,回车,可以看到出现了 python3.6 版本的相关信息(图 1 - 6 所示),证明安装成功。接着查看一下 python 的安装路径是否已经加入到了系统的环境变量中,打开控制面板 > 所有控制面板项 > 系统 > 高级系统设置 > 高级 > 环境变量,可以看到 python 的安装路径已经加入到了系统环境变量中,图 1 - 7 所示。如果没有路径信息,可能是安装 python3.6 之前忘记勾选“Add Python 3.6 to PATH”这一步,这个时候就只能自己手动添加了,把你之前记住的安装路径在新建环境变量里面填写清楚就可以了。
图 1 -6
图 1 -7
1.1.3. 安装 Tensorflow
Pycharm,以及 Python3.6 都安装完毕,接着打开 Pycharm,在 File > Default Setting > Project Interpreter 中点击设置图片按钮,选择 Create VirtualEnv,如图 1 - 8 所示,表示新建一个虚拟环境。建立虚拟环境的目的是为了方便以后便捷、快速的安装各种库或插件,以及以后的程序执行等都在该虚拟环境下运行。点击“Create VirtualEnv”后跳出新建虚拟环境对话框,图 1 - 9 所示,在“Name”处为虚拟环境命名,“Location”是指虚拟环境的安装路径,注意不要与 python3.6 的安装目录相同,“Base interpreter”处选择 python3.6 的安装目录下的 python.exe 文件,设置完成后,Pycharm 会为你新建好一个 3.6 版本的虚拟环境,如图 1 -10 所示。
图 1 -8
图 1 -9
图 1 -10
初始建立好的虚拟环境已经有 pip 工具了,接着还是按照最初的步骤安装 Tensorflow。点击图 1 -10 上绿色的“+”号键,表示新安装一个库或插件,然后在出现的搜索框中搜索 tensorflow,找到后点击“Install Package”就好了,图 1 -11 所示,而不需要你亲自码代码 pip install tensorflow
,真的是方面快捷。
图 1 -11
提示安装完成后,我们最后来验证是否真正安装成功,File > New Project,新建一个名字为 tensorflow 的项目,图 1 -12,注意“Interpreter”处已经有了刚刚建立的虚拟环境,在该虚拟环境下新建一个项目,并开展相关的数据挖掘工作就是我们以后将要做的事情了。接着在该项目下新建一个 test.py 的文件,输入import tensorflow
,没有报错的话证明 Tensorflow 安装成功。
图 1 -12
至此,我们的工具,环境都已经安装,配置好了,下面的章节我们将了解 Tensorflow 的概念和用法,开始我们的数据科学之旅。
1.2. Tensorflow 基本概念
1.2.1. 声明 Tensor
在 Tensorflow 中,tensor 是数据的核心单元,也可以称作向量或多维向量,一个 tensor 组成了一个任意维数的数组的初始值模型,而一个 tensor 的秩(rank)是就是它的维数,这里有一些例子。
3 # 秩为 0 的 tensor,是一个标量,shape[]
[1., 2., 3.] # 秩为 1 的 tensor,是一个向量,shape[3]
[1., 2., 3.], [4., 5., 6.]] # 秩为 2 的 tensor, 是一个矩阵,shape[2,3]
[[[1., 2., 3.]], [[7., 8., 9.]]] # 秩为 3 的 tensor,shape[2, 1, 3]
如何声明一个 tensor?请参见如下代码。
import tensorflow as tf
# 声明固定 tensor
zero_tsr = tf.zeros([2, 3]) # 声明一个 2 行 3 列矩阵,矩阵元素全为 0
filled_tsr = tf.fill([4, 3], 42) # 声明一个 4 行 3 列的矩阵,矩阵元素全部为 42
constant_tsr = tf.constant([1, 2, 3]) # 声明一个常量,行向量[1 2 3]
# 声明连续 tensor
linear_tsr = tf.range(start=6, limit=15, delta=3) #[6, 9, 12]
# 声明随机 tensor
randnorm_tsr = tf.random_normal([2, 3], mean=0.0, stddev=1.0) #[[0.68031377 1.2489816 -1.50686061], [-1.37892687 -1.04466891 -1.21666121]]
注意,tf.constant()
函数可以用来把一个值传播给一个数组,比如通过这样的声明 tf.constant(42, [4, 3])
来模拟 tf.fill([4, 3], 42)
的行为。
1.2.2. 变量和占位符
1.2.2.1. 变量
变量是算法的参数,Tensorflow 追踪这些变量并在算法中优化他们。Variable()
函数用来声明一个变量,并把一个 tensor 作为输入,同时输出一个变量。使用该函数仅仅是声明了变量,我们还需要初始化变量,以下代码是关于如果声明和初始化一个变量的例子。
my_var = tf.Variable(tf.zeros([2,3]))
init = tf.global_variables_initializer()
print(sess.run(init))
print(sess.run(my_var))
---result
[[0. 0. 0.]
[0. 0. 0.]]
这里请注意一个问题,当你调用 tf.constant()
函数的时候,声明的常量就已经被初始化了,它们的值永远不变。而相反,当你调用 tf.Variable()
函数的时候,变量并没有被初始化,为了初始化所有的变量,你必须要运行一次如下代码:
init = tf.global_variables_initializer()
sess.run(init)
#init 是初始化所有的全局变量,在没有调用 sess.run()之前,变量都没有被初始化。
1.2.2.2. 占位符
占位符是一个对象,你可以对它赋予不同类型和维度的数据,它依赖于计算图的结果,比如一个计算的期望输出。占位符犹如它的名字一样仅仅为要注入到计算图中的数据占据一个位置。声明占位符用 tf.placeholder()
函数,以下是一个例子:
x = tf.placeholder(tf.float32, shape=[2,2])
y = tf.identity(x)
x_vals = np.random.rand(2,2)
sess.run(y, feed_dict={x: x_vals})
---result
[[0.11068643 0.57449234]
[0.26858184 0.83333433]]
1.2.3. 计算图(The Computational Graph)
Tensorflow 是一个通过计算图的形式来表述计算的编程系统,计算图也叫数据流图,可以把计算图看做是一种有向图,Tensorflow 中的每一个计算都是计算图上的一个节点,而节点之间的边描述了计算之间的依赖关系。Tensorflow 在创建 Tensor 的同时,并没有把任何值都加入到计算图中。
看如下代码清单:
import tensorflow as tf
node1 = tf.constant(3.0, dtype=tf.float32)
node2 = tf.constant(4.0) # also tf.float32 implicitly
print(node1, node2)
---result
Tensor("Const:0", shape=(), dtype=float32) Tensor("Const_1:0", shape=(), dtype=float32)
可以看到输出的并不是我们所期望的 3.0 和 4.0 数字,而是一个 node
, 通过sesson
可计算出 node
的实际值。
sess = tf.Session()
print(sess.run([node1, node2]))
---result
[3.0, 4.0]
我们还可以通过操作符构建各种复杂的Tesnor Nodes
node3 = tf.add(node1, node2)
print("node3:", node3)
print("sess.run(node3):", sess.run(node3))
---result
node3: Tensor("Add:0", shape=(), dtype=float32)
sess.run(node3): 7.0
上面的计算我们都是建立在静态的数据上,Tensorflow 还提供了 palceholder
用于后期输入值的一个占位符
a = tf.placeholder(tf.float32)
b = tf.placeholder(tf.float32)
adder_node = a + b # + provides a shortcut for tf.add(a, b)
print(sess.run(adder_node, {a: 3, b: 4.5}))
print(sess.run(adder_node, {a: [1, 3], b: [2, 4]}))
---result
7.5
[3. 7.]
还可以再上面的计算途中加入更多操作,见下代码清单:
add_and_triple = adder_node * 3.
print(sess.run(add_and_triple, {a: 3, b: 4.5}))
---result
22.5
在机器学习中,我们希望看到一个可随意输入的模型,就像上面代码清单一样,为让模型可以训练,我们需要能够修改图获得新的输出。Variables
允许添加可训练参数,如果使用如下代码清单:
W = tf.Variable([.3], dtype=tf.float32)
b = tf.Variable([-.3], dtype=tf.float32)
x = tf.placeholder(tf.float32)
linear_model = W * x + b
init = tf.global_variables_initializer()
sess.run(init)
print(sess.run(linear_model, {x: [1, 2, 3, 4]}))
---result
[0. 0.30000001 0.60000002 0.90000004]
接下来我们将计算图变得更为复杂,代码清单如下:
sess = tf.Session()
my_array = np.array([[1., 3., 5., 7., 9.], [-2., 0., 2., 4., 6.], [-6., -3., 0., 3., 6.]])
x_vals = np.array([my_array, my_array + 1])
x_data = tf.placeholder(tf.float32, shape=(3, 5))
m1 = tf.constant([[1.], [0.], [-1.], [2.], [4.]])
m2 = tf.constant([[2.]])
a1 = tf.constant([[10.]])
prod1 = tf.matmul(x_data, m1)
prod2 = tf.matmul(prod1, m2)
add1 = tf.add(prod2, a1)
for x_val in x_vals:
print(sess.run(add1, feed_dict={x_data: x_val}))
---result
[[102.]
[66.]
[58.]]
[[114.]
[78.]
[70.]]
接下来我们来看下代码如何运行,placeholder 在运行时送入 (feed in) 数据, 从计算图中可以看到,要执行 Add 操作,需要首先执行 prod1,然后执行 prod2, 最后才执行 Add 操作。
1.2.4. 矩阵操作
许多的算法依赖于矩阵的操作,Tensorflow 给我们提供了非常方便,快捷的矩阵运算。
# 生成对角线矩阵
identity_matrix = tf.diag([1.0, 1.0, 1.0])
# 随机填充 2 行 3 列矩阵
A = tf.truncated_normal([2, 3])
# 填充 5 到一个 2 行 3 列矩阵
B = tf.fill([2, 3], 5.0)
# 填充三行两列的随机数矩阵
C = tf.random_uniform([3, 2])
# 将 numpy 的矩阵转换
D = tf.convert_to_tensor(np.array([[1., 2., 3.], [-3., -7., -1.], [0., 5., -2.]]))
sess = tf.Session()
print(sess.run(identity_matrix))
print(sess.run(A))
print(sess.run(B))
print(sess.run(C))
print(sess.run(D))
---result
[[1. 0. 0.]
[0. 1. 0.]
[0. 0. 1.]]
[[0.08475778 -0.81952369 -0.40169609]
[-0.6406377 -0.67895085 -1.13811123]]
[[5. 5. 5.]
[5. 5. 5.]]
[[0.30655277 0.81441486]
[0.68046188 0.64171898]
[0.76518583 0.10888731]]
[[1. 2. 3.]
[-3. -7. -1.]
[0. 5. -2.]]
1.2.5. 声明运算符
Tensor 具有很多标准的运算符,如 add()
,sub()
,mul()
,div()
等,除了这些标准的运算符外,Tensorflow 给我们提供了更多的运算符。以下是一个基础的数学函数列表,所有的这些函数都是按元素操作。
运算符 | 描述 |
---|---|
abs() | 计算一个输入 tensor 的绝对值 |
ceil() | 一个输入 tensor 的顶函数 |
cos() | Cosine 函数 C |
exp() | 底数为 e 的指数函数,指数为输入的 tensor |
floor() | 一个输入 tensor 的底函数 |
inv() | 一个输入 tensor 的倒数函数,(1/x) |
log() | 一个输入 tensor 的自然对数 |
maximum() | 取两个 tensor 中的最大的一个 |
minimum() | 取两个 tensor 中的最小的一个 |
neg() | 对一个 tensor 取负值 |
pow() | 第一个 tensor 是第二个 tensor 的幂 |
round() | 舍入最接近的整数 |
rsqrt() | 计算一个 tensor 的平方根后求倒 |
sign() | 根据 tensor 的符号返回 -1,0,1 中的某个值 |
sin() | Sine 函数 |
sqrt() | 计算一个输入 tensor 的平方根 |
square() | 计算一个输入的 tensor 的平方 |
下面还有一些值得我们了解的函数,这些函数在机器学习中比较常用,Tensorflow 已经包装好了。
运算符 | 描述 |
---|---|
digamma() | 计算 lgamma 函数的导数 |
erf() | 计算 tensor 的高斯误差 |
erfc() | 计算 tensor 的高斯互补误差 |
lbeta() | 计算自然对数的 beta 函数的绝对值 |
lgamma() | 计算自然对数的 gamma 函数的绝对值 |
squared_difference() | 计算两个 tensor 的误差平方 |
本文永久更新链接地址:http://www.linuxidc.com/Linux/2017-09/146742.htm