tensorflow重要概念与常用函数总结

  • 计算图:

tensorflow中所有的计算都会被转化为计算图上的节点,节点之间的边描述了运算之间的依赖关系。tensorflow程序一般都分为定义计算图执行计算两个阶段。不同计算图上的张量和运算都不会共享。

tf.get_default_graph()#获取当前默认的计算图

tf.Graph()#生成新的计算图

g1=tf.Graph()

 

  • 张量:

tensorflow中的所有数据都通过张量的形式来表示,张量可以被简单地理解为多维数组;张量中并没有真正保存数据, 它保存的是如何得到这些数据的计算过程;张量有三个主要属性:名字name、维度shape、类型type

shape=(2,)说明张量是一个长度为2的一维数组,张量的初始化数据类型一定要与张量本身的数据类型一致。

tensorflow中支持14中不同类型:tf.float32、tf.float64、tf.int8、tf.int16、tf.int32、tf.int64、tf.uint8、tf.bool、tf.complex64、tf.complex128

创建一个常数张量

tf.constant(

    value,

    dtype=None,

    shape=None,

    name='Const',

    verify_shape=False

)

第一个值value是必须的,可以是一个数值,也可以是一个列表;第二个参数表示数据类型,一般可以是tf.float32, tf.float64等;第三个参数表示张量的“形状”,即维数以及每一维的大小。如果指定了第三个参数,当第一个参数value是数字时,张量的所有元素都会用该数字填充。

通过eval()函数获取张量的值:sess.run(w.eval())

 

  • 会话:

tensorflow中通过回话Session来执行定义好的运算:

sess=tf.Session()#创建一个会话

sess.run()#计算关心的结果,run()时一个非常重要的函数接口,通过run()可以查看结果、执行操作等

创建上下文管理器来自动管理Session()调用的资源,自动释放避免资源泄露。

 

  • 变量:

tensorflow中通过tf.Variable保存和更新神经网络中的参数,训练开始前一般要为tf.Variable赋予随机初始值。一般使用tf.random_normal()、tf.truncated_normal()等随机函数来设置初始化值

tensorflow重要概念与常用函数总结_第1张图片

例如:

w=tf.Variable(tf.random_normal((2,3),stddev=1,seed=1)

tf.get_variable()与tf.Variable()函数功能相同

w=tf.get_variable(“v”,shape=[1],initializer=tf.constant_initializer(1.0))

w=tf.Variable(tf.constant(1.0,shape=[1],name=”v”))

可以通过常数生成w=tf.Variable(tf.zeros([3]))

 

tensorflow重要概念与常用函数总结_第2张图片

 

定义好参数变量之后,通过tf.global_variables()拿到当前计算图中所有变量的集合,在会话Session中可以调用tf.global_variables_initializer()函数,自动将所有的变量完成初始化

init_op=tf.global_variables_initializer()

变量与变量之间可以通过assign赋值

w1.assign(w2)

 

  • 占位符:

tensorflow提供了placeholder机制用于提供输入数据,placeholder相当于定义了一个数据入口,会话执行时通过placeholder将数据传入计算图。

x=tf.placeholder(tf.float32,shape=(1,2))

第一个参数定义了数据类型,第二个参数shape比较重要,shape=(1,2)表示每次训练送入一个batch的训练量为1个样例,每个样例的维度为2。一般写为shape=(None,k),None表示batch的数量是不固定的,可以在会话中定义,k表示输入数据的维度。

在会话执行时,通过sess.run()的中feed_dict来指定x的取值,feed_dict是一个字典。

sess.run(sess.run(y,feed_dict={x:[[0.7,0.9]]}))

 

  • 激活函数:

任意层的全连接神经网络和单层神经网络表达能力没有区别,可以在加权和的基础上加入激活函数达到去线性化的效果,非线性模型能够解决更为复杂一般的问题,激活函数对神经网络而言非常重要。

常见的非线性激活函数:tf.nn.relu()、tf.sigmoid()、tf.tanh()

tensorflow重要概念与常用函数总结_第3张图片

 

  • 损失函数:

用于描述神经网络的优化效果,训练网络模型的过程就是降低损失函数的过程

交叉熵:用于刻画两个概率分部之间的距离,可以用来判断像个向量的距离。

tensorflow重要概念与常用函数总结_第4张图片

先可以通过softmax回归处理将网络输出变成一个概率分布,如果p(x)、q(x)分别为预测结果、真实标签的分布,交叉熵为:

 

cross_entropy=-tf.reduce_mean(y_*tf.log(tf.clip_by_value(y,1e-10,1.0)))

tensorflow提供了将softmax与交叉熵封装在一起的函数接口:

cross_entropy=tf.nn.softmax_cross_entropy_with_logits(labels=y_,logits=y)#其中y_与y分别为训练数据的标签与当前模型的预测结果

均值方差(MSE):

均值方差常用于作为回归的损失函数

tf.square()

 

  • 优化器:

相当于定义一个启动反向传播过程的开关按钮,一般在会话中循环调用该优化器,learning_rate为学习率,loss为损失函数

train_step=tf.train.AdamOptimizer(learning_rate).minimize(loss)

#反向传播学习

for ... :

    sess.run(train_step,feed_dict=batch_data)

通过tf.train.exponential_decay()设定指数衰减学习率

tf.train.exponential_decay(0.1,global_step,100,0.96,staircase=True)

参数含义分别为:初始学习率为0.1、总学习轮数、每训练100步更新一次学习率,每次将学习率*0.96、是否为阶梯状衰减

 

  • 正则化:

神经网络中通过在损失函数中添加正则化项来一定程度上抑制过拟合问题,正则化就是刻画模型复杂成都的指标,常用的L1正则化与L2正则化都是通过限制权重W的数值大小来抑制过拟合。

tensorflow中L1、L2正则化的定义方法:

#L1正则化
#get_regularization=tf.contrib.layers.l1_regularizer(0.0001)

#L2正则化
get_regularization=tf.contrib.layers.l2_regularizer(0.0001)

regularization1=get_regularization(w1)#w1为某一层的权重变量

参数为正则化项在损失函数中权重,一般权重大小要定义合适,太大则会破坏模型性能,导致欠拟合,太小又达不到抑制过拟合的效果,MNIST数据集中权重设为0.0001比较合适。

 

  • 滑动平均:

滑动平均模型在随机梯度下降(SGD)训练过程中能够增加模型的性能

ema=tf.train.ExponentialMovingAverage(0.99,step)#衰减率为0.99、控制衰减率的变量step

maintain_averages_op=ema.apply([v1,v2,...,vn])

#apply()函数传入一个集合,该集合中所有的变量都会滑动平均

sess.run(maintain_averages_op)#滑动平均更新所有的变量

ema.average(v1)获取v1的滑动平均

 

其他一些常见的运算:

tf.add(a,b)

和重载之后的+运算符一样的功能,用于张量的相加

tf.add_n(a)

将一个集合中的所有元素相加

tf.matmul(a,b)

实现张量之间的矩阵乘法

tf.clip_by_value(y,a,b)#将y限制在a与b之间,超出范围则取a或b

tf.reduce_mean()为求某一维度上的平均,第二个参数省略的时候默认求集合中所有元素的平均值。

类似的:

tf.reduce_sum :计算tensor指定轴方向上的所有元素的累加和;

tf.reduce_max  :  计算tensor指定轴方向上的各个元素的最大值;

tf.reduce_all :  计算tensor指定轴方向上的各个元素的逻辑和(and运算);

tf.reduce_any:  计算tensor指定轴方向上的各个元素的逻辑或(or运算);

 

你可能感兴趣的:(机器学习,Tensorflow,Python)