Tensorflow notes

Tensorflow计算模型——计算图

概念:Tensorflow是一个通过计算图的形式来表述计算的编程系统。Tensorflow中的每一个计算都是计算图上的一个节点,而节点之间的边描述了计算之间的依赖关系。

使用:TensorFlow程序一般可以分为两个阶段,第一个阶段需要定义计算图中所有的计算;第二个阶段为执行计算。在Tensorflow程序中,系统会自动维护一个默认的计算图,通过tf.get_default_graph函数可以获取当前默认的计算图。除了使用默认的计算图,Tensorflow支持通过tf.Graph函数生成新的计算图。不同计算图上的张量和运算不会共享。

 

Tensorflow数据模型——张量

概念:在Tensorflow程序中,所有的数据都通过张量的形式来表示。从功能的角度上看,张量可以被简单理解为多维数组。其中零阶张量表示标量,也就是一个数;第一阶张量为向量;第n阶张量可以理解为一个n维数组。在张量中并没有真正保存数字,它保存的是如何得到这些数字的计算过程。

使用:第一类是对中间计算结果的引用,当一个计算包含很多中间结果时,使用张量可以大大提高代码的可读性;第二类是当计算图构造完成之后,张量可以用来获得计算结果(tf.Session().run(result))。

 

Tensorflow运行模型——会话

概念:会话拥有并管理TensorFlow程序运行时的所有资源。当所有计算完成之后需要关闭会话来帮助系统回收资源。

使用:一种模式需要明确调用会话生成函数和关闭会话函数

#创建一个会话

sess = tf.Session()

#使用这个创建好的会话来得到关心的运算结果

sess.run(...)

#关闭会话使得本次运行中使用到的资源可以释放

sess.colse()

 

    另一种模式是TensorFlow使用Python的上下文管理器来使用会话:

#创建一个会话,并通过Python上下文管理器来管理这个会话

with tf.Session() as sess:

    #使用这个创建好的会话来计算关心的结果

    sess.run(....)

    #不再需要调用Sess.close()函数来关闭函数

TensorFlow不会自动生成默认的会话,而是需要手动指定,当默认的会话被指定之后可以通过tf.Tensor.eval函数来计算一个张量的取值。

以下代码可以完成相同的功能

sess = tf.Session()

print(sess.run(result))

print(result.eval(session=sess))

在交互式环境下,通过设置默认会话的方式来获取张量的取值更加方便。tf.InteractiveSession会自动将生成的会话注册为默认会话。

sess = tf.InteractiveSession()

print(result.eval())

sess.close()

 

 

神经网络参数与TensorFlow变量

在TensorFlow中,变量(tf.Variable)的作用就是保存和更新神经网络中的参数,需要指定初值

w = tf.Variable(tf.random_normal([2, 3]), stddev=2)

 

                                     TensorFlow随机数生成函数

函数名称        随机数分布            主要参数

tf.random_normal                正太分布                                    平均值、标准差、取值类型

tf.truncated_normal             正太分布,但如果随机出来的值偏离平

                                            均值超过2个标准差那个这个数将会被重新随机 。   同上

tf.random_uniform               平均分布                                               最小、最大取值,取值类型

tf.random_gamma               Gamma分布                                         形状参数alpha、尺度参数                                                                                                                 beta、取值类型

 

                                                   TensorFlow常数生成函数

函数名称           功能            样例

tf.zeros                                       产生全0的数组                             tf.zeros([2, 3], int32)

tf.ones                                        产生全1的数组                           tf.ones([2, 3], int32)

tf.fill                                            产生一个全部为给定数字的数组      tf.fill([2, 3], 9)

tf.constant                                  产生一个给定值得常量                    tf.constant([1, 2, 3])

 

使用tf.initialize_all_variables实现初始化所有的变量

init_op  = tf.initialize_all_variables()

sess.run(init_op)

 

 

TensorFlow提供了placeholder机制用于提供输入数据。相当于定义了一个位置,这个位置中的数据在程序运行时再指定,这样在程序中就不需要生成大量常量来提供输入数据,而只需将数据通过placeholder传入TensorFlow计算图。

 

训练神经网络的步骤:

1. 定义神经网络的结构和前向传播的输出结果;

2. 定义损失函数以及选择反向传播优化的算法;

2. 生成会话,并且在训练数据上反复运行反向传播优化算法。

 

激活函数:

    目前tensorflow提供了七种不同的非线性激活函数,tf.nn.relu、tf.sigmoid和tf.tanh是其中比较常用的。

 

损失函数:

    

posted @ 2018-04-03 20:22  YoungLou  阅读(124)  评论(0)    收藏  举报