tensorflow=tensor+flow
tensor(张量)意味着N维数组,flow(流)意味着基于数据流图计算
tensorflow数据流图一般包括张量(tensor),算子(operation),会话(session),变量(variable),占位符(placeholder)和图(graph)组成,下面按照以上顺序介绍。
1. 张量
张量:零阶张量为标量,也就是一个数值;一阶张量为向量,如:[1,2,3];二阶张量为矩阵,如[[1,2,3],[4,5,6]]。
张量中许多表达形式和numpy数据集类似,tf.float32,tf.flaot64,tf.int16等
2. 算子
对张量进行计算叫算子,它是对张量执行运算的节点,下面展示一些常用的类型,会在接下来的代码中出现:
算子类型 | 示例 |
---|---|
数值计算 | add,sub,multiply,equal,log |
多维数组运算 | slice,constant,shape,rank |
状态管理 | variable,assign |
矩阵运算 | matmul |
神经网络 | softmax,sigmoid,relu,maxpool |
3.会话(session)
在tensorflow程序中,Session对象的创建不需要任何参数,如:
import tensorflow as tf
sess=tf.Session()
创建Session对象后,需要使用run()来运行和计算张量对象,sess.run()中有四个参数,其中fetches是必选,其余为可选
sess.run(fetches,feet_dict=None,options=None,run_metadata=None)
3.1 fetches参数
fetches可以接受图中用户想要执行的元素。如对象是tensor,则输出为一个数组,对象为op,则输出运算结果。
import tensorflow as tf
a=tf.add(5,6)
b=tf.multiply(5,6)
with tf.Session()as sess:
##计算5+6,输出11
print(sess.run(a))
##计算5*6,输出30
print(sess.run(b))
##将上面两个式合并输出
print(sess.run([a,b]))
3.2 feed_dict参数
feed_dict可以覆盖图中tensor值。feed_dict的作用是将一个变量赋值给运算中的参数,举例便可一目了然。
import tensorflow as tf
a=tf.add(5,5)
b=tf.multiply(a,10)
with tf.Session()as sess:
##第一个输出为100,先计算a=5+5,再将a传递给b,计算结果为100
print(sess.run(b))
##第二个输出为50,feed_dict改变了a的值,把5传递给a,所以输出50
print(sess.run(b,feed_dict={a:5}))
feed_dict在神经网络应用非常广泛,与站位符placeholder配合使用,在接下来会继续介绍。
综上:session会话就是执行之前声明的操作和运算,计算其结果。feet_dict就是改变变量的值,将一个新的值赋给变量
4.常量+变量
常量:
tf.constant(value, dtype=None, shape=None, name="Const", verify_shape=False)
1.value:常量值,要与dtype保持一致
2.dtype:返回tensor的类型
3.shape:返回tensor形状
4.name:tensor的名字
5.verify_shape:布尔值,用于验证值的形状
例子:
import tensorflow as tf
a=tf.constant(2,name='a')
b=tf.constant(3,name='b')
with tf.Session()as sess:
##输出2,tensor命名为a
print(sess.run(a))
##输出为3
print(sess.run(b))
变量:
tf.Variable()函数中参数如下所示:
tf.Variable(initial_value=None, trainable=True, collections=None,
validate_shape=True, caching_device=None, name=None,variable_def=None,
dtype=None, expected_shape=None, import_scope=None, constraint=None)
上述代码中只有一些参数比较常见:
1.initial_value:变量初始值
2. trainable:如果设置为True,则变量可被优化器类自动修改,相反则只能手工修改,默认值为True
3. validate_shape:如果是False,允许变量被一个形状未知的值初始化,默认是True,表示必须知道形状
4. name:变量名字
5. dtype:初始化类型;
注:在计算前需要初始化所有变量Variable,不然系统会报错。(变量在卷积神经网络中广泛使用,设置权重和偏置)
sess.run(tf.global_variable_inittialier())
例子如下:
import tensorflow as tf
a=tf.Variable(2,name='a')
b=tf.Variable(3,name='b')
c=tf.add(a,b)
with tf.Session()as sess:
sess.run(tf.global_variables_initializer())
print(sess.run(c))
5.占位符(placeholder)
占位符的作用可以理解为先占个位置,不知道具体值,只知道类型和形状等信息,先把这些信息填进去占个位置,后续使用feed来填数据。
使用sess.run()中feed_dict把数据喂给变量。
tf.placeholder(dtype, shape=None, name=None)
1.dtype:将要被feed的元素类
2.shape:将要被feed的tensor的形状,若不指定,可以进任何形状tensor
import tensorflow as tf
import numpy as np
x=tf.placeholder(tf.float32,[3,2])
y=tf.reshape(x,[2,3])
z=tf.matmul(x,y)
with tf.Session()as sess:
a=np.random.rand(3,2)
##将a的值喂给x
print(sess.run(z,feed_dict={x:a}))
综上为tensorflow的基础知识,为卷积神经网络做铺垫。主要使用变量,占位符以及session会话。