Tensorflow中一些常见的函数



Tensorflow中一些常见的函数


1.tf.constant(value,dtype=None,shape=None,name='Const')

创建一个常量tensor,按照给出value来赋值,可以用shape来指定其形状。value可以是一个数,也可以是一个list。 如果是一个数,那么这个常亮中所有值的按该数来赋值。 如果是list,那么len(value)一定要小于等于shape展开后的长度。赋值时,先将value中的值逐个存入。不够的部分,则全部存入value的最后一个值。

这里写图片描述


2.tf.nn.relu

使用激活函数relu进行计算 类似的还有 tf.sigmoid , tf.tanh


3.tf.matmul

进行矩阵相乘


4.tf.placeholder

运行时传入参数,placeholder(type,strucuct…)它的第一个参数是你要保存的数据的数据类型,大多数是tensorflow中的float32数据类型,后面的参数就是要保存数据的结构,比如要保存一个1×2的矩阵,则struct=[1 2]。


5.tf.Variable(initializer, name)

initializer是初始化参数,可以为tf.random_normal,tf.constant,tf.constant等,name就是变量的名字,用法如下:

import tensorflow as tf;
import numpy as np;    
import matplotlib.pyplot as plt;    

a1 = tf.Variable(tf.random_normal(shape=[2,3], mean=0, stddev=1), name='a1')  
a2 = tf.Variable(tf.constant(1), name='a2')  
a3 = tf.Variable(tf.ones(shape=[2,3]), name='a3')  

with tf.Session() as sess:  
     sess.run(tf.initialize_all_variables())  
     print sess.run(a1)  
     print sess.run(a2)  
     print sess.run(a3)
  
  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

输出的结果如下:

输出:
[[ 0.76599932  0.99722123 -0.89361787]
 [ 0.19991693 -0.16539733  2.16605783]]
1
[[ 1.  1.  1.]
 [ 1.  1.  1.]]
  
  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

6.tf.truncated_normal(shape, mean, stddev)

shape表示生成张量的维度,mean是均值,stddev是标准差。这个函数产生正太分布,均值和标准差自己设定。这是一个截断的产生正太分布的函数,就是说产生正太分布的值如果与均值的差值大于两倍的标准差,那就重新生成。和一般的正太分布的产生随机数据比起来,这个函数产生的随机数与均值的差距不会超过两倍的标准差,但是一般的别的函数是可能的。

示例代码:

import tensorflow as tf;  
import numpy as np;  
import matplotlib.pyplot as plt;  

c = tf.truncated_normal(shape=[10,10], mean=0, stddev=1)  

with tf.Session() as sess:  
    print sess.run(c)  
  
  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

输出结果如下:

输出:
[[ 1.95758033 -0.68666345 -1.83860338  0.78213859 -1.08119416 -1.44530308
   0.38035342  0.57904619 -0.57145643 -1.22899497]
 [-0.75853795  0.48202974  1.03464043  1.19210851 -0.15739718  0.8506189
   1.18259966 -0.99061841 -0.51968449  1.38996458]
 [ 1.05636907 -0.02668529  0.64182931  0.4110294  -0.4978295  -0.64912242
   1.27779591 -0.01533993  0.47417602 -1.28639436]
 [-1.65927458 -0.364887   -0.45535028  0.078814   -0.30295736  1.91779387
  -0.66928798 -0.14847915  0.91875714  0.61889237]
 [-0.01308221 -0.38468206  1.34700036  0.64531708  1.15899456  1.09932268
   1.22457981 -1.1610316   0.59036094 -1.97302651]
 [-0.24886213  0.82857937  0.09046989  0.39251322  0.21155456 -0.27749416
   0.18883201  0.08812679 -0.32917103  0.20547724]
 [ 0.05388507  0.45474565  0.23398806  1.32670367 -0.01957406  0.52013856
  -1.13907862 -1.71957874  0.75772947 -1.01719368]
 [ 0.27155915  0.05900437  0.81448066 -0.37997526 -0.62020499 -0.88820189
   1.53407145 -0.01600445 -0.4236775  -1.68852305]
 [ 0.78942037 -1.32458341 -0.91667277 -0.00963761  0.76824385 -0.5405798
  -0.73307443 -1.19854116 -0.66179073  0.26329204]
 [ 0.59473759 -0.37507254 -1.21623695 -1.30528259  1.18013096 -1.32077384
  -0.59241474 -0.28063133  0.12341146  0.48480138]]
  
  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

7.tf.train.ExponentialMovingAverage

这个函数用于更新参数,就是采用滑动平均的方法更新参数。这个函数初始化需要提供一个衰减速率(decay),用于控制模型的更新速度。这个函数还会维护一个影子变量(也就是更新参数后的参数值),这个影子变量的初始值就是这个变量的初始值,影子变量值的更新方式如下:

shadow_variable = decay * shadow_variable + (1-decay) * variable

shadow_variable是影子变量,variable表示待更新的变量,也就是变量被赋予的值,decay为衰减速率。decay一般设为接近于1的数(0.99,0.999)。decay越大模型越稳定,因为decay越大,参数更新的速度就越慢,趋于稳定。

tf.train.ExponentialMovingAverage这个函数还提供了自己动更新decay的计算方式:decay= min(decay,(1+steps)/(10+steps))其中steps是迭代的次数,可以自己设定。

示例代码如下:

import tensorflow as tf;  
import numpy as np;  
import matplotlib.pyplot as plt;  

v1 = tf.Variable(0, dtype=tf.float32)  
step = tf.Variable(tf.constant(0))  

ema = tf.train.ExponentialMovingAverage(0.99, step)  
maintain_average = ema.apply([v1])  

with tf.Session() as sess:  
    init = tf.initialize_all_variables()  
    sess.run(init)  

    print sess.run([v1, ema.average(v1)]) #初始的值都为0  

    sess.run(tf.assign(v1, 5)) #把v1变为5  
    sess.run(maintain_average)  
    print sess.run([v1, ema.average(v1)]) # decay=min(0.99, 1/10)=0.1, v1=0.1*0+0.9*5=4.5  

    sess.run(tf.assign(step, 10000)) # steps=10000  
    sess.run(tf.assign(v1, 10)) # v1=10  
    sess.run(maintain_average)  
    print sess.run([v1, ema.average(v1)]) # decay=min(0.99,(1+10000)/(10+10000))=0.99, v1=0.99*4.5+0.01*10=4.555  

    sess.run(maintain_average)  
    print sess.run([v1, ema.average(v1)]) #decay=min(0.99,<span style="font-family: Arial, Helvetica, sans-serif;">(1+10000)/(10+10000)</span><span style="font-family: Arial, Helvetica, sans-serif;">)=0.99, v1=0.99*4.555+0.01*10=4.6</span>  
  
  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27

输出结果如下:

输出:
[0.0, 0.0]
[5.0, 4.5]
[10.0, 4.5549998]
[10.0, 4.6094499]
  
  
  • 1
  • 2
  • 3
  • 4
  • 5

解释:每次更新完以后,影子变量的值更新,varible的值就是你设定的值。如果在下一次运行这个函数的时候你不在指定新的值,那就不变,影子变量更新。如果指定,那就variable改变,影子变量也改变


8.tf.clip_by_value

将张量中的一个值限制在一个范围之内

如:

a = tf.constant([[1.0,2.0,3.0],[4.0,5.0,6.0]])
print(tf.clip_by_value(a,2.5,4.5).eval())
  
  
  • 1
  • 2

输出[[2.5,2.5,3],[4,4.5,4.5]]由此可见小于2.5的换成了2.5,大于4.5的都换成了4.5

Tensor.eval()Operation.run() 方法代替 Session.run()

9.tf.reduce_mean

指求平均值

如:tf.reduce_mean(([1,2,3],[4,5,6]))

等于:(1+2+3+4+5+6)/6 = 3.5


10.p * tf.log(q)

交叉熵损失函数 H(p,q) = -求和符(p(x)log(q(x)))可以直接用Tensorflow交叉熵函数来计算 p * tf.log(q)


11.tf.nn.softmax_cross_entropy_with_logits(y,y_)


直接通过这个公式来实现softmax回归之后的交叉熵损失函数(y指原是神经网络的输出结果,y_指标准答案)

12.tf.reduce_sum

该函数用来求和


13.tf.greater

输入两个张量并比较大小,当维度不同时,进行类似于numpy广播的处理,当第一个参数大于第二个是为True反之为False


14.tf.select

(目前已经更新为tf.where)第一个参数为选择条件,当满足时使用第二个参数,不满足时返回第三个参数


15.tf.train.AdamOptimizer

该函数来控制学习速度。AdamOptimizer 通过使用动量(参数的移动平均数)来改善传统梯度下降,促进超参数动态调整。


16.tf.contrib.layers.l1_regularize

可以计算解决过拟合化问题的l1正则化项的值 #lambda表示正则化的权重


17.tf.contrib.layers.l2_regularize

可以计算解决过拟合化问题的l2正则化项的值


18.tf.add_to_collection

把变量放入一个集合,把很多变量变成一个列表


19.tf.train.ExpontialMovingAverage

实现滑动平均模型


20.tf.assign(x,y)

将y的值赋值给x 


30.

mnist = input_data.resd_data_sets("文件路径”)  
mnist.train.next_batch(batch_size)  #input_data.resd_data_sets
  
  
  • 1
  • 2

函数生成的类还提供了mnist.train.next_batch函数,他将从所有的训练数据中读取一小部分作为训练数据batch


31.

tf.trainable_variables

返回的是需要训练的变量列表

tf.all_variables

返回的是所有变量的列表

例如:

import tensorflow as tf;    
import numpy as np;    
import matplotlib.pyplot as plt;    

v = tf.Variable(tf.constant(0.0, shape=[1], dtype=tf.float32), name='v')  
v1 = tf.Variable(tf.constant(5, shape=[1], dtype=tf.float32), name='v1')  

global_step = tf.Variable(tf.constant(5, shape=[1], dtype=tf.float32), name='global_step', trainable=False)  
ema = tf.train.ExponentialMovingAverage(0.99, global_step)  

for ele1 in tf.trainable_variables():  
    print ele1.name  
for ele2 in tf.all_variables():  
    print ele2.name  
  
  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

输出结果如下:

输出:
v:0
v1:0
v:0
v1:0
global_step:0
  
  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

分析:

上面得到两个变量,后面的一个得到上三个变量,因为global_step在声明的时候说明不是训练变量,用来关键字trainable=False。


Tensorflow中一些常见的函数

猜你喜欢

转载自blog.csdn.net/zhaobinbin2015/article/details/81141269