您的位置:首页 > 其它

TensorFlow的个人理解

2017-06-29 15:07 197 查看
本篇文章只是基于自己对TensorFlow使用过程中的个人理解,以及一些基本注意事项。

TensorFlow™ 是一个采用数据流图(data flow graphs),用于数值计算的开源软件库。节点(Nodes)在图中表示数学操作,图中的线(edges)则表示在节点间相互联系的多维数据数组,即张量(tensor)。它灵活的架构让你可以在多种平台上展开计算,例如台式计算机中的一个或多个CPU(或GPU),服务器,移动设备等等。TensorFlow 最初由Google大脑小组(隶属于Google机器智能研究机构)的研究员和工程师们开发出来,用于机器学习和深度神经网络方面的研究,但这个系统的通用性使其也可广泛用于其他计算领域。

这是 TensorFlow 中文社区,这其特征提到:线是 tensor 类型,是一种多维数组,需要注意的是

- tensor 类型是不可迭代的

- tensor 类型和 list 类型可以相互转换,且 list 类型在图中不影响梯度传递

- 在计算图中,不可使用非数学计算符号,比如用 if 做一个数据过滤 这一条需要解释一下,如果你做一个条件过滤,相当于做一个截断,梯度无法传递给 if 条件之前的变量,之前的变量都会被当成常量。比如你用 TensorFlow 写一个 GAN (对抗式生成网络),需要做一个变量选取,如果在生成模型的输出做一个条件选取,那么生成模型的全部变量将无法被梯度下降优化器做优化。

- 关于 tf.variable_scope 的理解 网上说了很多原因为什么需要这样做的原因,我决定直接从结果上来说,或者说 TensorFlow 的规定来说(个人愚见)。以 LSTM 为例(LSTM是RNN的一个变种),在一个 variable_scope 中只允许有一个 LSTM 实例。如果你使用了 LSTMCell 这种类,你很可能直接将其封装在一个函数里,然后建立图表的时候调用一次,这时候其实你是失去了对那个 LSTMCell 实例的控制(就是你想再用一次这个实例其实是没办法做到的),但是TensorFlow会给你记着它里面的所有变量,所以 TensorFlow 只允许有一个 LSTMCell 实例,如果你需要用两个 LSTMCell 实例,那么再开一个 variable_scope 就可以了。同时 variable_scope 可以传给梯度下降优化器,可以选择一些变量进行优化,其他的变量当成常量。

- TensorFlow一般情况下是先构建计算图,对于数据使用 placeholder 进行占位,之后用feed_dict进行填充,其实也可以直接将数据当成常量投喂给计算图,不过需要解决迭代问题。参见第一条。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  TensorFlow