目录
一、简介
TensorFlow是谷歌基于DistBelief进行研发的第二代人工智能学习系统,其命名来源于本身的运行原理。
Tensor(张量)意味着N维数组,Flow(流)意味着基于数据流图的计算,TensorFlow为张量从流图的一端流动到另一端的计算过程。
TensorFlow是将复杂的数据结构传输至人工智能神经网中进行分析和处理过程的系统。
TensorFlow是开源的,任何人都可以用。
网站:http://playground.tensorflow.org
支持CNN(卷积神经网络)、RNN(循环神经网络)和LSTM(长短期记忆网络)算法,是目前在 Image,NLP 最流行的深度神经网络模型.
二、优点
TensorFlow优点:
- 基于Python,写的很快并且具有可读性。
- 在CPU或GPU系统上的都可运行。
- 代码编译效率较高。
- 社区发展的非常迅速并且活跃。
- 能够生成显示网络拓扑结构和性能的可视化图。
三、原理
TensorFlow原理:
TensorFlow是用数据流图(data flow graphs)技术来进行数值计算的。
数据流图是描述有向图中的数值计算过程。
有向图中,节点通常代表数学运算,边表示节点之间的某种联系,它负责传输多维数据(Tensors)。
四、使用
1、TensorFlow使用
- 使用图(graph)来表示任务
- 在被称之为会话(Session)的上下文(context)中执行图
- 使用tensor表示数据
- 通过变量(Variable)维护状态f(x) = w*x + b
- 使用feed和fetch可以为任意操作(arbitrary operation)赋值或者从其中获取数据。
2、下载
在管理员模式下cmd窗口中执行:
pip install tensorflow
3、第一个 tf 程序
这里需要先安装 Ipython,进入cmd输入
pip3 install Ipython
导入包
#导包
import tensorflow as tf
import numpy as np
from IPython.display import display
常量
#定义常量
a = tf.constant(np.random.randint(0,100,size=(3,4)))
b = tf.constant(3.14)
s = tf.constant('hello world')
display(a,b,s)
Tensor(“Const:0”, shape=(3, 4), dtype=int32)
Tensor(“Const_1:0”, shape=(), dtype=float32)
Tensor(“Const_2:0”, shape=(), dtype=string)
很明显能看出你定义的常量大小和类型。
变量
#定义变量
w = tf.Variable(np.random.randint(0,100,size=(2,3)),
dtype=tf.int8, #数据类型
name='w' #变量命名,可省略
)
print(w)
<tf.Variable ‘w:0’ shape=(2, 3) dtype=int8_ref>
创建会话
sess = tf.Session()
关闭会话
sess.close()
使用会话运行graph
-
一般使用with语句来创建会话,这样就不用手动关闭会话,with语句会自动关闭会话。
-
run()函数可以让代码变得更加简洁,在搭建神经网络中,经历了数据集准备、前向传播过程设计、损失函数及反向传播过程设计等三个过程,形成计算网络,再通过会话tf.Session().run()进行循环优化网络参数。这样可以使得代码变得更加简洁,可以集中处理多个图和会话,明确调用tf.Session().run()可能是一种更加直观的方法。
-
run语法:run(
fetches
,feed_dict
=None,options
=None,run_metadata
=None)
fetches
参数可以是单个图元素(single graph element),也可以是任意嵌套的列表list,元组tuple,名称元组namedtuple,字典dict或包含图元素的OrderedDict。feed_dict
可选参数允许调用者覆盖图中张量的值options
可选参数需要一个[‘RunOptions’]原型。 选项允许控制该特定步骤的行为run_metadata
可选参数需要一个[RunMetadata]原型。 适当时,将在那里收集此步骤的非Tensor输出。- 函数返回值与 ‘ fetches ’ 参数具有相同的形状
- run的参数是字典形式,如果按照顺序传参,可以不写成字典形式
常量
with tf.Session() as sess:
ret = sess.run(fetches=[a,b,s])
print(ret)
[array([[82, 83, 87, 73],
[55, 37, 48, 11],
[54, 58, 4, 50]]), 3.14, b’hello world’]
变量
with tf.Session() as sess:
# 如果要使用变量,需要进行初始化
sess.run(tf.global_variables_initializer())
print(sess.run(w))
[[30 13 41]
[ 8 81 57]]
加减乘除
#加减乘除
a = tf.constant(100,dtype=tf.float16)
b = tf.constant(5,dtype=tf.float16)
#加
c = a + b
d = tf.add(a,b)
#减
e = tf.subtract(a,b)
#乘
f = tf.multiply(a,b)
#除
h = tf.div(a,b)
with tf.Session() as sess:
print(sess.run([a,b,c,d,e,f,h]))
[100.0, 5.0, 105.0, 105.0, 95.0, 500.0, 20.0]
矩阵乘法(叉乘:左列右行一致)
import numpy as np
from IPython.display import display
a = tf.constant(np.random.randint(0,10,size = (2,3)))
b = tf.constant(np.random.<