本文个人博客地址: tensorflow基本概念
概念 | 描述 |
---|---|
编程模型 | 类数据流的模型 |
语言 | Python C++ |
部署 | code once,run ererywhere |
计算资源 | cpu,gpu |
分布式处理 | 本地实现,分布式实现 |
数学表达式 | 数学图表达式,自动分化 |
优化 | 自动消除,kernel 优化,通信优化,支持模式,数据并行 |
import tensorflow as tf
b = tf.Variable(tf.zeros([100])) # 100维的向量,都初始化为0
w = tf.Variable(tf.random_uniform([784,100],-1,1)) # 784x100的矩阵
x = tf.placeholder(name="x") # 输入的占位符placeholder
relu = tf.nn.relu(tf.matmul(w,x)+b) # Relu(Wx+b)
C =[...] # 使用relu的一个函数计算代价
import tensorflow as tf
import numpy as np
# 创建100个numpy的 x,y 假数据点,y = x*0.1+0.3
x_data = np.random.rand(100).astype("float32")
y_data = x_data*0.1+0.3
# 找出计算 y_data =W*x_data+b的w和b的值,虽然我们知道w=0.1,b=0.3,但是tensorflow会找到并计算出来
w = tf.Variable(tf.random_uniform)
要使用tensorflow的话,你需要理解以下概念:
tensorflow的概览
构建阶段
执行阶段
构建图
默认图
将节点加入此图的操作构建者
import tensorflow as tf
# 创建一个产生1x2的矩阵的常量操作,操作被作为节点加入到默认图
# 构建者的返回值代表了常量操作的输出
matrix1 = tf.constant([[3,3.]])
# 创建另外一个产生 2x1矩阵的常量操作
matrix2 = tf.constant([[2.0],[2.]])
有三个节点:两个constant操作(ops)以及一个matmul操作
# 创建一个Matmul操作,将 matrix1和matrix2作为输入
# 返回值,‘product’,代表了矩阵相乘的结果
product = tf.matmul(matrix1,matrix2)
在会话Session中运行图
# 运行默认图
sess = tf.Session()
# 要运行matmul操作,我们调用了session的‘run()’方法,传入'producr'代表了matmul操作的输出。这即回调了matmul操作的输出结果
# 操作的输出以一个numpy的'ndarray'对象返回'result'
result = sess.run(product)
print result
# ==>[[12.]]
#关闭会话
sess.close()
with tf.Session() as sess:
result = sess.run([product])
print result
GPU的使用
# 进入一个交互的Tensorflow Session
import tensorflow as tf
sess = tf.InteractiveSession()
x = tf.Variable([1.0,2.0])
y = tf.constant([3.0,3.0])
#使用'x'的initializer的 run() 方法初始化
x.initializer.run()
# 添加一个操作从'x'中抽取'a',执行并打印结果
sub = tf.sub(x,a)
print sub.eval()
# ==>[-2,-1.]
# 关闭session
sess.close()
rank(秩)
rank | 数学实体 | python示例 |
---|---|---|
0 | Scalar(大小) | s =483 |
1 | Vector(大小和方向) | v=[1.1,2.2,3.3] |
2 | Matrix(数据表) | m=[[1,2,3],[4,5,6],[7,8,9]] |
3 | 3-Tensor(立方(cube)的数量) | t=[[[2],[4],[6],[8]],[[10],[12]]] |
n | n-Tensor | 同上 |
shape
Rank | Shape | 维数 | 示例 |
---|---|---|---|
0 | [] | 0-D | 一个0-D张量,一个标量 |
1 | [D0] | 1-D | 一个1-D张量,shape是[5] |
2 | [D0,D1] | 2-D | 一个2-D张量,shape是[3,4] |
3 | [D0,D1,D2] | 3-D | 一个3-D张量,shape[1,4,3] |
n | [D0,D1,D2,…Dn] | n-D | 一个n-D张量,shape是[D0,D1,…Dn] |
数据类型
Data type | python类型 | 描述 |
---|---|---|
DT_FLOAT | tf.float32 | 32位浮点类型 |
DT_DOUBLE | tf.float64 | 64位浮点类型 |
DT_INT64 | tf.int64 | 64位有符号整型 |
DT_INT32 | tf.int32 | 32位有符号整型 |
DT_INT16 | tf.int16 | 16位有符号整型 |
DT_INt8 | tf.int8 | 8位有符号整型 |
DT_UINT | tf.unit8 | 8位无符号整型 |
DT_STRING | tf.string | 变量长度的字节数组,Tensor每个元素是一个字节数组 |
DT_BOOL | tf.bool | Boolean |
DT_COMPLEX64 | tf.complex64 | 由两个32位浮点数组成的复数,实数和大小部分 |
DT_QINT32 | tf.qint32 | 量化操作中32位有符号整型 |
DT_QINT8 | tf.qint8 | 量化操作中8位有符号整型 |
DT_QUINT8 | tf.quint8 | 量化操作中8位无符号整型 |
变量的创建、初始化、存储和载入
# 创建两个变量
weight = tf.Variable(tf.random_normal([784,200],stddev=0.35),name ="weights")
biases = tf.Variable(tf.zeros([200]),name ="biases")
# 添加一个操作来初始化变量
init_op = tf.initialize_all_variables()
# 过后,执行model
with tf.Session() as sess:
#运行初始化操作
sess.run(init_op)
# 创建一些变量
v1 = tf.Variables(...,name ="v1")
v2 = tf.Variables(...,name="v2")
...
#添加一个操作来初始化变量
init_op = tf.initialize_all_variables()
# 添加操作来保存和恢复所有变量
saver = tf.train.Saver()
# 然后,运行模型,初始化变量,做一些操作,保存变量到磁盘中
with tf.Session() as sess:
sess.run(init_op)
# 对模型做一些操作
.....
#存储变量到磁盘中
save_path = saver.save(sess,"/tmp/model.ckpt")
print ("Model saved in file: %s"%save_path)
* 恢复*
with tf.Session() as sess:
# 从磁盘中恢复变量
saver.restore(sess,"/tmp/model.ckpt")
print ("Model restored")
# 做一些操作
在 * tf.train.Saver()*中没有参数
存储和恢复变量的子集
向tf.train.Saver()构造方法中传入一个Python词典:keys
# 创建一些变量
v1 = tf.Variables(...,name ="v1")
v2 = tf.Variables(...,name ="v2")
# 添加操作存储和恢复变量 v2,使用名字 "my_v2"
saver = tf.train.Saver({"my_v2":v2})
# 使用saver对象
...
# 创建一个变量,初始化为标量0
state = tf.Variables(0,name="Counter")
# 创建一个操作来给"state"加1
one = tf.constant(1)
new_value = tf.add(state,one)
update = tf.assign(state,new_value)
# 在图被运行,变量必须是通过运行一个"init"操作被初始化。
# 我们首先要将"init"操作加入到图中
init_op = tf.initialize_all_variables()
# 运行图,和操作
with tf.Session() as sess:
#运行 'init'操作
sess.run(init_op)
# 打印'state'的初始化值
print (sess.run(state))
# 运行更新'state'的操作,并打印'state'
for _ in range(3):
sess.run(update)
print (sess.run(state))
# 输出
#0
#1
#2
#3
input1 = tf.constant(3.0)
input2 = tf.constant(2.0)
input3 = tf.constant(5.0)
intermed = tf.add(input2,input3)
mul = tf.mul(input1,intermed)
with tf.Session() as sess:
result = sess.run([mul,intermed])
print (result)
# 输出
# [array([21.],dtype = float32),array([7.],dtype = float32)]
input1 = tf.placeholder(tf.float32)
input2 =tf.placeholder(tf.float32)
output = tf.mul(input1,input2)
with tf.Session() as sess:
print (sess.run([output],feed_dict = {input1:[7.],input2:[2.]}))
#输出
#[array([14.],dtype=float32)]
类别 | 示例 |
---|---|
逐元素数学运算 | Add,Sub,Mul,Div,Exp,Log,Greater,Less,Equal… |
数组操作 | Concat,Slice,Split,Constant,Rank,Shape,Shuffle.. |
矩阵运算 | MatMul,MatrixInverse,MatrixDeterminant… |
状态操作 | Variable,Assign,AssignAdd… |
神经元构建块 | SoftMax,Sigmoid,ReLU,Convolution2D,MaxPool… |
检查点操作 | Save,Restore |
队列和同步操作 | Enqueue,Dequeue,MutexAcquire,MutexRelease,… |
控制流操作 | Merge,Switch,Enter,Leave,NextIteration |