DL学习笔记-TensorFlow概念

总结以供自用,如果转载请指明出处:https://blog.csdn.net/qq_36387683
TensorFlow是 谷歌 基于DistBelief进行研发的第二代 人工智能 学习系统 ,其命名来源于本身的运行原理。Tensor(张量)意味着N维数组,Flow(流)意味着基于数据流图的计算,TensorFlow为张量从流图的一端流动到另一端计算过程。TensorFlow是将复杂的数据结构传输至人工智能神经网中进行分析和处理过程的系统。 - 百度百科

TensorFlow中的计算可以表示为一个有向图(directed graph),或称计算图(computation graph),其中每一个运算操作(operation)将作为一个节点(node),节点与节点之间的连接成为边(edge)。

一、计算模型-计算图

1、TensorFlow中的每一个计算都是计算图上的一个节点,而节点之间的边描述了计算之间的依赖关系

2、系统会自动维护一个默认的计算图,通过tf.get_default_graph函数可以获取当前默认的计算图。
3、通过tf.Graph函数生成新的计算图,不同的计算图上的张量和运算不会共享

4、计算图不仅可以用来隔离计算和张量,还提供了管理张量和计算的机制。通过tf.Graph.device()函数指定运行计算的设备。通过集合(collection)来管理不同类别的资源。比如通过tf.add_to_collection函数可以将资源加入一个或多个集合中,然后通过tf.get_collection获取一个集合里面的所有资源。

扫描二维码关注公众号,回复: 1563050 查看本文章

二、数据模型-张量

1、张量可以简单的理解为多维数组。零阶张量表示标量(scalar),也就是一个数;一阶张量为向量(vector),也就是一个一维数组,二阶张量就是一个矩阵了。n阶张量可以理解为n维数组。
2、张量中并没有保存真正的数字,它保存的是如何得到这些数组的计算过程。比如我们经常看到的loss,accuracy,

3、一个张量中主要保存了三个属性:name,shape,type。name是张量的标识符,也可以看出执行的计算。它的命名规则是‘node:src_output’,name是节点的名称,也就是计算的名称,src_output表示当前张量来自节点的第几个输出。
4、张量使用主要有两大类,第一类是对中间计算结果的引用。通过张量来存储中间结果可以方便获取中间结果,如在卷积神经网络中,卷积或池化会改变张量的维度,通过result.get_shape函数可以获取结果张量的维度信息。

第二类是当计算图构造完成之后,张量可以用来获得计算结果,也就是真是的数字。我们平常就是这种用法,在网络结构搭建完成以后,到后面计算损失和准确度。

三、运行模型-会话

1、所有计算之后需要关闭会话来帮助系统回收资源,否则就可能出现资源泄露的问题。使用sess.close()函数释放资源。然后当程序因为异常而退出是,关闭会话的函数可能就不会被执行从而导致资源泄露。所以平常最好使用with的写法。
2当默认的会话被指定之后可以通过tf.Tensor,eval()来计算一个张量的值。sess.run(result) == result.eval(session = sess).

3、通过configProto可以配置类似并行的线程数、GPU分配策略、运算超时时间等。常用参数有两个。
第一个是allow_soft_placement,这是一个布尔型的参数,当它为True时,以下任一条件成立时,GPU上的运算可以放到CPU上运行:

1、运算无法在GPU上执行。

2、没有GPU资源(比如运算被指定在第二个GPU上运行,但是机器只有一个GPU)

3、运算输入包含对CPU计算结果的引用
通过将allow_soft_placement参数设置为True,当某些运算无法被当前GPU支持时,可以自动调整到CPU上,而不是报错。可以让程序在拥有不同数量的GPU机器上顺利运行。

第二个参数是log_device_placement,也是布尔型参数,当它为True时日志中会将记录每个节点被安排在哪个设备上以方便调用。在生产环境中将这个参数设置为False可以减少日志量。

四、TensorFlow变量-Variable

1、Variable是一类特殊的运算操作,它可以将一些需要保留的tensor数据储存在内存和显存中,比如weight,bias
2、我们一般声明weight都会初始化一个正态分布的值,bias则是常数。

3、除了使用随机数或者常数,TensorFlow也支持通过其他变量的初始值来初始化新的变量。

w2 = tf.Variable(weights.initialized_value())
w3 = tf.Variable(weights.initalized_value() * 2.0)

4、在我们定义会话以后,一定要初始化所有变量,不然会出错。

五、placeholder

1、TensorFlow提供了placeholder机制用于提供输入数据。placeholder相当于定义了一个位置,这个位置中的数据在程序运行时再指定。
2、用feed_dict来指定placeholder的值。feed_dict是一个字典(map),在字典中指定每个会用到的placeholder的值。如果某个需要的placeholder的值没有指定,会报错。

六、训练神经网络的过程

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

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

3、生成会话并在训练数据上反复运行反向传播优化算法。

无论神经网络的结构如何变化,这三个步骤是不变的。

猜你喜欢

转载自blog.csdn.net/qq_36387683/article/details/80623259
今日推荐